如何在pgAdmin中声明变量

时间:2014-05-09 09:43:08

标签: postgresql variables psql pgadmin

如果我在psql终端,那么我可以声明并使用这样的变量:

\set message_id soifsdaofisd.gmail.com;
select * from emails where message_id = ':message_id';

如何在pgAdmin中执行此操作?

我在pgAdmin中尝试这个时出现错误:

  

错误:“CALAdkA4YC0”或其附近的语法错误第3行:设置message_id   soifsdaofisd.gmail.com。

3 个答案:

答案 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功能键。

pgScript scripting language reference中的详细信息。

答案 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;