psql中set,\ set和\ pset之间的区别

Dav*_*d S 11 postgresql psql postgresql-9.4

psql在使用setvs. \setvs. 之间工作时,我有时会感到困惑\pset.我觉得:

  • set用于连接到db的会话变量.例如SET ROLE dba;
  • \set用于此psql会话的局部变量.例如\set time 'select current_timestamp'
  • \pset用于此psql会话的psql设置.例如'\pset border 2'

但是,我从来没有找到我认为对每个人都很好的解释.我的假设是否正确?

我正在使用PostgreSQL 9.4

Erw*_*ter 12

基本上是对的.重要的区别在于它SET是一个SQL命令,而另外两个是psql元命令 - 由前缀表示\.

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

  • \set是一个psql元命令,根据文档:

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

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

  • \pset是另一个psql元命令.每个文件:

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

  • 为了更容易记住,可以将 \pset 中的 P 视为“print”。pset 值会更改 psql 向您打印信息的方式。\set 更改其他类型的 psql 配置。 (4认同)