Написать скрипт в CLI, который на входе принимает две схемы данных из PSQL, а на выходе выдает команды, которые позволят сделать миграцию

Задание закрыто
Статус рабочей области:Закрыта по истечению срока выполнения работ
Стоимость:20 000 рублей
Срок выполнения:10 дней
Варианты оплаты:По договоренности
Дата публикации:2024-07-21 19:06
Обновлено:2024-07-25 11:07
Был(а) на сайте:2024-08-15 13:51

Написать скрипт в CLI, который на входе принимает две схемы данных из PSQL, а на выходе выдает команды, которые позволят сделать миграцию

 
Задача

Есть два состояния сохранённое через backup PSQL (plain, scheme-only).

Нужно сравнить два состояния базы, и составить SQL команды для миграции.
Допускается из команд только добавить. Удаление, изменение - нельзя.

На входе два SQL файла, на выходе SQL файл с командами для миграции.

Добавляем:
схемы,таблицы, колонки, индексы, зависимости, sequence, функции, процедуры

Разработка в частном репозитории GitLab.
Зависимости в requirements (без Poetry)
Python 3.9

вызов python origin.sql migrated.sql sql_command_for_migrate.sql

сравниваем origin.sql <> migrated.sql результат в sql_command_for_migrate.sql

Примеры во вложении


-----
РАБОТА ТОЛЬКО С ООО, ИП ИЛИ САМОЗАНЯТЫМИ! СТРОГО!

Оставлять заявки могут только авторизованные пользователи.
Исполнитель по этому заданию выбран.
Robert Samigullin
Специализация: Программирование и IT
  • 20 000 руб10 дней
Добрый день. Являюсь действующим DevOps/SRE инженером.
Готов взяться за поддержку вашего проекта.
Из моих компетенций:
- Работы с СУБД Postgres, MySQL, Mongo
- Работы с сервисами очередей RabbitMq, Kafka
- Работаю только с серверами под управлением *nix-like систем. Т.е. windows - сервер не рассматриваю.
- Работа с nginx - для проксирования или хостинга вашего сайта
- Kubernetes - развертка с нуля, поддержка.
- S3 хранилища - ceph,minio
- Планирование архитектуры в облаке, хороший опыт в использовании YandexCloud.
Это лишь часть из моих компетенций, которыми я готов поделиться с вами.
Если заинтересованы - предлагаю следующий подход:
- Связываемся и обговариваем перечень требований к проекту.
- Обсуждаем лучшие подходы и решения ваших проблем, которые вижу я, и которые видите вы.
- Договариваемся о цене.
Готов к работе на долгосрочной основе.
Имею собственное ИП
Takeda Daicha
Специализация: Программирование и IT
  • 20 000 руб10 дней
здравсвуйте
Добрый день!

Готова приступить в любое время.
Для решения этой задачи можно использовать библиотеку sqlparse для парсинга SQL-скриптов и определения различий между ними. Затем, основываясь на этих различиях, можно сгенерировать SQL-команды для миграции.

Вот пример кода, который выполняет эту задачу:

import re
from sqlparse import parse, tokens as T
from sqlparse.sql import Identifier, Token

def compare_schemas(origin_schema, migrated_schema):
"""Сравнивает две схемы и возвращает список SQL-команд для миграции."""
commands = []

# Парсим оба SQL-скрипта
origin_statements = list(parse(origin_schema))
migrated_statements = list(parse(migrated_schema))

# Фильтрация по типу команды
def filter_by_type(statement):
return statement.get_type() == 'CREATE'

origin_create_statements = filter(filter_by_type, origin_statements)
migrated_create_statements = filter(filter_by_type, migrated_statements)

# Сравнение схем
for create_statement in origin_create_statements:
if create_statement not in migrated_create_statements:
commands.append(create_statement.to_sql())

return commands

def generate_commands_for_migration(origin_schema_path, migrated_schema_path):
with open(origin_schema_path) as f:
origin_schema = f.read()
with open(migrated_schema_path) as f:
migrated_schema = f.read()

commands = compare_schemas(origin_schema, migrated_schema)

with open('sql_command_for_migrate.sql', 'w') as f:
f.write('\n'.join(commands))

if __name__ == '__main__':
generate_commands_for_migration('origin.sql', 'migrated.sql')
09:23 22.07.24
Этот код принимает два пути к файлам с SQL-скриптами и генерирует SQL-команды для миграции в файл sql_command_for_migrate.sql. Он предполагает, что все изменения в схеме базы данных происходят через команды CREATE, и что нет необходимости в удалении или изменении существующих объектов.

Обратите внимание, что этот код не учитывает возможные зависимости между объектами базы данных, поэтому может потребоваться дополнительная логика для обработки таких случаев.
Эдгар Хадеев

Баланс качества, стоимости и скорости залог успеха

Специализация: Программирование и IT
  • 20 000 руб10 дней
Добрый день, готов написать скрипт для миграции, задача понятна, могу приступить немедленно, являюсь самозанятым.
virgil rs

Фрилансерский уклад един!

Специализация: Программирование и IT
  • 20 000 руб10 дней
Привет, готов сделать
Опыт работы с CI имею
Дамир Викторович Радионов

Делаю как себе, - старательно и до самого конца.

Специализация: Программирование и IT
  • 20 000 руб10 дней
Здравствуйте. Готов помочь Вам с проектом. Я самозанятый. Пишите.

Оставлять заявки могут только авторизованные пользователи.

Другие открытые задания:

поиск заданий