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