Для выполнения команд по условию в psql имеется конструкция \if. Например, нам нужен аналог CREATE .. IF NOT EXISTS для слотов репликации:
SELECT NOT EXISTS (SELECT NULL FROM pg_replication_slots WHERE slot_name = 'replica') AS is_not_exists
\gset
\if :is_not_exists
SELECT pg_create_physical_replication_slot('replica');
\endif
То же самое можно сделать c \gexec. И без промежуточной переменной:
SELECT 'SELECT pg_create_physical_replication_slot(''replica'')'
WHERE NOT EXISTS (SELECT NULL FROM pg_replication_slots WHERE slot_name = 'replica')
\gexec
Комментариев нет:
Отправить комментарий