Как я могу процитировать именованный аргумент, переданный в psql?

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, но я бы предпочел, чтобы они были в одном и том же сценарии, поскольку на самом деле это два шага. в едином процессе.

6
задан Erwin Brandstetter 18 November 2012 в 12:42
поделиться