# psql

psql — PostgreSQL 交互式终端

# 概要

psql [选项...]数据库名称 [用户名]]

# 描述

psql 是一个基于终端的 PostgreSQL 前端。它使您能够以交互方式输入查询,将它们发送到 PostgreSQL,并查看查询结果。或者,输入可以来自文件或命令行参数。此外,psql 提供了许多元命令和各种类似 shell 的功能,以方便编写脚本和自动执行各种任务。

# 选项

-一种
--echo-all

在读取所有非空输入行时将它们打印到标准输出。(这不适用于交互式读取的行。)这相当于设置变量回声全部.

-一种
--不对齐

切换到非对齐输出模式。(默认输出模式是对齐.) 这相当于\pset 格式未对齐.

-b
--回声错误

将失败的 SQL 命令打印到标准错误输出。这相当于设置变量回声错误.

-c *命令*
--命令=*命令*

指定 psql 将执行给定的命令字符串,命令.此选项可以重复并以任意顺序与-f选项。当-c或者-f指定时,psql 不会从标准输入读取命令;相反,它在处理完所有-c-f依次选择。

*命令*必须是服务器完全可解析的命令字符串(即,它不包含特定于 psql 的功能),或单个反斜杠命令。因此,您不能在一个-c选项。为此,您可以使用重复-c选项或将字符串通过管道传输到 psql 中,例如:

psql -c '\x' -c 'SELECT * FROM foo;'

或者

echo '\x \\ SELECT * FROM foo;' | psql

(\\是分隔符元命令。)

每个 SQL 命令字符串传递给-c作为单个请求发送到服务器。因此,即使字符串包含多个 SQL 命令,服务器也会将其作为单个事务执行,除非有显式开始/犯罪字符串中包含的命令将其划分为多个事务。(看第 53.2.2.1 节有关服务器如何处理多查询字符串的更多详细信息。)此外,psql 仅打印字符串中最后一个 SQL 命令的结果。这与从文件中读取相同字符串或馈送到 psql 的标准输入时的行为不同,因为 psql 分别发送每个 SQL 命令。

由于这种行为,将多个 SQL 命令放在一个-c字符串经常有意想不到的结果。最好重复使用-c命令或将多个命令提供给 psql 的标准输入,使用如上所示的 echo 或通过 shell here-document,例如:

psql <<EOF
\x
SELECT * FROM foo;
EOF

--csv

切换到 CSV(逗号分隔值)输出模式。这相当于\pset 格式 csv.

-d *数据库名称*
--dbname=*数据库名称*

指定要连接的数据库的名称。这相当于指定*数据库名称作为命令行上的第一个非选项参数。这数据库名称*可以是一个连接字符串.如果是这样,连接字符串参数将覆盖任何冲突的命令行选项。

-e
--回声查询

将发送到服务器的所有 SQL 命令也复制到标准输出。这相当于设置变量回声查询.

-E
--回声隐藏

回显由生成的实际查询\d和其他反斜杠命令。你可以用它来研究psql的内部操作。这相当于设置变量ECHO_HIDDEN.

-f *文件名*
--文件=*文件名*

从文件中读取命令*文件名*,而不是标准输入。此选项可以重复并以任意顺序与-c选项。当-c要么-f指定时,psql 不会从标准输入读取命令;相反,它在处理完所有-c-f依次选择。除此之外,此选项在很大程度上等同于元命令\一世.

如果*文件名*是-(连字符),然后读取标准输入,直到出现 EOF 指示或\q元命令。这可用于将交互式输入与来自文件的输入穿插。但是请注意,在这种情况下不使用 Readline(就像-n已指定)。

使用这个选项与写作有细微的不同psql < *文件名*.一般来说,两者都会做你所期望的,但使用-f启用一些不错的功能,例如带有行号的错误消息。使用此选项也有可能减少启动开销。另一方面,使用 shell 的输入重定向的变体(理论上)保证产生与您手动输入所有内容时所收到的完全相同的输出。

-F *分隔器*
--字段分隔符=*分隔器*

采用*分隔器*作为未对齐输出的字段分隔符。这相当于\pset 字段或者\f.

-h *主机名*
--主机=*主机名*

指定运行服务器的机器的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。

-H
--html

切换到 HTML 输出模式。这相当于\pset 格式 html或者\H命令。

-l
- 列表

列出所有可用的数据库,然后退出。其他非连接选项将被忽略。这类似于元命令\列表.

使用此选项时,psql 将连接到数据库postgres, 除非在命令行上命名了不同的数据库(选项-d或非选项参数,可能通过服务条目,但不是通过环境变量)。

-L *文件名*
--日志文件=*文件名*

将所有查询输出写入文件*文件名*, 除了正常的输出目的地。

-n
--no-readline

不要使用 Readline 进行行编辑,也不要使用命令历史记录。这对于在剪切和粘贴时关闭标签扩展很有用。

-o *文件名*
--输出=*文件名*

将所有查询输出放入文件*文件名*.这相当于命令\o.

-p *港口*
--端口=*港口*

指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。默认值为PGPORT环境变量,如果未设置,则为编译时指定的端口,通常为 5432.

-P *任务*
--pset=*任务*

指定打印选项,样式为\pset.请注意,在这里您必须使用等号而不是空格来分隔名称和值。例如,要将输出格式设置为 LaTeX,您可以编写-P 格式=乳胶.

-q
- 安静的

指定 psql 应该安静地完成它的工作。默认情况下,它会打印欢迎消息和各种信息输出。如果使用此选项,则不会发生这种情况。这对-c选项。这相当于设置变量安静的.

-R *分隔器*
--记录分隔符=*分隔器*

采用*分隔器*作为未对齐输出的记录分隔符。这相当于\pset 记录.

-s
- 一小步

以单步模式运行。这意味着在将每个命令发送到服务器之前会提示用户,并且还可以选择取消执行。使用它来调试脚本。

-S
- 单线

以单行模式运行,其中换行符终止 SQL 命令,就像分号一样。

# 笔记

此模式是为坚持使用的人提供的,但不一定鼓励您使用。特别是,如果您在一行中混合使用 SQL 和元命令,那么没有经验的用户可能并不总是清楚执行顺序。

-t
--仅元组

关闭列名和结果行计数页脚等的打印。这相当于\t要么\pset tuples_only.

-T *表选项*
--table-attr=*表选项*

指定要放置在 HTML 中的选项桌子标签。看\pset 表格属性详情。

-U *用户名*
--用户名=*用户名*

以用户身份连接到数据库*用户名*而不是默认值。(当然,您必须获得许可才能这样做。)

-v *任务*
--设置=*任务*
--变量=*任务*

执行变量赋值,例如\放元命令。请注意,您必须在命令行上用等号分隔名称和值(如果有)。要取消设置变量,请去掉等号。要设置具有空值的变量,请使用等号但不要使用该值。这些分配是在命令行处理期间完成的,因此反映连接状态的变量将在以后被覆盖。

-V
- 版本

打印 psql 版本并退出。

-w
--无密码

永远不要发出密码提示。如果服务器需要密码验证,并且无法从其他来源获得密码,例如.pgpass文件,连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中很有用。

请注意,此选项将在整个会话中保持设置,因此它会影响元命令的使用\连接以及初始连接尝试。

-W
- 密码

强制 psql 在连接到数据库之前提示输入密码,即使不会使用密码。

如果服务器需要密码验证,并且无法从其他来源获得密码,例如.pgpass文件,psql 无论如何都会提示输入密码。但是,psql 会浪费一次连接尝试来发现服务器需要密码。在某些情况下,值得输入-W以避免额外的连接尝试。

请注意,此选项将在整个会话中保持设置,因此它会影响元命令的使用\连接以及初始连接尝试。

-x
--扩展

打开扩展表格格式化模式。这相当于\x或者\pset 展开.

-X,
--no-psqlrc

不要读取启动文件(系统范围内的psqlrc文件也不是用户的~/.psqlrc文件)。

-z
--field-separator-zero

将未对齐输出的字段分隔符设置为零字节。这相当于\pset fieldsep_zero.

-0
--记录-分隔符-零

将未对齐输出的记录分隔符设置为零字节。这对于接口很有用,例如,与xargs -0.这相当于\pset 记录sep_zero.

-1
--单笔交易

此选项只能与一个或多个组合使用-c和/或-f选项。它导致 psql 发出一个开始在第一个此类选项之前的命令和犯罪最后一个命令之后的命令,从而将所有命令包装到一个事务中。这可确保所有命令都成功完成,或者不应用任何更改。

如果命令本身包含开始,犯罪, 要么回滚,此选项不会产生预期的效果。此外,如果无法在事务块内执行单个命令,则指定此选项将导致整个事务失败。

-?
--救命[=*话题*]

显示有关psql和退出的帮助。可选的*话题*参数(默认为选项)选择解释psql的哪一部分:命令描述psql的反斜杠命令;选项描述可以传递给psql的命令行选项;和变量显示有关psql配置变量的帮助。

# 退出状态

如果正常完成,psql将向shell返回0;如果自身发生致命错误(例如,内存不足、找不到文件),psql将向shell返回1;如果与服务器的连接出现故障且会话不交互,psql将向shell返回2;如果脚本和变量中发生错误,psql将向shell返回3错误停止一切都安排好了。

# 用法

# 连接到数据库

psql是一个常规的PostgreSQL客户端应用程序。为了连接到数据库,您需要知道目标数据库的名称、服务器的主机名和端口号,以及要连接的用户名。可以通过命令行选项告知psql这些参数,即-d,-h,-p-U分别地如果发现一个参数不属于任何选项,它将被解释为数据库名称(或用户名,如果数据库名称已经给出)。并非所有这些选项都是必需的;有一些有用的默认设置。如果省略主机名,psql将通过Unix域套接字连接到本地主机上的服务器,或通过TCP/IP连接到本地服务器在没有Unix域套接字的计算机上。默认端口号在编译时确定。由于数据库服务器使用相同的默认值,因此在大多数情况下不必指定端口。默认用户名是操作系统用户名,默认数据库名称也是。请注意,您不能仅以任何用户名连接到任何数据库。数据库管理员应该已经通知您访问权限。

当默认值不太正确时,可以通过设置环境变量来节省一些输入PG数据库, PGHOST, PGPORT和/或PGUSER选择合适的值。(有关其他环境变量,请参见第34.15节)也很方便~/.pgpass文件,以避免定期输入密码。看见第34.16节了解更多信息。

指定连接参数的另一种方法是*康宁*字符串或URI,用于代替数据库名称。这种机制可以让你对连接进行非常广泛的控制。例如:

$ psql "service=myservice sslmode=require"
$ psql postgresql://dbmaster:5433/mydb?sslmode=require

这样,还可以使用LDAP查找连接参数,如中所述第34.18节看见第34.1.2节有关所有可用连接选项的详细信息。

