如果我在 psql 终端,那么我可以声明并使用这样的变量:
\set message_id soifsdaofisd.gmail.com;
select * from emails where message_id = ':message_id';
如何在 pgAdmin 中执行此操作?
当我在 pgAdmin 中尝试此操作时,我收到错误:
错误:“CALAdkA4YC0”处或附近的语法错误第 3 行:设置 message_id soifsdaofisd.gmail.com.
当尝试在 pgAdmin 中运行脚本时,我想要类似的东西,我想存储一个值以在多个查询中使用。这是我发现的和SQL类似的
set session vars.batch_id = '82';
select * from batches where batch_id = current_setting('vars.batch_id')::int;
\set
是 psql(交互式命令行终端)的一项功能,在 pgAdmin 中不可用。
PostgreSQL 通常不在普通 SQL 中使用变量。您可以在匿名代码块(DO
语句)或函数或过程中使用PL/pgSQL代码。
或者您可以(ab)使用“自定义选项”,对于纯文本服务器端“变量”,独立于客户端:
SET foo.test = 'SELECT bar FROM baz';
SELECT current_setting('foo.test');
详情:
其他选项:
另一种方法是创建视图。
-- create view to store variable list
create view script_variables as select 'soifsdaofisd.gmail.com' as message_id;
-- run your script
select * from emails where message_id = (select message_id from script_variables);
-- clean up
drop view script_variables;
尝试使用波纹管结构:
DO $$
DECLARE
a INT;
BEGIN
a := 1;
END;
$$;