在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_insert
,auc_user_select
和auc_user_delete
是特定于应用程序的Postgres函数,适用于每个人(在查询工具中)。
insert
函数返回一个bigint作为唯一ID,我想将其分配给变量oid
以供下一行使用。
但是在INTO :oid
语句的PSQL中,我收到了错误
ERROR: Relation 'bigint' doesn't exist
有什么问题以及使用这样一个变量的正确方法是什么?谢谢你的提示!
答案 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变量中(请参阅变量)。查询是 执行必须返回一行。存储该行的每一列 到一个单独的变量,名称与列
相同