У меня мультитенантная установка БД, и мне нужно добавить несколько столбцов. Я использую схемы (и search_path) для разделения своих пользователей, поэтому я ищу повсеместный способ применения изменения DDL-схемы ко всем моим базам данных. Первоначально я думал, что смогу сделать это как один запрос (курсор на pg_catalog), но psql -f
предпочел бы вызвать вызов командной строки .
8
Postgres
вместоPostgreSQL
совершенно нормально.Ответы:
Я бы предпочел последнее решение. Вы можете собрать имена схем в файл (одна схема на строку) в
psql
:Тогда вы можете легко сделать следующее:
Иметь сценарий изменения DDL (например,
change_schema.sql
), без ссылки на включающую схемуЗатем вы можете превратить каждую строку списка схем в строку, подобную
например, с помощью простой
sed
команды - тогда вам просто нужно выполнить эти команды. Конечно, вы можете превратить его в правильный скрипт оболочки, если хотите.источник
EXECUTE
для запуска операторов в виде динамического SQL.Просто для полноты, другой подход состоит в том, чтобы перебрать все схемы и выполнить изменение с помощью динамического SQL в PL / PgSQL, например:
источник