Обновить
2
0

Python/Django разработчик

Отправить сообщение
Так и есть. Каждый патч исполняется внутри транзакции (только в PostgreSQL). Если при накатывании патча произошла ошибка, транзакция откатывается
Это костыль и только для этого конкретного случая. Если надо поменять тип существующего аргумента, тип результата, без DROP-CREATE не обойтись
Алхимия, а вернее Alembic, умеет не все. Хранимые процедуры ему не под силу
Я имел в виду не миграции с движка на движок. Sqlibrist решает задачу изменений структуры БД при, скажем, разработке и переносе этих изменений с девелоперской на другие экземпляры базы: тестовую, продакшен. Когда нужно написать патч, меняющий/добавляющий объекты базы.
Поступает, как следует. Например, есть две перегруженные функции: test(a integer) и test(b text). Описываем каждую в отдельном файле:

test_int.sql:

--UP
create function test(a integer) 
returns boolean 
as $$ 
return true; 
$$ 
language plpgsql;

--DOWN
drop function test(integer);


test_text.sql:

--UP
create function test(b text) 
returns boolean 
as $$ 
return false; 
$$ 
language plpgsql;

--DOWN
drop function test(text);


Теперь, если вы меняете одну из них, скажем, первую, то она сначала удалится инструкцией из раздела --DOWN, а потом пересоздастся. При этом DROP FUNCTION отличаются типами аргументов, поэтому путаницы не будет.
если будете писать на вендоро-независимом SQL, то почему бы и нет

Информация

В рейтинге
Не участвует
Откуда
Запорожская обл., Украина
Зарегистрирован
Активность