ppgsql从参数声明变量
ppgsql declaring variable from parameter
我是 运行 来自命令行的 sql 查询,我在其中传入名为 tablename 的值:
psql "hostname" -v tablename= -a -q -f "filename.sql"
然后我这样设置变量:
\set 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 ":"
您的代码无法运行,因为您试图在服务器端 (plpgsql) 读取客户端变量 (psql)。您需要将值推送到自定义服务器端变量,下一步您可以从 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
您不能在 plpgsql 代码中使用 psql 语法 :var
。
我是 运行 来自命令行的 sql 查询,我在其中传入名为 tablename 的值:
psql "hostname" -v tablename= -a -q -f "filename.sql"
然后我这样设置变量:
\set 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 ":"
您的代码无法运行,因为您试图在服务器端 (plpgsql) 读取客户端变量 (psql)。您需要将值推送到自定义服务器端变量,下一步您可以从 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
您不能在 plpgsql 代码中使用 psql 语法 :var
。