如何在pgAdmin中声明变量

dag*_*da1 10 postgresql variables pgadmin psql

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

\set message_id soifsdaofisd.gmail.com;
select * from emails where message_id = ':message_id';
Run Code Online (Sandbox Code Playgroud)

我怎么能在pgAdmin中这样做?

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

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

Erw*_*ter 9

\set 是psql(交互式命令行终端)的一个功能,在pgAdmin中不可用.

PostgreSQL通常不使用普通SQL中的变量.您可以在匿名块(语句)或函数中使用PL/pgSQL代码.DO

但是,您可以(ab)使用自定义选项,用于服务器端"变量",与您当前使用的客户端无关:

SET foo.test = 'SELECT bar FROM baz';
SELECT current_setting('foo.test');
Run Code Online (Sandbox Code Playgroud)

这个相关答案的细节:
PostgreSQL中用户定义的变量

还有pgScript,它是pgAdmin查询工具中的本地脚本扩展,您可以在其中使用本地变量,与您在psql中可以执行的操作相比.每个文件:

您可以通过从"查询"菜单中选择"执行pgScript"而不是"执行"来运行pgScript脚本,或者按"执行pgScript"工具栏按钮,或者按F6功能键.

pgScript脚本语言参考中的详细信息.

  • 有没有人认为这是postgres的一个荒谬的限制? (18认同)
  • Nvm,在这里找到答案:https://www.postgresql.org/message-id/201001231852.35717.j.kobal@gmx.com需要将输出设置为变量并打印出来,如下所示:`declare @mytbl ,@ maxid; 设置@mytbl ='sometable'; 设置@maxid = 2500; 从@mytbl设置@res = select count(*),其中id <= @maxid; print @res;` (2认同)

小智 7

当尝试在 pgAdmin 中运行脚本时,我想要类似的东西,我想存储一个值以在多个查询中使用。这是我发现的类似于 SQL

set session vars.batch_id = '82';

select * from batches where batch_id = current_setting('vars.batch_id')::int;

Run Code Online (Sandbox Code Playgroud)