首页 > 解决方案 > 在 psql 中使用 \set 设置变量

问题描述

我正在尝试在psql包含 JSON 的控制台中设置变量。我这样做

mydb=# \set cfg '{"base":"some url","remoteIP":"ip"}';

然后我试图调用查询并传递这个变量

mydb=# select exec_search(:'cfg','Field');

但是,如果变成这个而不是执行

mydb'#

当按下enter或尝试添加报价时,我无法执行查询。我必须退出终端。

mydb'#
mydb'#
mydb'# '
mydb(#

问题是什么?

标签: postgresqlpsql

解决方案


\set您的第一个错误是命令末尾的分号。

psql命令(以反斜杠开头的命令)不以分号结束,而是以行尾结束。

因此,您最终会在变量中添加一个额外的分号,这将导致 JSON 无效。

我无法用您问题中的数据重现您的第二个问题。如果您输入带有不平衡单引号的行,您会收到此提示。

要摆脱这种情况,请按Ctrl+ C


推荐阅读