如果我在psql终端,那么我可以声明并使用这样的变量:
\set message_id soifsdaofisd.gmail.com;
select * from emails where message_id = ':message_id';
如何在pgAdmin中执行此操作?
我在pgAdmin中尝试这个时出现错误:
错误:“CALAdkA4YC0”或其附近的语法错误第3行:设置message_id soifsdaofisd.gmail.com。
答案 0 :(得分:9)
\set
是psql(交互式命令行终端)的一项功能,在pgAdmin中不可用。
PostgreSQL通常不在普通SQL中使用变量。您可以在匿名阻止(PL/pgSQL code语句)或DO
中使用function。
但是,可以(ab)使用customized options,用于服务器端"变量",与您目前使用的客户端无关:
SET foo.test = 'SELECT bar FROM baz';
SELECT current_setting('foo.test');
此相关答案的详情:
User defined variables in PostgreSQL
还有 pgScript ,这是pgAdmin查询工具中的本地脚本扩展,您可以在其中使用本地变量,与您在psql中可以执行的操作相比。每个文档:
您可以通过从中选择执行pgScript来运行pgScript脚本 查询菜单而不是执行,或者您按下执行pgScript 工具栏按钮,或按F6功能键。
答案 1 :(得分:2)
当尝试在pgAdmin中运行脚本时,我想要一个类似的地方,我想要存储一个值以在多个查询中使用。这是我发现的与SQL相似的
set session vars.batch_id = '82';
select * from batches where batch_id = current_setting('vars.batch_id')::int;
答案 2 :(得分:1)
另一种方法是创建视图。
-- 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;