将PostgreSQL的PSQL SELECT转换为变量

时间:2015-02-03 16:49:24

标签: postgresql variables psql

在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以供下一行使用。

但是在INTO :oid语句的PSQL中,我收到了错误

ERROR:  Relation 'bigint' doesn't exist

有什么问题以及使用这样一个变量的正确方法是什么?谢谢你的提示!

1 个答案:

答案 0 :(得分:1)

假设INSERT INTO旨在影响:oid变量,而不是将select的结果插入到表中,您需要这样做:

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

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

如果您的版本较旧,则很难模仿它。

联机帮助页的说明:

  

\ gset [prefix]

     

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

相同