Как передать параметр вместе с файлом при выполнении команды postgresql в командной строке? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть файл с именем insert_all.sql, который содержит содержимое, как показано ниже.Здесь v1 - передаваемый параметр.

 do $$
    begin
    delete from tabledetails where table_name = '$(v1)';
    end;
    $$;

Я пытаюсь выполнить запрос в этом файле (insert_all.sql) с помощью команды, приведенной ниже.Но это не работает.Что не так с моей командой?Если это не так, советуйте мне по этому поводу.

psql.exe -U postgres -p 5454 -h 127.0.0.1 -d desk -f D:\insert_all.sql -v v1='statusTable'

1 Ответ

0 голосов
/ 21 декабря 2018

Параметр переменной работает для простых запросов в файле, но не работает внутри блоков DO.Один из вариантов - создать таблицу TEMP, в которой хранится переменная, а затем использовать ее следующим образом.

create temp table var_temp as select :'v1'::TEXT as var;
 do $$
    begin
    delete from tabledetails where table_name =(select var from var_temp) ;
    end;
 $$; 

psql.exe -U postgres -p 5454 -h 127.0.0.1 -d desk -f D:\insert_all.sql -v v1="statusTable"

Если у вас нет других операций, для которых требуется блок DO, рассмотрите возможность запуска удаления как простого оператора SQL.

...