将PostgreSQL PSQL SELECT语句的结果存储到变量中

3
在Postgres控制台(PSQL)中,我尝试编写一个简单的“批处理”测试:
\set oid

\set username 'john'
\set emailadr 'john@mailbox.net'
\set password 'jjjj'
INSERT INTO :oid SELECT auc_user_insert(:'username', :'emailadr', :'password');
SELECT auc_user_select(:oid);
SELECT auc_user_delete(:oid);

auc_user_insertauc_user_selectauc_user_delete 是与应用程序相关的Postgres函数,每个函数在查询工具内都能正常使用。

insert 函数返回 bigint 类型的唯一 id,我想将其分配给变量 oid,以便在下一行中使用。

但是,在 PSQL 中使用 INTO :oid 语句时,我会收到错误提示。

ERROR:  Relation 'bigint' doesn't exist

这个变量有什么问题,正确的使用方式是什么?感谢任何提示!

1个回答

6

假设INSERT INTO是要影响:oid变量而不是将选择结果插入表中,那么你需要这样写:

SELECT auc_user_insert(:'username', :'emailadr', :'password') AS oid;
\gset
SELECT auc_user_select(:oid);
SELECT auc_user_delete(:oid);

\gset是自psql 9.3版本以来的新元命令。

如果您使用较旧的版本,则很难模拟此操作。

从manpage中的描述:

\gset [ prefix ]

将当前查询输入缓冲区发送到服务器,并将查询的输出存储到psql变量中(请参见变量)。要执行的查询必须返回正好一行。该行的每个列都存储在单独的变量中,名称与列名相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接