Postgresql 使用psql接口设置数组

Postgresql 使用psql接口设置数组,postgresql,psql,Postgresql,Psql,我有一个函数,可以从数组向数据库添加用户,例如 psql -c "SELECT addUsersFromList(array['userA','userB','userC'])" 这很好,但是我更希望能够将其作为脚本运行,如下所示: psql -f add_users.sql -v userlist=array['userA','userB','userC']) 并添加_user.sql: SELECT addUsersFromList(:userlist); 当我执行

我有一个函数,可以从数组向数据库添加用户,例如

psql -c "SELECT addUsersFromList(array['userA','userB','userC'])"
这很好,但是我更希望能够将其作为脚本运行,如下所示:

psql -f add_users.sql -v userlist=array['userA','userB','userC'])
并添加_user.sql:

SELECT addUsersFromList(:userlist);
当我执行上述psql命令时,我得到一个错误:

psql:Scripts/add_users.sql:39: ERROR:  column "userA" does not exist

这似乎是我如何使用-v标志的问题。我查看了同一页上的on-v、\set和Variables部分,但找不到分配数组的方法。

尝试将数组作为字符串文字写入:

psql-f add_users.sql-v“userlist='{userA,userB,userC}'

您的shell可能正在删除单引号。你需要以某种方式避开它们,可能是结合了多个级别的引用。正如所说,你的shell正在删除这些引用
psql-f add_users.sql-v“userlist=array['userA'、'userB'、'userC']”
应该可以工作(您也可以将这些单引号转义,但这种方法更简单)。您还可以使用
\echo:userlist
(在
psql
shell中)查看
userlist
设置为/读取为什么。谢谢,它确实删除了单引号。用双引号围绕这一点很好,很容易做到!两者都围绕着您建议的所有内容,或者只是阵列部分。您愿意将此作为答复提交,我可以接受吗?