如何在plpgsql中读写psql变量

时间:2019-05-01 15:49:47

标签: postgresql plpgsql

我需要在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之外!)。

1 个答案:

答案 0 :(得分:0)

您不能这样做。 psql是客户端-plpgsql是服务器端编程环境。这两个应用程序都在不同的环境中运行-理论上并且通常在不同的计算机上运行,​​并且每次都在不同的进程中运行。因此,您无法触摸psql中的plpgsql变量。不支持此功能。

有一种解决方法-您可以使用服务器端配置变量,这些变量可以从SQL语言访问,然后可以从(客户端,服务器)端访问。