我需要在plpgsql中读取psql变量。似乎没有办法做到这一点,至少我还没有解决办法。
1)在psql中存储一些var 2)在plpgsql中读取此变量,并将另一个pg中的变量存储为psql 变量 3)在SQL查询中读取最终的psql变量
尝试var:=:var(不起作用) 在plpgsql中尝试了\ gset(不起作用) 不知道如何继续
\set var1 100
SELECT :var1 AS var1;
>>
var1
------
100
(1 row)
--All good
--Assign psql variable using \gset
SELECT 200 AS var2 \gset
SELECT :var2 AS var2;
>>
var2
------
200
--All good
DO $$
DECLARE
var3 int;
BEGIN
--I want to get psql variable var2. This doesn't work
var3 := :var2;
--I want to store var3 to psql variable using \gset method. This doesn't work either
EXECUTE 'SELECT ' || var3 || ' AS var3 \\gset';
END $$;
>>
ERROR: syntax error at or near ":"
LINE 6: var3 := :var2;
^
--This is what I want in the end
SELECT :var3 AS var3;
>>
ERROR: syntax error at or near ":"
LINE 1: SELECT :var3 AS var3;
^
--This obviously doesn't work
我想在plpgsql中读取psql变量,然后对它们进行一些处理,并存储为新的psql变量,以便以后在sql查询中读取(在plpgsql之外!)。
答案 0 :(得分:0)
您不能这样做。 psql
是客户端-plpgsql
是服务器端编程环境。这两个应用程序都在不同的环境中运行-理论上并且通常在不同的计算机上运行,并且每次都在不同的进程中运行。因此,您无法触摸psql
中的plpgsql
变量。不支持此功能。
有一种解决方法-您可以使用服务器端配置变量,这些变量可以从SQL语言访问,然后可以从(客户端,服务器)端访问。