如果由于任何原因(例如权限不足、服务器未在目标主机上运行等)无法建立连接,psql将返回错误并终止。

如果标准输入和标准输出都是终端,那么psql将客户机编码设置为“自动”,这将从区域设置中检测适当的客户机编码(LC_CTYPEUnix系统上的环境变量)。如果这不符合预期,则可以使用环境变量重写客户机编码PG客户编码.

# 输入SQL命令

在正常操作中,psql提供一个提示,提示中包含psql当前连接的数据库的名称,后跟字符串=>.例如:

$ psql testdb
psql (14.2)
Type "help" for help.

testdb=>

在提示下,用户可以输入SQL命令。通常,当到达以分号结尾的命令时,会将输入行发送到服务器。行尾不会终止命令。因此,为了清晰起见,命令可以分散在几行上。如果发送和执行命令时没有出现错误,则命令的结果将显示在屏幕上。

如果不受信任的用户可以访问未采用安全模式使用模式,通过从中删除可公开写入的架构开始会话搜索路径.可以补充选项=-csearch_路径=连接字符串或问题选择pg_目录。设置配置('search_path','',false)在其他SQL命令之前。这种考虑并不是psql特有的;它适用于执行任意SQL命令的每个接口。

每当执行命令时,psql还会轮询通知.

C风格的块注释被传递到服务器进行处理和删除,而SQL标准注释则被psql删除。

# 元命令

在psql中输入的任何以不带引号的反斜杠开头的命令都是psql本身处理的psql元命令。这些命令使psql在管理或脚本编写方面更加有用。元命令通常称为斜杠或反斜杠命令。

psql命令的格式是反斜杠,紧接着是命令动词,然后是任何参数。这些参数与命令动词分开,并由任意数量的空格字符分隔。

要在参数中包含空格,可以使用单引号引用。要在参数中包含单引号,请在单引号文本中写两个单引号。此外,单引号中包含的任何内容都会被类似C的\n(新线),\t(选项卡),\b(退格),\r(回车),\f(表格提要),\数字(八进制)和\x数字(十六进制)。单引号文本中任何其他字符前面的反斜杠引用该字符,无论它是什么。

如果一个不带引号的冒号(:)参数中会出现psql变量名,然后替换为变量的值,如中所述SQL插值在下面表格:'*变量名*':"*变量名*"也描述了他们的工作。这个:{?*变量名*}语法允许测试是否定义了变量。它被真或假所取代。用反斜杠跳过冒号可以防止冒号被替换。

