#sql #postgresql #pgadmin
#sql #postgresql #pgadmin
Вопрос:
Я запускаю SQL-запрос из командной строки, где я передаю значение с именем tablename:
psql "hostname" -v tablename=$1 -a -q -f "filename.sql"
Затем я устанавливаю переменную следующим образом:
set tablename :tablename
И затем у меня есть функция, в которой я хочу использовать переменную tablename следующим образом:
DO $
BEGIN
if (tablename = 'movie_table') then
-- query goes in here
END if;
END;
$;
Я также попытался объявить переменную с несколькими вариантами этого:
DECLARE tablename varchar := :tablename;
Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения. Я получаю следующую ошибку:
syntax error at or near ":"
Ответ №1:
Ваш код не может работать, потому что вы пытаетесь прочитать переменные на стороне клиента (psql) на стороне сервера (plpgsql). Вам нужно поместить значение в пользовательскую переменную на стороне сервера, и на следующем шаге вы сможете прочитать его из среды plpgsql:
postgres=# set client_side_var Ahoj
postgres=# select set_config('my.client_side_var', :'client_side_var', false);
┌────────────┐
│ set_config │
╞════════════╡
│ Ahoj │
└────────────┘
(1 row)
postgres=# do $
declare var text default current_setting('my.client_side_var');
begin
raise notice '>>>%<<<', var;
end;
$;
NOTICE: >>>Ahoj<<<
DO
Вы не можете использовать синтаксис psql :var
внутри кода plpgsql.