在psql中,set、\set和\pset有什么区别?

30
有时候在使用 psql 时,我会有点困惑何时使用 set vs. \set vs. \pset。我认为:
  • set 用于连接到数据库的会话变量。例如:SET ROLE dba
  • \set 用于此 psql 会话的本地变量。例如:\set time 'select current_timestamp'
  • \pset 用于此 psql 会话的 psql 设置。例如:'\pset border 2'

但是,我从未找到过令人满意的解释。请问我的假设是正确的吗?

我正在使用 PostgreSQL 9.4


1
set 是一个 SQL 命令,可以在任何 SQL 客户端中使用。\set\pset 只能在 psql 中使用。 - user330315
6
很不幸,\set 没有被命名为 \varset 或其他类似的名称。 - Craig Ringer
1个回答

29

基本正确。重要的区别是SET是一个SQL命令,而其他两个是psql元命令-由前导的\表示。

SET是一个SQL命令,用于更改运行时参数。它在服务器上执行,与psql本身无关。

\set是一个psql元命令:

将psql变量名称设置为值[...]

注意:此命令与SQL命令SET无关。

\ pset 是另一个psql元命令:

此命令设置影响查询结果表输出的选项


9
为了更容易记住,将 \pset 中的 P 看作是“打印”(print)。pset 值是改变 psql 向您输出信息的打印方式的值。而 \set 则可以更改其他类型的 psql 配置。 - Greg Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接