среда, 20 ноября 2019 г.

Условное выполнение команд в psql


Для выполнения команд по условию в 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