PostgreSQL PSQL SELECT 到变量中

Rai*_*ner 4 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);
Run Code Online (Sandbox Code Playgroud)

auc_user_insertauc_user_selectauc_user_delete是特定于应用程序的 Postgres 函数,并且对每个自身都可以正常工作(在查询工具内)。该insert函数返回一个 bigint 作为唯一 id,我想将其分配给变量oid以便在下一行中使用。

但在 PSQL 语句中INTO :oid我收到错误

ERROR:  Relation 'bigint' doesn't exist
Run Code Online (Sandbox Code Playgroud)

有什么问题以及使用这样的变量的正确方法是什么?感谢您的任何提示!

Dan*_*ité 7

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

SELECT auc_user_insert(:'username', :'emailadr', :'password') AS oid;
\gset
SELECT auc_user_select(:oid);
SELECT auc_user_delete(:oid);
Run Code Online (Sandbox Code Playgroud)

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

如果您有旧版本,则模拟它会困难得多。

联机帮助页中的说明:

\gset [ 前缀 ]

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