在参数中,包含在反引号中的文本(```)作为传递给shell的命令行。命令的输出(删除任何尾随换行符)将替换后引号中的文本。在反引号中包含的文本中,没有特殊的引用或其他处理,除了:*变量名*哪里*变量名*是用变量的值替换的psql变量名。还有:'*变量名*'被适当引用的变量值替换为单个shell命令参数。(后一种形式几乎总是可取的,除非您非常确定变量中的内容。)由于回车符和换行符不能在所有平台上安全引用:'*变量名*'表单打印错误消息,并且在值中出现此类字符时不替换变量值。

有些命令以SQL标识符(例如表名)作为参数。这些参数遵循SQL的语法规则:不带引号的字母强制使用小写,而双引号(")保护字母不被大小写转换,并允许在标识符中加入空格。在双引号中,成对的双引号在结果名称中减少为一个双引号。例如FOO“BAR”BAZ被解释为fooBARbaz一个奇怪的“名字”变成一个奇怪的名字.

对参数的分析在行尾或找到另一个未加引号的反斜杠时停止。未加引号的反斜杠被视为新元命令的开头。特殊序列\\(两个反斜杠)标记参数的结束,并继续解析SQL命令(如果有)。这样,SQL和psql命令就可以在一行中自由混合使用。但在任何情况下,元命令的参数都不能超过行的末尾。

许多元命令作用于当前查询缓冲区。这只是一个缓冲区,用于保存已键入但尚未发送到服务器执行的SQL命令文本。这将包括前面的输入行,以及在同一行的meta命令之前出现的任何文本。

定义了以下元命令:

\a

如果当前表格输出格式未对齐,则切换为对齐。如果未对齐,则将其设置为未对齐。保留此命令是为了向后兼容。看见\pset寻求更普遍的解决方案。

\c\连接[-重用上一个=*开|关* ] [ *库名* [ *用户名* ] [ *主办* ] [ *港口城市* ] | *康宁* ]

建立与PostgreSQL server的新连接。要使用的连接参数可以使用位置语法(数据库名称、用户、主机和端口中的一个或多个)指定,也可以使用*康宁*连接字符串如中所述第34.1.1节。如果未给出参数,则使用与之前相同的参数建立新连接。

指定*库名*, 用户名, *主办港口城市*像-相当于省略该参数。

新连接可以重复使用以前连接中的连接参数;不仅是数据库名称、用户、主机和端口,还有其他设置,例如*sslmode.默认情况下,参数会在位置语法中重复使用,但在康宁字符串是给定的。通过第一个论点-重用上一个=打开-重用上一个=关闭覆盖默认值。如果重复使用参数,则任何未明确指定为位置参数或康宁字符串取自现有连接的参数。例外情况是,如果主办使用位置语法(任意)更改其上一个值霍斯塔德酒店*现有连接的参数中存在的设置将被删除。此外,只有在用户、主机和端口设置未更改的情况下,用于现有连接的任何密码都将被重新使用。当命令既不指定也不重用特定参数时,将使用libpq默认值。

如果成功建立新连接,则关闭上一个连接。如果连接尝试失败(用户名错误、访问被拒绝等),如果psql处于交互模式,则将保留以前的连接。但在执行非交互式脚本时,旧连接会关闭,并报告错误。可能终止脚本,也可能不终止脚本;否则,所有访问数据库的命令都将失败,直到下一个命令出现\连接命令已成功执行。选择这种区别一方面是为了方便用户避免输入错误,另一方面是为了确保脚本不会意外地作用于错误的数据库。请注意\连接命令尝试重新使用参数,重新使用的值是上次成功连接的值,而不是随后进行的任何失败尝试的值。但是,在非交互式的情况下\连接如果失败,则以后不允许重新使用任何参数,因为脚本可能会期望来自失败脚本的值\连接可重复使用。

例如:

=> \c mydb myuser host.dom 6432
=> \c service=foo
=> \c "host=localhost port=5432 dbname=mydb connect_timeout=10 sslmode=disable"
=> \c -reuse-previous=on sslmode=require    -- changes only sslmode
=> \c postgresql://tom@localhost/mydb?application_name=myapp

\C[*标题* ]

设置作为查询结果打印的任何表的标题,或取消设置任何此类标题。此命令相当于\pset标题*标题*(此命令的名称来源于“caption”,因为它以前只用于在HTML表中设置标题。)

\cd[*目录* ]

将当前工作目录更改为*目录*。在没有参数的情况下,更改当前用户的主目录。

# 提示

要打印当前工作目录,请使用\! pwd.

\康宁

输出有关当前数据库连接的信息。

\复制{*桌子* [ ( *列列表* ) ] }从…起{ *“文件名”*|项目*“命令”*|stdin |pstdin}[with](*选项* [, ...] ) ] [哪里*条件* ]
\复制{*桌子* [ ( *列列表* ) ] | ( *查询* ) }{ *“文件名”*|项目*“命令”*|stdout |pstdoot}[with](*选项* [, ...] ) ]

执行前端(客户端)复制。这是一个运行SQL语句的操作复制命令,但不是服务器读取或写入指定的文件,而是psql读取或写入该文件,并在服务器和本地文件系统之间路由数据。这意味着文件可访问性和权限是本地用户的权限,而不是服务器的权限,并且不需要SQL超级用户权限。

什么时候程序是指定的,*命令由psql执行,数据从或传递到命令*在服务器和客户端之间路由。同样,执行权限是本地用户的权限,而不是服务器的权限,不需要SQL超级用户权限。

对于\收到。。。来自stdin,从发出命令的同一源读取数据行,直到\.读取或流达到EOF。此选项对于在SQL脚本文件中在线填充表非常有用。对于\收到。。。施托特,将输出发送到与psql命令输出相同的位置抄袭*计数*未打印命令状态(因为它可能与数据行混淆)。读取/写入psql的标准输入或输出,而不考虑当前命令源或\o选项,写来自pstdin扑通.

此命令的语法与SQL类似复制命令除数据源/目的地之外的所有选项均为复制.因此,特殊的解析规则适用于\抄袭元命令。与大多数其他元命令不同,行的整个剩余部分始终被视为\抄袭,并且在参数中既不执行变量插值,也不执行反引号展开。

# 提示

获得相同结果的另一种方法\收到。。。到就是使用SQL复制施托特命令并用\g*文件名*\g|*程序*不像\抄袭,此方法允许命令跨越多行;此外,还可以使用变量插值和反报价扩展。

# 提示

这些操作的效率不如SQL复制命令,因为所有数据都必须通过客户机/服务器连接。对于大量数据,最好使用SQL命令。

\版权所有

显示PostgreSQL的版权和发行条款。

\crosstabview[*科尔夫* [ *科尔赫* [ *寒冷的* [ *索特科赫* ] ] ] ]

执行当前查询缓冲区(如\g)并在交叉表网格中显示结果。查询必须至少返回三列。由标识的输出列*科尔夫成为一个垂直标题,输出列由科尔赫成为水平标题。寒冷的标识要在网格中显示的输出列。索特科赫*标识水平标题的可选排序列。

每个列规范可以是一个列号(从1开始)或一个列名。通常的SQL大小写折叠和引用规则适用于列名。如果省略,科尔夫作为第1列,并科尔赫如第2栏所示。科尔赫一定不同于科尔夫如果寒冷的如果未指定,则查询结果中必须正好有三列,并且两列都不是科尔夫也没有科尔赫被认为是寒冷的.

垂直标题显示为最左边的列,包含列中的值*科尔夫*,顺序与查询结果中的顺序相同,但已删除重复项。

水平标题显示为第一行,包含列中的值*科尔赫,删除重复项。默认情况下,它们的显示顺序与查询结果中的顺序相同。但如果选择索特科赫参数,它标识值必须为整数的列,以及科尔赫将出现在水平标题中,根据相应的索特科赫*价值观

在交叉表网格中,针对每个不同的值十、属于*科尔赫以及每个不同的值y属于科尔夫,位于十字路口的单元(x,y)包含寒冷的查询结果行中的列,其科尔赫十、以及科尔夫*是y.如果没有这样的行,则单元格为空。如果有多个这样的行,则会报告一个错误。

\d[S+][*图案*](app-psql.html#app-psql-PATTERNS)]

对于每个关系(表、视图、物化视图、索引、序列或外部表)或与*图案*,显示所有列、它们的类型、表空间(如果不是默认值)和任何特殊属性,例如非空或者违约。还显示了相关的索引、约束、规则和触发器。对于外部表,也会显示关联的外部服务器。(“匹配模式”的定义见模式下面。)

对于某些类型的关系,\d显示每列的附加信息:序列的列值、索引的索引表达式和外部表的外部数据包装选项。

命令表单\d+相同,只是显示了更多信息:与表的列相关联的任何注释都会显示,表中是否存在OID,视图定义(如果关系是视图),非默认值副本身份设置和访问方法如果关系具有访问方法,则命名。

默认情况下,只显示用户创建的对象;提供一个模式或S修改器以包含系统对象。

# 笔记

如果\d使用时没有*图案*论点,相当于\dtvmsE它将显示所有可见表、视图、物化视图、序列和外部表的列表。这纯粹是一种方便措施。

\da[S][[*图案*](app-psql.html#app-psql-PATTERNS)]

列出聚合函数及其返回类型和操作的数据类型。如果*图案*指定时,仅显示名称与模式匹配的聚合。默认情况下,只显示用户创建的对象;提供一个模式或S修改器以包含系统对象。

\dA[+][*图案*](app-psql.html#app-psql-PATTERNS)]

列出访问方法。如果*图案*则仅显示名称与模式匹配的访问方法。如果+在命令名之后,将列出每个访问方法及其关联的处理程序函数和描述。

\dAc[+][[*访问方法模式*](app-psql.html#app-psql-PATTERNS)[[*输入类型模式*](app-psql.html#app-psql-PATTERNS)]

列出运算符类(请参见第38.16.1节).如果*访问方法模式指定时,只列出与名称与该模式匹配的访问方法关联的运算符类。如果输入类型模式*指定时,只列出与名称与该模式匹配的输入类型关联的运算符类。如果+在命令名之后,每个操作符类都会与其关联的操作符族和所有者一起列出。

\dAf[+][[*访问方法模式*](app-psql.html#app-psql-PATTERNS)[[*输入类型模式*](app-psql.html#app-psql-PATTERNS)]

列出运算符族(请参见第38.16.5节).如果*访问方法模式指定时,仅列出与名称与该模式匹配的访问方法关联的运算符族。如果输入类型模式*指定时,仅列出与名称与该模式匹配的输入类型关联的运算符族。如果+在命令名之后,将列出每个操作符族及其所有者。

\道[+][[*访问方法模式*](app-psql.html#app-psql-PATTERNS)[[*操作员族模式*](app-psql.html#app-psql-PATTERNS)]

列出与运算符族关联的运算符(请参见第38.16.2节).如果*访问方法模式指定时,仅列出与名称与该模式匹配的访问方法关联的运算符族的成员。如果操作员族模式*指定时,仅列出名称与该模式匹配的运算符族成员。如果+附加到命令名后,每个运算符都会与其排序运算符系列(如果是排序运算符)一起列出。

\dAp[+][[*访问方法模式*](app-psql.html#APP-PSQL-PATTERNS) [[*运算符族模式*](app-psql.html#APP-PSQL-PATTERNS)]]

列出与运算符系列相关的支持功能(请参阅第 38.16.3 节)。如果*访问方法模式指定时,仅列出与名称匹配该模式的访问方法关联的运算符系列的函数。如果运算符族模式*指定时,仅列出名称与该模式匹配的运算符系列的函数。如果+附加到命令名称后,函数会详细显示,并带有它们的实际参数列表。

\db[+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出表空间。如果*图案*指定时,仅显示名称与模式匹配的表空间。如果+附加到命令名称后,列出每个表空间及其相关选项、磁盘大小、权限和描述。

\dc[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出字符集编码之间的转换。如果*图案*指定时,仅列出名称与模式匹配的转换。默认情况下,仅显示用户创建的对象;提供一个模式或小号修饰符以包含系统对象。如果+附加到命令名称后,列出每个对象及其相关描述。

\dC[+] [[*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出类型转换。如果*图案*指定时,仅列出源或目标类型与模式匹配的强制转换。如果+附加到命令名称后,列出每个对象及其相关描述。

\dd[S] [[*图案*](app-psql.html#APP-PSQL-PATTERNS)]

显示类型对象的描述约束,运算符类,运营商家族,规则, 和扳机.所有其他注释可以通过这些对象类型的相应反斜杠命令查看。

\dd显示匹配对象的描述*图案*,或适当类型的可见对象,如果没有给出参数。但在任何一种情况下,都只会列出具有描述的对象。默认情况下,仅显示用户创建的对象;提供一个模式或小号修饰符以包含系统对象。

对象的描述可以用评论SQL 命令。

\dD[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出域。如果*图案*指定时,仅显示名称与模式匹配的域。默认情况下,仅显示用户创建的对象;提供一个模式或小号修饰符以包含系统对象。如果+附加到命令名称后,列出每个对象及其关联的权限和描述。

\ddp [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出默认访问权限设置。对于默认权限设置已从内置默认值更改的每个角色(和架构,如果适用)显示一个条目。如果*图案*指定时,仅列出角色名称或模式名称与模式匹配的条目。

更改默认权限命令用于设置默认访问权限。特权显示的含义在第 5.7 节.

\dE[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]
\di[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]
\dm[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]
\ds[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]
\dt[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]
\dv[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

在这组命令中,字母,一世,,s,, 和v分别代表foreign table、index、materialized view、sequence、table和view。您可以按任何顺序指定任何或所有这些字母,以获得这些类型的对象的列表。例如,\dti列出表和索引。如果+附加到命令名称后,列出每个对象及其持久性状态(永久、临时或未记录)、磁盘上的物理大小以及相关描述(如果有)。如果*图案*指定时,仅列出名称与模式匹配的对象。默认情况下,仅显示用户创建的对象;提供一个模式或小号修饰符以包含系统对象。

\des[+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出外部服务器(助记符:“外部服务器”)。如果*图案*指定时,仅列出名称与模式匹配的那些服务器。如果表格\des+使用时,会显示每个服务器的完整描述,包括服务器的访问权限、类型、版本、选项和描述。

\det[+] [[*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出外部表(助记符:“外部表”)。如果*图案*指定时,仅列出其表名或模式名与模式匹配的条目。如果表格\det+使用时,还会显示通用选项和外部表描述。

\deu[+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出用户映射(助记符:“外部用户”)。如果*图案*指定时,仅列出用户名与模式匹配的那些映射。如果表格\deu+使用时,会显示有关每个映射的附加信息。

# 警告

\deu+可能还会显示远程用户的用户名和密码,因此应注意不要泄露它们。

\露[+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出外部数据包装器(助记符:“外部包装器”)。如果*图案*指定时,仅列出名称与模式匹配的那些外部数据包装器。如果表格\露水+使用时,还会显示外部数据包装器的访问权限、选项和描述。

\df[anptwS+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS) [ *arg_pattern* ... ] ]

列出函数及其结果数据类型、参数数据类型和函数类型,这些类型分为“agg”(聚合)、“normal”、“procedure”、“trigger”或“window”。要仅显示特定类型的函数,请添加相应的字母一种,n,p,, 或者w到命令。如果*图案指定时,仅显示名称与模式匹配的函数。任何其他参数都是类型名称模式,它们与函数的第一个、第二个等参数的类型名称匹配。(匹配函数可以有比你指定的更多的参数。为了防止这种情况,写一个破折号-作为最后arg_pattern.) 默认情况下,仅显示用户创建的对象;*提供一个模式或小号修饰符以包含系统对象。如果表格\df+使用时,会显示有关每个函数的附加信息,包括易变性、并行安全性、所有者、安全分类、访问权限、语言、源代码和描述。

\dF[+] [[*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出文本搜索配置。如果*图案*指定时,仅显示名称与模式匹配的配置。如果表格\dF+使用时,会显示每个配置的完整描述,包括底层文本搜索解析器和每个解析器标记类型的字典列表。

\dFd[+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出文本搜索词典。如果*图案*指定时,仅显示名称与模式匹配的字典。如果表格\dFd+使用时,会显示有关每个选定字典的附加信息,包括基础文本搜索模板和选项值。

\dFp[+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出文本搜索解析器。如果*图案*指定时,仅显示名称与模式匹配的解析器。如果表格\dFp+使用时,会显示每个解析器的完整描述,包括底层函数和可识别的标记类型列表。

\dFt[+] [[*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出文本搜索模板。如果*图案*指定时,仅显示名称与模式匹配的模板。如果表格\dFt+使用时,会显示有关每个模板的附加信息,包括底层函数名称。

\dg[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出数据库角色。(由于“用户”和“组”的概念已经统一为“角色”,这个命令现在相当于\du.) 默认情况下,仅显示用户创建的角色;供应小号修饰符以包含系统角色。如果*图案*指定时,仅列出名称与模式匹配的角色。如果表格\dg+使用时,会显示有关每个角色的附加信息;目前这会为每个角色添加评论。

\dl

这是一个别名\lo_list,它显示大对象的列表。

\dL[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出程序语言。如果*图案*指定时,仅列出名称与模式匹配的语言。默认情况下,仅显示用户创建的语言;供应小号修饰符以包含系统对象。如果+附加到命令名称后,列出每种语言及其调用处理程序、验证程序、访问权限以及它是否是系统对象。

\dn[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出模式(命名空间)。如果*图案*指定时,仅列出名称与模式匹配的模式。默认情况下,仅显示用户创建的对象;提供一个模式或小号修饰符以包含系统对象。如果+附加到命令名称后,列出每个对象及其关联的权限和描述(如果有)。

\做[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS) [ *arg_pattern* [ *arg_pattern* ] ] ]

列出运算符及其操作数和结果类型。如果*图案指定时,仅列出名称与模式匹配的运算符。如果一个arg_pattern指定时,仅列出其右参数的类型名称与该模式匹配的前缀运算符。如果两个arg_pattern*s 被指定时,只列出参数类型名称与这些模式匹配的二元运算符。(或者,写-对于一元运算符的未使用参数。)默认情况下,仅显示用户创建的对象;提供一个模式或小号修饰符以包含系统对象。如果+附加到命令名称后,会显示有关每个运算符的附加信息,当前只是底层函数的名称。

\dO[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出排序规则。如果*图案*指定时,仅列出名称与模式匹配的排序规则。默认情况下,仅显示用户创建的对象;提供一个模式或小号修饰符以包含系统对象。如果+附加到命令名称后,将列出每个排序规则及其相关描述(如果有)。请注意,仅显示可用于当前数据库编码的排序规则,因此在同一安装的不同数据库中结果可能会有所不同。

\dp [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出表、视图和序列及其关联的访问权限。如果*图案*指定时,仅列出名称与模式匹配的表、视图和序列。

授予撤销命令用于设置访问权限。特权显示的含义在第 5.7 节.

\dP[itn+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出分区关系。如果*图案*指定时,仅列出名称与模式匹配的条目。修饰符(表格)和一世(indexes) 可以附加到命令中,过滤要列出的关系类型。默认情况下,会列出分区表和索引。

如果修饰符n使用(“嵌套”)或指定模式,然后包括非根分区关系,并显示一列显示每个分区关系的父级。

如果+附加到命令名称后,还会显示每个关系的分区大小的总和以及关系的描述。如果n+,显示了两种大小:一种包括直接连接的叶分区的总大小,另一种显示所有分区的总大小,包括间接连接的子分区。

\drds [ [*角色模式*](app-psql.html#APP-PSQL-PATTERNS) [ [*数据库模式*](app-psql.html#APP-PSQL-PATTERNS) ] ]

列出定义的配置设置。这些设置可以是特定于角色的、特定于数据库的,或两者兼而有之。*角色模式数据库模式*用于分别选择要列出的特定角色和数据库。如果省略,或者如果*指定时,将列出所有设置,分别包括那些不特定于角色或特定于数据库的设置。

改变角色更改数据库命令用于定义每个角色和每个数据库的配置设置。

\dRp[+] [[*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出复制发布。如果*图案*指定时,仅列出名称与该模式匹配的那些出版物。如果+附加到命令名称后,还会显示与每个发布关联的表。

\dRs[+] [[*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出复制订阅。如果*图案*指定时,仅列出名称与模式匹配的那些订阅。如果+附加到命令名称后,将显示订阅的其他属性。

\dT[S+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出数据类型。如果*图案*指定时,仅列出名称与模式匹配的类型。如果+附加到命令名称后,列出每种类型及其内部名称和大小,如果是枚举类型及其相关权限。默认情况下,仅显示用户创建的对象;提供一个模式或小号修饰符以包含系统对象。

\du[S+] [[*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出数据库角色。(由于“用户”和“组”的概念已经统一为“角色”,这个命令现在相当于\dg.) 默认情况下,仅显示用户创建的角色;供应小号修饰符以包含系统角色。如果*图案*指定时,仅列出名称与模式匹配的角色。如果表格\杜+使用时,会显示有关每个角色的附加信息;目前这会为每个角色添加评论。

\dx[+] [[*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出已安装的扩展。如果*图案*指定时,仅列出名称与模式匹配的那些扩展。如果表格\dx+使用时,会列出属于每个匹配扩展的所有对象。

\dX [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出扩展统计信息。如果*图案*指定时,仅列出名称与模式匹配的扩展统计信息。

每种扩展统计信息的状态显示在以其统计信息类型命名的列中(例如 Ndistinct)。定义表示在创建统计信息时已请求,NULL 表示未请求。您可以使用pg_stats_ext如果你想知道是否分析已运行,规划师可以使用统计信息。

\dy[+][*图案*](app-psql.html#app-psql-PATTERNS)]

列出事件触发器。如果*图案*指定时,仅列出名称与模式匹配的事件触发器。如果+添加到命令名后,每个对象都会与其关联的描述一起列出。

\e\编辑 [ *文件名* ] [ *线号* ]

如果*文件名指定时,将编辑该文件;编辑器退出后,文件的内容将复制到当前查询缓冲区中。如果没有文件名*给定时,当前查询缓冲区将复制到一个临时文件,然后以相同的方式编辑该文件。或者,如果当前查询缓冲区为空,则将最近执行的查询复制到临时文件,并以相同的方式进行编辑。

如果编辑文件或上一个查询,并且在不修改文件的情况下退出编辑器,查询缓冲区将被清除。否则,将根据psql的常规规则重新解析查询缓冲区的新内容,将整个缓冲区视为一行。任何完整的查询都会立即执行;也就是说,如果查询缓冲区包含分号或以分号结尾,则执行并从查询缓冲区中删除该点之前的所有内容。查询缓冲区中剩余的内容将重新显示。输入分号或\g发送,或\r通过清除查询缓冲区来取消它。

将缓冲区视为一行主要影响元命令:元命令之后缓冲区中的任何内容都将被视为元命令的参数,即使它跨越多行。(因此,您不能以这种方式使用脚本生成元命令。请使用\我为此。)

如果指定了行号,psql会将光标定位在文件或查询缓冲区的指定行上。请注意,如果给定一个全数字参数,psql将假定它是行号,而不是文件名。

# 提示

看见环境,了解如何配置和自定义编辑器。

\回音*文本* [ ... ]

将经过计算的参数打印到标准输出,以空格分隔,后跟换行符。这对于在脚本输出中散布信息很有用。例如:

=> \echo `date`
Tue Oct 26 21:40:57 CEST 1999

如果第一个参数是无引号的-n尾随的换行符未写入(第一个参数也未写入)。

# 提示

如果你使用\o命令重定向您可能希望使用的查询输出\基乔而不是这个命令。另见\警告.

\ef[*功能描述* [ *线号* ] ]

此命令以创建或替换函数创建或替换过程命令编辑的方式与编辑相同\编辑.如果不保存就退出编辑器,则该语句将被丢弃。如果保存并退出编辑器,如果在其中添加分号,则会立即执行更新的命令。否则它会被重新显示;输入分号或\g发送,或\r取消。

例如,目标函数可以单独按名称指定,也可以按名称和参数指定foo(整数,文本)。如果有多个同名函数,则必须给出参数类型。

如果未指定函数,则为空创建函数模板将显示以供编辑。

如果指定了行号,psql会将光标定位在函数体的指定行上。(请注意,函数体通常不从文件的第一行开始。)

与大多数其他元命令不同,该行的整个剩余部分始终被视为\ef,并且在参数中既不执行变量插值,也不执行反引号展开。

# 提示

看见环境,了解如何配置和自定义编辑器。

\编码[*编码* ]

设置客户端字符集编码。如果没有参数,此命令将显示当前编码。

\错误冗长

以最大的冗余度重复最近的服务器错误消息,就像冗长准备好了吗冗长的显示上下文准备好了吗总是.

\ev[*查看你的名字* [ *线号* ] ]

此命令获取并编辑命名视图的定义,格式为创建或替换视图命令编辑的方式与编辑相同\编辑.如果不保存就退出编辑器,则该语句将被丢弃。如果保存并退出编辑器,如果在其中添加分号,则会立即执行更新的命令。否则它会被重新显示;输入分号或\g发送,或\r取消。

如果未指定视图,则为空创建视图模板将显示以供编辑。

如果指定了行号,psql会将光标定位在视图定义的指定行上。

与大多数其他元命令不同,该行的整个剩余部分始终被视为\电动汽车,并且在参数中既不执行变量插值,也不执行反引号展开。

\f[*一串* ]

为未对齐的查询输出设置字段分隔符。默认设置为竖条(|).相当于\pset-fieldsep.

\g[(*选项*=*价值* [...]) ] [ *文件名* ]
\g[(*选项*=*价值* [...]) ] [ |*命令* ]

将当前查询缓冲区发送到服务器以执行。

如果括号出现在后面\g,它们围绕着一个空格分隔的列表*选项=价值*格式化选项子句,其解释方式与\pset 选项 *价值命令,但仅在此查询期间生效。在此列表中,周围不允许有空格=符号,但在选项条款之间是必需的。如果=价值省略,则命名为选项*以与的相同方式更改\pset 选项没有明确的价值.

如果*文件名|命令*参数,则查询的输出将写入命名文件或通过管道传输到给定的shell命令,而不是像往常一样显示它。只有当查询成功返回零个或多个元组时,才会写入文件或命令,而不是当查询失败或是非数据返回SQL命令时。

如果当前查询缓冲区为空,则重新执行最近发送的查询。除了那种行为,\g没有任何参数基本上等同于分号。在争论中,\g提供了一个“一次性”的替代方案\o命令,并允许对通常由设置的输出格式选项进行一次性调整\pset.

当最后一个论点以|,则该行的整个剩余部分将被视为*命令*执行,并且在其中既不执行变量插值也不执行反引号扩展。该行的其余部分只是按字面意思传递给shell。

\gdesc

显示当前查询缓冲区结果的描述(即列名和数据类型)。查询并未实际执行;但是,如果它包含某种类型的语法错误,则会以正常方式报告该错误。

如果当前查询缓冲区为空,则描述最近发送的查询。

\gexec

将当前查询缓冲区发送到服务器,然后将查询输出(如果有)的每一行的每一列视为要执行的 SQL 语句。例如,在每列上创建索引我的表

=> SELECT format('create index on my_table(%I)', attname)
-> FROM pg_attribute
-> WHERE attrelid = 'my_table'::regclass AND attnum > 0
-> ORDER BY attnum
-> \gexec
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX

生成的查询按返回行的顺序执行,如果有多个列,则在每行内从左到右执行。NULL 字段被忽略。生成的查询按字面意思发送到服务器进行处理,因此它们不能是 psql 元命令,也不包含 psql 变量引用。如果任何单个查询失败,其余查询将继续执行,除非ON_ERROR_STOP已设置。每个查询的执行取决于回声加工。(环境回声全部或者查询使用时通常是可取的\gexec.) 查询日志记录、单步模式、计时和其他查询执行功能也适用于每个生成的查询。

如果当前查询缓冲区为空,则重新执行最近发送的查询。

\gset [ *字首* ]

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

=> SELECT 'hello' AS var1, 10 AS var2
-> \gset
=> \echo :var1 :var2
hello 10

如果您指定一个*字首*,该字符串被附加到查询的列名以创建要使用的变量名:

=> SELECT 'hello' AS var1, 10 AS var2
-> \gset result_
=> \echo :result_var1 :result_var2
hello 10

如果列结果为 NULL,则未设置而不是设置相应的变量。

如果查询失败或未返回一行,则不会更改任何变量。

如果当前查询缓冲区为空,则重新执行最近发送的查询。

\gx [ (*选项*=*价值* [...]) ] [ *文件名* ]
\gx [ (*选项*=*价值* [...]) ] [ |*命令* ]

\gx相当于\g,除了它强制此查询的扩展输出模式,就好像展开=开启被列入名单\pset选项。也可以看看\x.

\h要么\帮助 [ *命令* ]

提供有关指定 SQL 命令的语法帮助。如果*命令如果未指定,则 psql 将列出所有可用语法帮助的命令。如果命令*是一个星号 (*),然后显示所有 SQL 命令的语法帮助。

与大多数其他元命令不同,该行的整个其余部分始终被视为\帮助, 并且在参数中既不执行变量插值也不执行反引号扩展。

# 笔记

为了简化输入,由多个单词组成的命令不必被引用。因此可以输入**\帮助改变表**.

\H要么\html

打开 HTML 查询输出格式。如果 HTML 格式已打开,则会切换回默认的对齐文本格式。此命令是为了兼容性和方便,但请参阅\pset关于设置其他输出选项。

\一世要么\包括 文件名

从文件中读取输入*文件名*并像在键盘上键入一样执行它。

如果*文件名*是-(连字符),然后读取标准输入,直到出现 EOF 指示或\q元命令。这可用于将交互式输入与来自文件的输入穿插。请注意,只有在最外层处于活动状态时才会使用 Readline 行为。

# 笔记

如果你想在屏幕上看到它们被读取的行,你必须设置变量回声全部.

\如果 表达
\elif 表达
\别的
\万一

这组命令实现了可嵌套的条件块。条件块必须以\如果并以\万一.中间可能有任意数量的\elif子句,可以选择后跟一个\别的条款。普通查询和其他类型的反斜杠命令可能(并且通常确实)出现在形成条件块的命令之间。

\如果\elif命令读取它们的参数并将它们评估为布尔表达式。如果表达式产生真的然后处理正常继续;否则,将跳过行,直到匹配\elif,\别的, 或者\万一到达了。一旦一个\如果或者\elif测试成功,后面的论点\elif同一块中的命令不被评估,但被视为错误。跟随的行\别的只有在没有更早的匹配时才处理\如果或者\elif成功了。

这*表达*一个论点\如果或者\elif命令受变量插值和反引号扩展的影响,就像任何其他反斜杠命令参数一样。之后,它被评估为开/关选项变量的值。因此,有效值是以下之一的任何明确的不区分大小写的匹配:真的,错误的,1,0,,离开,是的,.例如,,, 和tR都将被视为真的.

未正确评估为真或假的表达式将生成警告并被视为假。

被跳过的行被正常解析以识别查询和反斜杠命令,但查询不会发送到服务器,反斜杠命令不是条件(\如果,\elif,\别的,\万一) 被忽略。仅检查条件命令的有效嵌套。跳过的行中的变量引用不展开,也不执行反引号展开。

给定条件块的所有反斜杠命令必须出现在同一个源文件中。如果在主输入文件上达到 EOF 或\包括-ed 文件在所有本地文件之前\如果-blocks 已经关闭,那么 psql 将引发错误。

这是一个例子:

-- check for the existence of two separate records in the database and store
-- the results in separate psql variables
SELECT
    EXISTS(SELECT 1 FROM customer WHERE customer_id = 123) as is_customer,
    EXISTS(SELECT 1 FROM employee WHERE employee_id = 456) as is_employee
\gset
\if :is_customer
    SELECT * FROM customer WHERE customer_id = 123;
\elif :is_employee
    \echo 'is not a customer but is an employee'
    SELECT * FROM employee WHERE employee_id = 456;
\else
    \if yes
        \echo 'not a customer or employee'
    \else
        \echo 'this will never print'
    \endif
\endif

\ir要么\include_relative 文件名

\ir命令类似于\一世,但以不同方式解析相对文件名。在交互模式下执行时,这两个命令的行为相同。但是,当从脚本调用时,\ir解释相对于脚本所在目录的文件名,而不是当前工作目录。

\l[+]要么\列表[+] [ [*图案*](app-psql.html#APP-PSQL-PATTERNS)]

列出服务器中的数据库并显示它们的名称、所有者、字符集编码和访问权限。如果*图案*指定时,仅列出名称与模式匹配的数据库。如果+附加到命令名称后,还会显示数据库大小、默认表空间和描述。(大小信息仅适用于当前用户可以连接的数据库。)

\lo_export *样体* *文件名*

读取带有 OID 的大对象*样体从数据库中写入文件名*.请注意,这与服务器功能略有不同lo_export,它以数据库服务器运行的用户的权限以及在服务器的文件系统上的权限起作用。

# 提示

采用\lo_list找出大对象的 OID。

\lo_import *文件名* [ *评论* ]

将文件存储到 PostgreSQL 大对象中。可选地,它将给定的评论与对象相关联。例子:

foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801

响应表明大对象接收到的对象ID为152801,以后可以用来访问新创建的大对象。为了可读性,建议始终将人类可读的注释与每个对象相关联。OID 和评论都可以通过\lo_list命令。

请注意,此命令与服务器端略有不同lo_import因为它充当本地文件系统上的本地用户,而不是服务器的用户和文件系统。

\lo_list

显示当前存储在数据库中的所有 PostgreSQL 大对象的列表,以及为它们提供的任何注释。

\lo_unlink *样体*

删除带有 OID 的大对象*样体*从数据库。

# 提示

采用\lo_list找出大对象的 OID。

\o或者\出去 [ *文件名* ]
\o或者\输出 [ |*命令* ]

安排将未来的查询结果保存到文件中*文件名或将未来的结果传递给 shell 命令命令*.如果未指定参数,则查询输出将重置为标准输出。

如果参数以|,则该行的整个其余部分被视为*命令*执行,并且在其中既不执行变量插值也不执行反引号扩展。该行的其余部分只是按字面意思传递给shell。

“查询结果”包括从数据库服务器获取的所有表、命令响应和通知,以及查询数据库的各种反斜杠命令的输出(如\d);但不是错误消息。

# 提示

要在查询结果之间散布文本输出,请使用\qecho.

\p要么\打印

将当前查询缓冲区打印到标准输出。如果当前查询缓冲区为空,则打印最近执行的查询。

\密码 [ *用户名* ]

更改指定用户的密码(默认为当前用户)。此命令提示输入新密码,对其进行加密,并将其作为密码发送到服务器改变角色命令。这确保新密码不会以明文形式出现在命令历史记录、服务器日志或其他地方。

\迅速的 [ *文本* ] *姓名*

提示用户提供分配给变量的文本*姓名.一个可选的提示字符串,文本*, 可以指定。(对于多词提示,用单引号将文本括起来。)

默认,\迅速的使用终端进行输入和输出。但是,如果-f使用了命令行开关,\迅速的使用标准输入和标准输出。

\pset [ *选项* [ *价值* ] ]

此命令设置影响查询结果表输出的选项。*选项指示要设置哪个选项。的语义价值因所选选项而异。对于某些选项,省略价值导致选项被切换或取消设置,如特定选项下所述。如果未提及此类行为,则省略价值*只会显示当前设置。

\pset不带任何参数显示所有打印选项的当前状态。

可调整的打印选项包括:

边界

这*价值*必须是一个数字。一般来说,数字越大,表格的边框和线条就越多,但细节取决于特定的格式。在 HTML 格式中,这将直接转换为边框=...属性。在大多数其他格式中,只有值 0(无边框)、1(内部分隔线)和 2(表格框架)才有意义,大于 2 的值将被视为边框 = 2.这乳胶乳胶长桌格式还允许值 3 在数据行之间添加分隔线。

设置目标宽度包裹格式,以及确定输出是否足够宽以需要寻呼机或在扩展自动模式下切换到垂直显示的宽度限制。零(默认)导致目标宽度由环境变量控制,或检测到的屏幕宽度,如果未设置。此外,如果为零,则包裹格式只影响屏幕输出。如果为非零,则文件和管道输出也被包装到该宽度。

csv_fieldsep

指定要在 CSV 输出格式中使用的字段分隔符。如果分隔符出现在字段的值中,则该字段将按照标准 CSV 规则在双引号内输出。默认值为逗号。

展开(要么x)

如果*价值指定它必须是要么离开,这将启用或禁用扩展模式,或者汽车.如果价值*省略该命令在打开和关闭设置之间切换。开启展开模式后,查询结果分两列显示,左边是列名,右边是数据。如果数据在正常“水平”模式下无法显示在屏幕上,则此模式很有用。在自动设置中,当查询输出超过一列且比屏幕宽时使用扩展模式;否则,使用常规模式。自动设置仅在对齐和包装格式中有效。在其他格式中,它总是表现得好像扩展模式已关闭。

字段

指定在未对齐输出格式中使用的字段分隔符。例如,这样可以创建其他程序可能更喜欢的制表符分隔的输出。要将选项卡设置为字段分隔符,请键入\pset 字段sep '\t'.默认字段分隔符是'|'(竖线)。

字段ep_zero

将在未对齐输出格式中使用的字段分隔符设置为零字节。

页脚

如果*价值指定它必须是或者离开这将启用或禁用表格页脚的显示((*n* 行)数数)。如果价值*省略该命令打开或关闭页脚显示。

格式

将输出格式设置为以下之一对齐,asciidoc,csv,html,乳胶,乳胶长桌,troff-ms,未对齐, 要么包裹.允许使用唯一的缩写。

对齐format 是标准的、人类可读的、格式良好的文本输出;这是默认设置。

未对齐format 将一行的所有列写入一行,由当前活动的字段分隔符分隔。这对于创建可能打算由其他程序读取的输出很有用,例如,制表符分隔或逗号分隔的格式。但是,如果字段分隔符出现在列的值中,则不会对其进行特殊处理;因此 CSV 格式可能更适合此类用途。

csv格式写入用逗号分隔的列值,应用中描述的引用规则RFC 4180 (opens new window).此输出与服务器的 CSV 格式兼容复制命令。生成带有列名的标题行,除非tuples_only参数是.不打印标题和页脚。每行都由系统相关的行尾字符终止,通常是单个换行符 (\n) 用于类 Unix 系统或回车和换行序列 (\r\n) 适用于 Microsoft Windows。可以选择逗号以外的字段分隔符\pset csv_fieldsep.

包裹格式就像对齐但跨行包装宽数据值以使输出适合目标列宽。目标宽度的确定如下所述选项。请注意,psql 不会尝试换行列标题;所以,包裹格式的行为与对齐如果列标题所需的总宽度超过目标。

asciidoc,html,乳胶,乳胶长桌, 和troff-ms格式输出旨在使用相应标记语言包含在文档中的表格。它们不是完整的文件!这在 HTML 中可能不是必需的,但在 LaTeX 中,您必须有一个完整的文档包装器。这乳胶格式使用 LaTeX 的表格环境。这乳胶长桌格式需要 LaTeX长桌书单包。

线型

将边框线绘制样式设置为以下之一ascii,旧ASCII, 或者统一码.允许使用唯一的缩写。(这意味着一个字母就足够了。)默认设置是ascii.此选项仅影响对齐包裹输出格式。

asciistyle 使用纯 ASCII 字符。数据中的换行符使用+右边空白处的符号。当。。。的时候包裹格式将数据从一行换行到下一行,没有换行符,点 (.) 显示在第一行的右侧边距中,并再次显示在下一行的左侧边距中。

旧ASCIIstyle 使用纯 ASCII 字符,使用 PostgreSQL 8.4 和更早版本中使用的格式样式。数据中的换行符使用符号代替左侧的列分隔符。当数据在没有换行符的情况下从一行换行到下一行时,a;符号用于代替左侧的列分隔符。

统一码style 使用 Unicode 画框字符。数据中的换行符在右侧空白处使用回车符号显示。当数据在没有换行符的情况下从一行换行到下一行时,省略号将显示在第一行的右侧边缘,并再次显示在下一行的左侧边缘。

当。。。的时候边境设置大于零,线型选项还确定用于绘制边界线的字符。普通的 ASCII 字符在任何地方都可以使用,但 Unicode 字符在识别它们的显示器上看起来更好。

空值

设置要打印的字符串以代替空值。默认是不打印任何内容,这很容易被误认为是空字符串。例如,一个人可能更喜欢\pset null '(null)'.

数字语言环境

如果*价值指定它必须是或者离开这将启用或禁用特定于区域设置的字符的显示,以分隔十进制标记左侧的数字组。如果价值*省略该命令在常规和特定于区域设置的数字输出之间切换。

寻呼机

控制使用寻呼程序进行查询和 psql 帮助输出。如果环境变量PSQL_PAGER或者寻呼机设置后,输出将通过管道传送到指定的程序。否则依赖于平台的默认程序(例如更多的) 用来。

当。。。的时候寻呼机选项是离开,不使用寻呼程序。当。。。的时候寻呼机选项是,在适当的时候使用寻呼机,即当输出到终端并且不适合屏幕时。这寻呼机选项也可以设置为总是,这会导致寻呼机用于所有终端输出,无论它是否适合屏幕。\pset 寻呼机没有*价值*打开和关闭寻呼机使用。

pager_min_lines

如果pager_min_lines设置为大于页面高度的数字,除非至少有这么多行输出要显示,否则不会调用分页程序。默认设置为 0.

记录

指定在非对齐输出格式中使用的记录(行)分隔符。默认为换行符。

记录ep_zero

将在未对齐输出格式中使用的记录分隔符设置为零字节。

表格(要么)

在 HTML 格式中,这指定要放置在桌子标签。例如,这可能是单元格填充要么彩色.请注意,您可能不想指定边境在这里,因为这已经由\pset 边框.如果不*价值*给定,表属性未设置。

乳胶长桌格式,这控制包含左对齐数据类型的每列的比例宽度。它被指定为以空格分隔的值列表,例如,'0.2 0.2 0.6'.未指定的输出列使用最后指定的值。

标题(要么C)

为任何随后打印的表格设置表格标题。这可用于为您的输出提供描述性标签。如果不*价值*已给出,标题未设置。

tuples_only(或者)

如果*价值指定它必须是或者离开这将启用或禁用仅元组模式。如果价值*省略命令在常规输出和仅元组输出之间切换。常规输出包括额外的信息,例如列标题、标题和各种页脚。在仅元组模式下,仅显示实际表数据。

unicode_border_linestyle

设置边框绘制样式统一码线条样式之一单身的或者双倍的.

unicode_column_linestyle

设置柱的绘制样式统一码线条样式之一单身的或者双倍的.

unicode_header_linestyle

设置标题的绘制样式统一码线条样式之一单身的或者双倍的.

这些不同格式的外观图示可以在例子, 以下。

# 提示

有多种快捷命令可用于\pset.看\一种,\C,\f,\H,\t,\T, 和\x.

\q要么\放弃

退出 psql 程序。在脚本文件中,仅终止该脚本的执行。

\qecho *文本* [ ... ]

该命令与\回声除了输出将被写入查询输出通道,如设置\o.

\r要么\重置

重置(清除)查询缓冲区。

\s [ *文件名* ]

将 psql 的命令行历史打印到*文件名.如果文件名*省略时,历史记录将写入标准输出(如果合适,使用寻呼机)。如果 psql 是在没有 Readline 支持的情况下构建的,则此命令不可用。

\放 [ *姓名* [ *价值* [ ... ] ] ]

设置 psql 变量*姓名价值*,或者如果给出了多个值,则将它们串联起来。如果只给出一个参数,则变量设置为空字符串值。要取消设置变量,请使用\取消设置命令。

\放不带任何参数显示所有当前设置的 psql 变量的名称和值。

有效的变量名称可以包含字母、数字和下划线。看变量详情如下。变量名区分大小写。

某些变量是特殊的,因为它们控制 psql 的行为或自动设置以反映连接状态。这些变量记录在变量, 以下。

# 笔记

此命令与 SQL 命令无关.

\setenv *姓名* [ *价值* ]

设置环境变量*姓名价值,或者如果价值*未提供,取消设置环境变量。例子:

testdb=> \setenv PAGER less
testdb=> \setenv LESS -imx4F

\sf[+] *功能说明*

此命令获取并显示命名函数或过程的定义,格式为创建或替换函数或者创建或替换过程命令。定义打印到当前查询输出通道,由\o.

目标函数可以单独指定名称,也可以指定名称和参数,例如foo(整数,文本).如果有多个同名函数,则必须给出参数类型。

如果+附加到命令名称后,然后对输出行进行编号,函数体的第一行是第 1 行。

与大多数其他元命令不同,该行的整个其余部分始终被视为\sf, 并且在参数中既不执行变量插值也不执行反引号扩展。

\sv[+] *视图名称*

此命令获取并显示命名视图的定义,格式为创建或替换视图命令。定义打印到当前查询输出通道,由\o.

如果+附加到命令名称后,然后输出行从 1 开始编号。

与大多数其他元命令不同,该行的整个其余部分始终被视为\sv,并且在参数中既不执行变量插值,也不执行反引号展开。

\t

切换输出列名标题和行计数页脚的显示。此命令相当于\仅限pset元组并且是为了方便而提供的。

\T*表3.1.1选项*

指定要放置在桌子HTML输出格式的标签。此命令相当于\pset表格属性*表3.1.1选项*.

\计时[*在…上* | ** ]

通过一个参数,可以显示每个SQL语句的开启或关闭时间。如果没有参数,则在打开和关闭之间切换显示。显示时间以毫秒为单位;超过1秒的间隔也以分钟:秒的格式显示,如果需要,还会添加小时和天字段。

\解除*名称*

取消设置(删除)psql变量*名称*.

大多数控制psql行为的变量都不能取消设置;相反,一个\解除命令被解释为将它们设置为默认值。看见变量在下面

\w\写 文件名
\w\写 |命令

将当前查询缓冲区写入文件*文件名或者将其传输到shell命令命令*。如果当前查询缓冲区为空,则会写入最近执行的查询。

如果争论以|,则该行的整个剩余部分将被视为*命令*执行,并且在其中既不执行变量插值,也不执行反引号扩展。剩下的部分直接传递到外壳上。

\警告*文本* [ ... ]

此命令与\回音除了输出将被写入psql的标准错误通道,而不是标准输出。

\手表[** ]

重复执行当前查询缓冲区(如图所示)\g直到中断或查询失败。在执行之间等待指定的秒数(默认为2)。每个查询结果都会显示一个标题,其中包括\pset标题字符串(如果有)、查询开始时的时间以及延迟间隔。

如果当前查询缓冲区为空,则重新执行最近发送的查询。

\x[*在…上* | ** | *汽车* ]

设置或切换扩展表格格式模式。因此,它相当于\pset扩展.

\z[[*图案*](app-psql.html#app-psql-PATTERNS)]

列出表、视图和序列及其相关的访问权限。如果*图案*指定时,仅列出名称与模式匹配的表、视图和序列。

这是的别名\dp(“显示特权”)。

\! [ *命令* ]

毫无争议地逃到一个子壳里;当子shell退出时,psql将恢复。使用参数执行shell命令*命令*.

与大多数其他元命令不同,该行的整个剩余部分始终被视为\!,并且在参数中既不执行变量插值,也不执行反引号展开。剩下的部分直接传递到外壳上。

\? [ *话题* ]

显示帮助信息。可选的*话题*参数(默认为命令)选择解释psql的哪一部分:命令描述psql的反斜杠命令;选项描述可以传递给psql的命令行选项;和变量显示有关psql配置变量的帮助。

\;

反斜杠分号不是元命令,与前面的命令不同;相反,它只会导致在查询缓冲区中添加分号,而无需进一步处理。

通常,psql会在到达命令结尾分号后立即向服务器发送SQL命令,即使当前行上还有更多输入。例如进入

select 1; select 2; select 3;

将导致三个SQL命令分别发送到服务器,并在继续执行下一个命令之前显示每个命令的结果。但是,输入的分号为\;不会触发命令处理,因此它前面的命令和后面的命令有效地结合在一起,并在一个请求中发送到服务器。比如说

select 1\; select 2\; select 3;

结果是在到达非反斜杠分号时,在一个请求中向服务器发送三个SQL命令。服务器将此类请求作为单个事务执行,除非有明确的开始/犯罪字符串中包含的用于将其划分为多个事务的命令。(见第53.2.2.1节有关服务器如何处理多查询字符串的更多详细信息。)psql只打印它收到的每个请求的最后一个查询结果;在本例中,虽然这三个选择确实执行了,psql只打印3..

# 模式

各种各样的\d命令接受*图案*参数指定要显示的对象名称。在最简单的情况下,模式就是对象的确切名称。模式中的字符通常被折叠成小写,就像在SQL名称中一样;例如\富先生将显示名为.就像在SQL名称中一样,在一个模式周围加上双引号将停止使用小写。如果您需要在模式中包含一个实际的双引号字符,请将其作为双引号序列中的一对双引号来编写;这同样符合SQL引用标识符的规则。例如\dt“FOO”“BAR”将显示名为“富”酒吧(不是“富”酒吧)。与SQL名称的常规规则不同,例如,您可以在模式的一部分周围加双引号\dt FOO“FOO”酒吧将显示名为Fooboobar.

每当*图案参数被完全省略,则\d命令显示当前架构搜索路径中可见的所有对象——这相当于使用*作为模式。(一个物体被称为看得见的*如果它的包含模式在搜索路径中,并且在搜索路径的前面没有出现相同类型和名称的对象。这相当于一条语句,即对象可以通过名称引用,而无需明确的模式限定。)要查看数据库中的所有对象,而不考虑可见性,请使用*.*作为模式。

在某种模式下,*匹配任意字符序列(不包括任何字符)和?匹配任何单个字符。(此符号与Unix shell文件名模式类似。)例如\dt int*显示名称以开头的表智力.但在双引号中,*?失去这些特殊的意义,只是字面上的匹配。

包含一个点的图案(.)被解释为模式名模式,后跟对象名模式。例如\dt foo**酒吧*显示其表名包括的所有表酒吧在模式名称以。如果没有出现点,则模式只匹配当前架构搜索路径中可见的对象。同样,双引号内的点失去了它的特殊意义,并按字面意思匹配。

高级用户可以使用正则表达式符号,例如字符类[0-9]匹配任何数字。所有正则表达式特殊字符都按照中的指定工作第9.7.3节,除了.如上所述,它被用作分隔符,*它被翻译成正则表达式符号.*, ?翻译成.$这是字面上的匹配。您可以在需要时通过编写?对于., (*R*+|)对于*R**(*R*|)对于*R*?. $不需要作为正则表达式字符,因为模式必须匹配全名,这与正则表达式的通常解释不同(换句话说,$将自动附加到模式中)。写*在开始和/或结束时,如果您不希望模式被锚定。请注意,在双引号中,所有正则表达式特殊字符都会失去其特殊含义,并按字面意思进行匹配。此外,正则表达式特殊字符在运算符名称模式(即\做).

# 高级功能

# 变量

psql提供了类似于普通Unix命令shell的变量替换功能。变量只是名称/值对,其中的值可以是任何长度的任何字符串。名称必须由字母(包括非拉丁字母)、数字和下划线组成。

要设置变量,请使用psql meta命令\设定例如

testdb=> \set foo bar

设置变量不折不扣酒吧.要检索变量的内容,请在名称前加冒号,例如:

testdb=> \echo :foo
bar

这适用于常规SQL命令和元命令;这里有更多细节SQL插值在下面

如果你打电话\设定如果没有第二个参数,变量将被设置为空字符串值。要取消设置(即删除)变量,请使用以下命令\解除.要显示所有变量的值,请调用\设定没有任何争论。

# 笔记

的论点\设定受与其他命令相同的替换规则约束。因此,您可以构建有趣的引用,例如\布景:foo'something'并分别获得Perl或PHP的“软链接”或“变量”。不幸的(或幸运的?)是,这些构造没有任何有用的方法。另一方面\设置栏:foo是复制变量的一种非常有效的方法。

psql专门处理了其中一些变量。它们表示某些选项设置,可以在运行时通过更改变量的值来更改这些设置,或者在某些情况下表示psql的可变状态。按照惯例,所有经过特殊处理的变量名称都由所有大写ASCII字母(可能还有数字和下划线)组成。为了确保将来的最大兼容性,请避免出于自己的目的使用此类变量名。

控制psql行为的变量通常不能取消设置或设置为无效值。一\解除命令是允许的,但被解释为将变量设置为其默认值。A.\设定不带第二个参数的命令被解释为将变量设置为在…上,用于接受该值的控制变量,对于其他变量则被拒绝。此外,还可以使用接受这些值的控制变量在…上还将接受布尔值的其他常见拼写,例如符合事实的错误的.

经过特殊处理的变量包括:

自动提交

什么时候在…上(默认情况下),每个SQL命令都会在成功完成后自动提交。要在此模式下推迟提交,必须输入开始开始交易SQL命令。什么时候或者取消设置,直到显式发出犯罪终止.自动提交关闭模式通过发出隐式开始对于您来说,就在任何尚未在事务块中且本身不是开始或其他事务控制命令,也不是无法在事务块内执行的命令(例如真空).

# 笔记

在自动提交关闭模式下,您必须通过输入中止回降.同时请记住,如果您未提交就退出会话,您的工作将丢失。

# 笔记

自动提交打开模式是PostgreSQL的传统行为,但自动提交关闭更接近SQL规范。如果您更喜欢自动提交关闭,您可能希望在系统范围内设置它psqlrc文件还是你的~/.psqlrc文件

COMP_关键字_案例

确定完成SQL关键字时要使用的字母大小写。如果设置为降低上面的,完成的单词将分别用小写或大写。如果设置为保持较低保留鞋面(默认情况下),已完成的单词将以已输入的单词为准,但未输入任何内容的已完成单词将分别以小写或大写形式出现。

数据库名

当前连接到的数据库的名称。每次连接到数据库(包括程序启动)时都会设置,但可以更改或取消设置。

回响

如果设置为全部的,所有非空输入行在读取时打印为标准输出。(这不适用于以交互方式读取的行。)要在程序启动时选择此行为,请使用开关-a.如果设置为询问,psql将每个查询发送到服务器时打印到标准输出。选择此行为的开关是-e.如果设置为错误,则仅在标准错误输出上显示失败的查询。此行为的开关是-b.如果设置为没有一个(默认设置),则不显示任何查询。

隐藏的回声

当此变量设置为在…上反斜杠命令查询数据库时,首先显示查询。此功能可帮助您研究PostgreSQL内部结构,并在自己的程序中提供类似的功能。(要在程序启动时选择此行为,请使用开关-E)如果将此变量设置为诺埃克斯,查询只是显示出来,但实际上并没有发送到服务器并执行。默认值为.

编码

当前客户端字符集编码。每次连接到数据库(包括程序启动)时,以及使用更改编码时,都会设置此选项\编码,但它可以更改或取消设置。

错误

符合事实的如果上一次SQL查询失败,错误的如果成功了。另见SQLSTATE.

取数

如果此变量设置为大于零的整数值,则选择查询是以如此多的行分组获取和显示的,而不是在显示之前收集整个结果集的默认行为。因此,无论结果集的大小,只使用有限的内存。启用此功能时,通常使用100到1000的设置。请记住,在使用此功能时,查询可能会在显示了一些行之后失败。

# 提示

虽然可以使用此功能的任何输出格式,但默认对齐的格式往往看起来不好,因为每组取数行将被单独格式化,从而导致跨行组的列宽不同。其他输出格式工作得更好。

隐藏表格

如果此变量设置为符合事实的,则不显示表的访问方法详细信息。这主要用于回归测试。

隐藏土司

如果此变量设置为符合事实的,不显示列压缩方法的详细信息。这主要用于回归测试。

历史控制

如果此变量设置为无知空间,以空格开头的行不会输入历史记录列表。如果设置为的值无知的人,则不输入与上一历史记录行匹配的行。价值忽视两者结合了这两个选项。如果设置为没有一个(默认设置),在交互模式下读取的所有行都保存在历史记录列表中。

# 笔记

这一功能是无耻地从Bash剽窃的。

历史文件

将用于存储历史记录列表的文件名。如果未设置,则文件名取自PSQL_历史环境变量。如果也未设置,则默认设置为~/.psql_历史%APPDATA%\postgresql\psql\U历史记录在窗户上。例如,把:

\set HISTFILE ~/.psql_history-:DBNAME

在里面~/.psqlrc将导致psql为每个数据库维护单独的历史记录。

# 笔记

这一功能是无耻地从Bash剽窃的。

历史尺寸

要存储在命令历史记录中的最大命令数(默认为500)。如果设置为负值,则不应用任何限制。

# 笔记

这一功能是无耻地从Bash剽窃的。

主办

当前连接到的数据库服务器主机。每次连接到数据库(包括程序启动)时都会设置,但可以更改或取消设置。

忽视

如果设置为1或更小,则发送EOF字符(通常为控制+D)访问psql的交互式会话将终止应用程序。如果设置为更大的数值,则必须键入许多连续的EOF字符才能终止交互式会话。如果变量设置为非数值,则解释为10.默认值为0.

# 笔记

这一功能是无耻地从Bash剽窃的。

弹性体

上次受影响的OID的值,从插入\lo_进口命令只有在显示下一个SQL命令的结果之后,才能保证此变量有效。自版本12起,PostgreSQL服务器不再支持OID系统列,因此LASTOID将始终为0插入当针对这样的服务器时。

最后一条错误消息
最后一个错误

当前psql会话中最近失败的查询的主要错误消息和关联的SQLSTATE代码,或空字符串和00000如果当前会话中没有发生错误。

关于_错误_回滚

当设置为在…上,如果事务块中的语句生成错误,则该错误将被忽略,事务将继续。当设置为互动的,这样的错误只会在交互式会话中被忽略,而在读取脚本文件时不会被忽略。当设置为(默认情况下),事务块中生成错误的语句将中止整个事务。错误回滚模式通过发出隐式保存点对于您来说,在事务块中的每个命令之前,如果命令失败,则回滚到保存点。

错误停止

默认情况下,出现错误后,命令处理将继续。当此变量设置为在…上,处理将立即停止。在交互模式下,psql将返回命令提示符;否则,psql将退出,返回错误代码3,以将此情况与致命错误情况区分开来,致命错误情况使用错误代码1报告。在任何一种情况下,当前运行的任何脚本(顶层脚本,如果有的话,以及它可能调用的任何其他脚本)都将立即终止。如果顶级命令字符串包含多个SQL命令,则处理将使用当前命令停止。

港口城市

当前连接到的数据库服务器端口。每次连接到数据库(包括程序启动)时都会设置,但可以更改或取消设置。

提示1
提示2
提示3

它们指定了psql问题的提示应该是什么样子。看见激励在下面

轻声的

将此变量设置为在…上相当于命令行选项-q.它在交互模式下可能不太有用。

行数

上次SQL查询返回或影响的行数,如果查询失败或未报告行数,则为0.

服务器\u版本\u名称
服务器版本号

例如,以字符串形式显示服务器的版本号9.6.2, 10.111β1,例如数字形式90602100001。每次连接到数据库(包括程序启动)时都会设置这些设置,但可以更改或取消设置。

显示上下文

此变量可以设置为从不, 错误总是控制是否上下文字段显示在来自服务器的消息中。默认值是错误(这意味着上下文将显示在错误消息中,但不会显示在通知或警告消息中)。此设置在以下情况下无效:冗长即将简短生硬的sqlstate(另见\错误冗长,当您想要获得刚刚得到的错误的详细版本时使用。)

单线

将此变量设置为在…上相当于命令行选项-S.

单步

将此变量设置为在…上相当于命令行选项-s.

SQLSTATE

错误代码(请参阅附录A)与上一个SQL查询的失败关联,或00000如果成功了。

使用者

您当前连接的数据库用户。每次连接到数据库(包括程序启动)时都会设置,但可以更改或取消设置。

冗长

此变量可以设置为违约, 冗长的, 简洁, 要么sqlstate控制错误报告的详细程度。(也可以看看\errverbose, 当您想要刚刚得到的错误的详细版本时使用。)

版本
VERSION_NAME
VERSION_NUM

这些变量在程序启动时设置以反映 psql 的版本,分别为详细字符串、短字符串(例如,9.6.2,10.1, 要么11beta1)和一个数字(例如,90602或者100001)。它们可以更改或取消设置。

# SQL 插值

psql 变量的一个关键特性是您可以将它们替换(“插入”)到常规 SQL 语句以及元命令的参数中。此外,psql 提供了确保用作 SQL 文字和标识符的变量值被正确引用的工具。插入值而不使用任何引号的语法是在变量名前加上冒号 ()。例如,

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;

会查询表我的表.请注意,这可能是不安全的:变量的值是按字面复制的,因此它可以包含不平衡的引号,甚至是反斜杠命令。你必须确保它放在哪里是有意义的。

当一个值被用作 SQL 文字或标识符时,安排它被引用是最安全的。要将变量的值引用为 SQL 文字,请在单引号中写一个冒号,后跟变量名。要将值引用为 SQL 标识符,请写一个冒号,后跟双引号中的变量名。这些结构可以正确处理嵌入在变量值中的引号和其他特殊字符。以这种方式编写前面的示例会更安全:

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :"foo";

变量插值不会在引用的 SQL 文字和标识符中执行。因此,诸如':富'不能从变量的值生成带引号的文字(如果它确实有效,那将是不安全的,因为它无法正确处理嵌入在值中的引号)。

这种机制的一个示例使用是将文件的内容复制到表列中。首先将文件加载到变量中,然后将变量的值插入为带引号的字符串:

testdb=> \set content `cat my_file.txt`
testdb=> INSERT INTO my_table VALUES (:'content');

(请注意,如果my_file.txt包含 NUL 字节。psql 不支持在变量值中嵌入 NUL 字节。)

由于冒号可以合法地出现在 SQL 命令中,因此显然是插值尝试(即:姓名,:'姓名', 或者:“姓名”) 除非当前设置了命名变量,否则不会被替换。在任何情况下,您都可以使用反斜杠对冒号进行转义,以防止被替换。

:{?*姓名*}特殊语法根据变量是否存在返回 TRUE 或 FALSE,因此总是被替换,除非冒号被反斜杠转义。

变量的冒号语法是嵌入式查询语言(如 ECPG)的标准 SQL。数组切片和类型转换的冒号语法是 PostgreSQL 扩展,有时会与标准用法冲突。将变量值转义为 SQL 文字或标识符的冒号引号语法是 psql 扩展。

# 提示

可以根据您的喜好自定义提示 psql 问题。三个变量提示1,提示2, 和提示3包含描述提示外观的字符串和特殊转义序列。提示 1 是 psql 请求新命令时发出的正常提示。当在命令输入期间需要更多输入时发出提示 2,例如因为命令未以分号终止或引号未关闭。运行 SQL 时发出提示 3从标准输入复制命令,您需要在终端上输入一行值。

所选提示变量的值按字面意思打印,但百分号 (%) 遇到。根据下一个字符,替代某些其他文本。定义的替换是:

%M

数据库服务器的完整主机名(带域名),或[当地的]如果连接是通过 Unix 域套接字,或者[当地的:*/目录/名称*], 如果 Unix 域套接字不在默认位置编译。

%m

数据库服务器的主机名,在第一个点处截断,或[当地的]如果连接是通过 Unix 域套接字。

%>

数据库服务器正在侦听的端口号。

%n

数据库会话用户名。(此值的扩展可能会在数据库会话期间由于命令的结果而改变设置会话授权.)

%/

当前数据库的名称。

%~

%/,但输出是~(波浪号)如果数据库是您的默认数据库。

%#

如果会话用户是数据库超级用户,那么#, 否则一个>.(此值的扩展可能会在数据库会话期间由于命令的结果而改变设置会话授权.)

%p

当前连接到的后端的进程 ID。

%R

在提示 1 中正常=, 但@如果会话位于条件块的非活动分支中,或者^如果处于单行模式,或者如果会话与数据库断开连接(如果\连接失败)。在提示 2%R替换为一个字符,该字符取决于 psql 需要更多输入的原因:-如果命令还没有终止,但是*如果有未完成的/* ... */注释,如果有未完成的引号字符串,则为单引号,如果存在未完成的引号标识符,则为双引号,如果存在未完成的美元引号字符串,则为美元符号,或(如果有不匹配的左括号。在提示 3%R不产生任何东西。

%X

事务状态:不在事务块中时为空字符串,或*在事务块中时,或在失败的事务块中时,或?当事务状态不确定时(例如,因为没有连接)。

%l

当前语句中的行号,从1.

%数字

替换带有指示的八进制代码的字符。

%:姓名

psql 变量的值*姓名*.看变量,以上,详情。

%``*命令`*```

的输出*命令*,类似于普通的“反引号”替换。

%[...%]

提示可以包含终端控制字符,例如,更改提示文本的颜色、背景或样式,或更改终端窗口的标题。为了使 Readline 的行编辑功能正常工作,这些非打印控制字符必须通过将它们包围来指定为不可见%[%].提示中可以出现多对这些。例如:

testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '

结果是粗体字(1个;) 黑底黄字 (33;40) VT100 兼容的彩色终端上的提示。

%w

与最近输出的宽度相同的空白提示1.这可以用作提示2设置,使多行语句与第一行对齐,但没有可见的辅助提示。

要在提示中插入百分号,请写%%.默认提示是'%/%R%x%#'对于提示 1 和 2,以及'>>'提示 3.

# 笔记

这个特性是从tcsh无耻抄袭而来的。

# 命令行编辑

psql 支持 Readline 库,方便行编辑和检索。命令历史会在 psql 退出时自动保存,并在 psql 启动时重新加载。也支持制表符补全,尽管补全逻辑并未声称是 SQL 解析器。tab-completion 生成的查询也会干扰其他 SQL 命令,例如,设置事务隔离级别。如果出于某种原因,您不喜欢选项卡完成,可以将其放入名为.inputrc在您的主目录中:

$if psql
set disable-completion on
$endif

(这不是一个psql,而是一个Readline功能。有关更多详细信息,请阅读其文档。)

# 环境

如果\pset列为零,控制包裹格式和宽度,用于确定宽输出是需要寻呼机,还是应在扩展自动模式下切换为垂直格式。

PG数据库
PGHOST
PGPORT
PGUSER

默认连接参数(请参见第34.15节).

PG_颜色

指定是否在诊断消息中使用颜色。可能的值是总是,汽车从不.

PSQL_编辑器
编辑
视力的

编辑使用的\e, \ef\电动汽车命令。按照列出的顺序检查这些变量;设置的第一个是使用的。如果未设置任何选项,则默认设置为使用六、在Unix系统或便条簿。exe在Windows系统上。

PSQL_编辑器_行号_参数

什么时候\e, \ef\电动汽车与行号参数一起使用,此变量指定用于将起始行号传递给用户编辑器的命令行参数。对于Emacs或vi等编辑器来说,这是一个加号。如果选项名和行号之间需要空格,则在变量值中包含一个尾随空格。例如:

PSQL_EDITOR_LINENUMBER_ARG='+'
PSQL_EDITOR_LINENUMBER_ARG='--line '

默认值是+在Unix系统上(对应于默认编辑器六、,并对许多其他普通编辑有用);但Windows系统上没有默认设置。

PSQL_历史

命令历史记录文件的替代位置。蒂尔德(~)执行扩展。

PSQL_寻呼机
寻呼机

如果查询结果与屏幕不符,则通过此命令传输查询结果。典型值为更多较少的.可通过设置禁用寻呼机的使用PSQL_寻呼机寻呼机设置为空字符串,或通过调整\pset命令按照列出的顺序检查这些变量;设置的第一个是使用的。如果未设置任何选项,则默认设置为使用更多在大多数平台上,但是较少的关于Cygwin。

PSQLRC

用户地址的替代位置.psqlrc文件蒂尔德(~)执行扩展。

\!命令

TMPDIR

用于存储临时文件的目录。默认值是/tmp.

与大多数其他PostgreSQL实用程序一样,该实用程序也使用libpq支持的环境变量(请参阅第34.15节)。

# 文件

psqlrc~/.psqlrc

除非通过-X选项,psql 尝试从系统范围的启动文件中读取和执行命令(psqlrc) 然后是用户的个人启动文件 (~/.psqlrc),在连接到数据库之后但在接受正常命令之前。这些文件可用于设置客户端和/或服务器来品尝,通常使用\放命令。

系统范围的启动文件名为psqlrc并在安装的“系统配置”目录中查找,通过运行最可靠地识别该目录pg_config --sysconfdir.默认情况下,此目录将是../等等/相对于包含 PostgreSQL 可执行文件的目录。该目录的名称可以通过显式设置PGSYSCONFDIR环境变量。

用户的个人启动文件名为.psqlrc并在调用用户的主目录中查找。在缺少这个概念的Windows上,个人启动文件被命名为%APPDATA%\postgresql\psqlrc.conf.用户启动文件的位置可以通过显式设置PSQLRC环境变量。

系统范围的启动文件和用户的个人启动文件都可以通过在文件名后面附加破折号和 PostgreSQL 主要或次要版本号来指定 psql 版本,例如~/.psqlrc-9.2要么~/.psqlrc-9.2.5.将优先读取最特定的版本匹配文件,而不是非特定版本的文件。

.psql_history

命令行历史存储在文件中~/.psql_history, 要么%APPDATA%\postgresql\psql_history在 Windows 上。

历史文件的位置可以通过显式设置历史文件psql 变量或PSQL_HISTORY环境变量。

# 笔记

  • psql 最适用于相同或旧主要版本的服务器。如果服务器的版本比 psql 本身更新,反斜杠命令特别容易失败。但是,反斜杠命令\d系列应该使用版本回到 7.4 的服务器,但不一定使用比 psql 本身更新的服务器。运行 SQL 命令和显示查询结果的一般功能也应该适用于较新的主要版本的服务器,但不能在所有情况下都保证这一点。

    如果要使用 psql 连接多个不同主版本的服务器,建议使用最新版本的 psql。或者,您可以保留每个主要版本的 psql 副本,并确保使用与相应服务器匹配的版本。但在实践中,这种额外的复杂性不应该是必要的。

  • 在 PostgreSQL 9.6 之前,-c隐含选项-X(--no-psqlrc);这已不再是这种情况。

  • 在PostgreSQL 8.4之前,psql允许单字母反斜杠命令的第一个参数直接在命令之后启动,而不需要插入空格。现在,需要一些空白。

# Windows用户须知

psql构建为一个“控制台应用程序”。由于Windows控制台Windows使用的编码与系统其他部分不同,因此在psql中使用8位字符时必须特别小心。如果psql检测到有问题的控制台代码页,它将在启动时警告您。要更改控制台代码页,需要做两件事:

  • 通过输入**cmd。exe/c chcp 1252**(1252是适用于德语的代码页,请用您的值替换。)如果您使用的是Cygwin,那么可以将此命令放入/等/简介.

  • 将控制台字体设置为露西达控制台,因为光栅字体不适用于ANSI代码页。

# 例子

第一个示例显示了如何将命令分散到多行输入上。请注意更改提示:

testdb=> CREATE TABLE my_table (
testdb(>  first integer not null default 0,
testdb(>  second text)
testdb-> ;
CREATE TABLE

现在再看看表定义:

testdb=> \d my_table
              Table "public.my_table"
 Column |  Type   | Collation | Nullable | Default