psql имеет конструкцию для передачи именованных аргументов:
psql -v name='value'
на который затем можно ссылаться внутри скрипта:
SELECT :name;
что даст результат
?column?
----------
value
(1 row)
Во время разработки мне нужно довольно часто удалять и пересоздавать копии базы данных, поэтому я пытаюсь автоматизировать этот процесс. Поэтому мне нужно выполнить запрос, который принудительно отключит всех пользователей, а затем удалит базу данных. Но база данных, с которой это работает, будет различаться, поэтому имя базы данных должно быть аргументом.
Проблема в том, что для запроса на отключение пользователей требуется строка(WHERE pg_stat_activity.datname = 'dbname'
)а для отбрасываемого запроса требуется токен без кавычек(DROP DATABASE IF EXISTS dbname
). (Извините. Не знаю, как назвать такой токен.)
Я могу использовать именованный аргумент без кавычек в запросе DROP, но цитирование именованного аргумента в запросе на отключение приводит к тому, что аргумент не расширяется. то есть,Я бы получил строку ':name'
вместо строки 'value'
.
Есть ли способ превратить значение без кавычек в строку или превратить строку в токен без кавычек для запроса DROP? Я могу обойти это, поместив запросы на отключение и DROP в отдельные сценарии и передав аргумент с кавычками для отключения и без кавычек для DROP, но я бы предпочел, чтобы они были в одном и том же сценарии, поскольку на самом деле это два шага. в едином процессе.