如何在plpgsql中读写psql变量
Posted
技术标签:
【中文标题】如何在plpgsql中读写psql变量【英文标题】:How to read and write psql variables in plpgsql 【发布时间】:2019-05-01 15:49:47 【问题描述】:我需要读取 plpgsql 中的 psql 变量。似乎没有办法做到这一点,至少我还没有看到解决方案。
1) 在 psql 中存储一些 var 2)在plpgsql中读取这个var并将另一个var存储在plpgsql中作为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 查询中读取(OUTSIDE plpgsql !!!)。
【问题讨论】:
【参考方案1】:你不能这样做。 psql
是客户端 - plpgsql
是服务器端编程环境。这两个应用程序都在不同的环境中运行——理论上并且通常在不同的计算机上,并且每次都在不同的进程中。所以你不能从plpgsql
触摸psql
变量。不支持此功能。
有一种解决方法 - 您可以使用服务器端配置变量,这些变量可从 SQL 语言访问,然后可从(客户端、服务器)端访问。
【讨论】:
以上是关于如何在plpgsql中读写psql变量的主要内容,如果未能解决你的问题,请参考以下文章