## 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 节](protocol-flow.html#PROTOCOL-FLOW-MULTI-STATEMENT)有关服务器如何处理多查询字符串的更多详细信息。)此外,psql 仅打印字符串中最后一个 SQL 命令的结果。这与从文件中读取相同字符串或馈送到 psql 的标准输入时的行为不同,因为 psql 分别发送每个 SQL 命令。 由于这种行为,将多个 SQL 命令放在一个`-c`字符串经常有意想不到的结果。最好重复使用`-c`命令或将多个命令提供给 psql 的标准输入,使用如上所示的 echo 或通过 shell here-document,例如: ``` psql <`.例如: ``` $ psql testdb psql (14.2) Type "help" for help. testdb=> ``` 在提示下,用户可以输入SQL命令。通常,当到达以分号结尾的命令时,会将输入行发送到服务器。行尾不会终止命令。因此,为了清晰起见,命令可以分散在几行上。如果发送和执行命令时没有出现错误,则命令的结果将显示在屏幕上。 如果不受信任的用户可以访问未采用[安全模式使用模式](ddl-schemas.html#DDL-SCHEMAS-PATTERNS),通过从中删除可公开写入的架构开始会话`搜索路径`.可以补充`选项=-csearch_路径=`连接字符串或问题`选择pg_目录。设置配置('search_path','',false)`在其他SQL命令之前。这种考虑并不是psql特有的;它适用于执行任意SQL命令的每个接口。 每当执行命令时,psql还会轮询[`听`](sql-listen.html)和[`通知`](sql-notify.html). C风格的块注释被传递到服务器进行处理和删除,而SQL标准注释则被psql删除。 ### 元命令 在psql中输入的任何以不带引号的反斜杠开头的命令都是psql本身处理的psql元命令。这些命令使psql在管理或脚本编写方面更加有用。元命令通常称为斜杠或反斜杠命令。 psql命令的格式是反斜杠,紧接着是命令动词,然后是任何参数。这些参数与命令动词分开,并由任意数量的空格字符分隔。 要在参数中包含空格,可以使用单引号引用。要在参数中包含单引号,请在单引号文本中写两个单引号。此外,单引号中包含的任何内容都会被类似C的`\n`(新线),`\t`(选项卡),`\b`(退格),`\r`(回车),`\f`(表格提要),`\`*`数字`*(八进制)和`\x`*`数字`*(十六进制)。单引号文本中任何其他字符前面的反斜杠引用该字符,无论它是什么。 如果一个不带引号的冒号(`:`)参数中会出现psql变量名,然后替换为变量的值,如中所述[SQL插值](app-psql.html#APP-PSQL-INTERPOLATION)在下面表格`:'*`变量名`*'`和`:"*`变量名`*"`也描述了他们的工作。这个`:{?*`变量名`*}`语法允许测试是否定义了变量。它被真或假所取代。用反斜杠跳过冒号可以防止冒号被替换。 在参数中,包含在反引号中的文本(\```)作为传递给shell的命令行。命令的输出(删除任何尾随换行符)将替换后引号中的文本。在反引号中包含的文本中,没有特殊的引用或其他处理,除了`:*`变量名`*`哪里*`变量名`*是用变量的值替换的psql变量名。还有`:'*`变量名`*'`被适当引用的变量值替换为单个shell命令参数。(后一种形式几乎总是可取的,除非您非常确定变量中的内容。)由于回车符和换行符不能在所有平台上安全引用`:'*`变量名`*'`表单打印错误消息,并且在值中出现此类字符时不替换变量值。 有些命令以SQL标识符(例如表名)作为参数。这些参数遵循SQL的语法规则:不带引号的字母强制使用小写,而双引号(`"`)保护字母不被大小写转换,并允许在标识符中加入空格。在双引号中,成对的双引号在结果名称中减少为一个双引号。例如`FOO“BAR”BAZ`被解释为`fooBARbaz`和`一个奇怪的“名字”`变成`一个奇怪的名字`. 对参数的分析在行尾或找到另一个未加引号的反斜杠时停止。未加引号的反斜杠被视为新元命令的开头。特殊序列`\\`(两个反斜杠)标记参数的结束,并继续解析SQL命令(如果有)。这样,SQL和psql命令就可以在一行中自由混合使用。但在任何情况下,元命令的参数都不能超过行的末尾。 许多元命令作用于*当前查询缓冲区*。这只是一个缓冲区,用于保存已键入但尚未发送到服务器执行的SQL命令文本。这将包括前面的输入行,以及在同一行的meta命令之前出现的任何文本。 定义了以下元命令: `\a` 如果当前表格输出格式未对齐,则切换为对齐。如果未对齐,则将其设置为未对齐。保留此命令是为了向后兼容。看见`\pset`寻求更普遍的解决方案。 `\c`或`\连接[-重用上一个=*`开|关`* ] [ *`库名`* [ *`用户名`* ] [ *`主办`* ] [ *`港口城市`* ] | *`康宁`* ]` 建立与PostgreSQL server的新连接。要使用的连接参数可以使用位置语法(数据库名称、用户、主机和端口中的一个或多个)指定,也可以使用*`康宁`*连接字符串如中所述[第34.1.1节](libpq-connect.html#LIBPQ-CONNSTRING)。如果未给出参数,则使用与之前相同的参数建立新连接。 指定*`库名`*, *`用户名`*, *`主办`*或*`港口城市`*像`-`相当于省略该参数。 新连接可以重复使用以前连接中的连接参数;不仅是数据库名称、用户、主机和端口,还有其他设置,例如*`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语句的操作[`复制`](sql-copy.html)命令,但不是服务器读取或写入指定的文件,而是psql读取或写入该文件,并在服务器和本地文件系统之间路由数据。这意味着文件可访问性和权限是本地用户的权限,而不是服务器的权限,并且不需要SQL超级用户权限。 什么时候`程序`是指定的,*`命令`*由psql执行,数据从或传递到*`命令`*在服务器和客户端之间路由。同样,执行权限是本地用户的权限,而不是服务器的权限,不需要SQL超级用户权限。 对于`\收到。。。来自stdin`,从发出命令的同一源读取数据行,直到`\.`读取或流达到EOF。此选项对于在SQL脚本文件中在线填充表非常有用。对于`\收到。。。施托特`,将输出发送到与psql命令输出相同的位置`抄袭*`计数`*`未打印命令状态(因为它可能与数据行混淆)。读取/写入psql的标准输入或输出,而不考虑当前命令源或`\o`选项,写`来自pstdin`或`扑通`. 此命令的语法与SQL类似[`复制`](sql-copy.html)命令除数据源/目的地之外的所有选项均为`复制`.因此,特殊的解析规则适用于`\抄袭`元命令。与大多数其他元命令不同,行的整个剩余部分始终被视为`\抄袭`,并且在参数中既不执行变量插值,也不执行反引号展开。 ### 提示 获得相同结果的另一种方法`\收到。。。到`就是使用SQL`复制施托特`命令并用`\g*`文件名`*`或`\g|*`程序`*`不像`\抄袭`,此方法允许命令跨越多行;此外,还可以使用变量插值和反报价扩展。 ### 提示 这些操作的效率不如SQL`复制`命令,因为所有数据都必须通过客户机/服务器连接。对于大量数据,最好使用SQL命令。 `\版权所有` 显示PostgreSQL的版权和发行条款。 `\crosstabview[*`科尔夫`* [ *`科尔赫`* [ *`寒冷的`* [ *`索特科赫`* ] ] ] ]` 执行当前查询缓冲区(如`\g`)并在交叉表网格中显示结果。查询必须至少返回三列。由标识的输出列*`科尔夫`*成为一个垂直标题,输出列由*`科尔赫`*成为水平标题。*`寒冷的`*标识要在网格中显示的输出列。*`索特科赫`*标识水平标题的可选排序列。 每个列规范可以是一个列号(从1开始)或一个列名。通常的SQL大小写折叠和引用规则适用于列名。如果省略,*`科尔夫`*作为第1列,并*`科尔赫`*如第2栏所示。*`科尔赫`*一定不同于*`科尔夫`*如果*`寒冷的`*如果未指定,则查询结果中必须正好有三列,并且两列都不是*`科尔夫`*也没有*`科尔赫`*被认为是*`寒冷的`*. 垂直标题显示为最左边的列,包含列中的值*`科尔夫`*,顺序与查询结果中的顺序相同,但已删除重复项。 水平标题显示为第一行,包含列中的值*`科尔赫`*,删除重复项。默认情况下,它们的显示顺序与查询结果中的顺序相同。但如果选择*`索特科赫`*参数,它标识值必须为整数的列,以及*`科尔赫`*将出现在水平标题中,根据相应的*`索特科赫`*价值观 在交叉表网格中,针对每个不同的值`十、`属于*`科尔赫`*以及每个不同的值`y`属于*`科尔夫`*,位于十字路口的单元`(x,y)`包含`寒冷的`查询结果行中的列,其*`科尔赫`*是`十、`以及*`科尔夫`*是`y`.如果没有这样的行,则单元格为空。如果有多个这样的行,则会报告一个错误。 `\d[S+][*`图案`*](app-psql.html#app-psql-PATTERNS)]` 对于每个关系(表、视图、物化视图、索引、序列或外部表)或与*`图案`*,显示所有列、它们的类型、表空间(如果不是默认值)和任何特殊属性,例如`非空`或者违约。还显示了相关的索引、约束、规则和触发器。对于外部表,也会显示关联的外部服务器。(“匹配模式”的定义见[模式](app-psql.html#APP-PSQL-PATTERNS)下面。) 对于某些类型的关系,`\d`显示每列的附加信息:序列的列值、索引的索引表达式和外部表的外部数据包装选项。 命令表单`\d+`相同,只是显示了更多信息:与表的列相关联的任何注释都会显示,表中是否存在OID,视图定义(如果关系是视图),非默认值[副本身份](sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY)设置和[访问方法](sql-create-access-method.html)如果关系具有访问方法,则命名。 默认情况下,只显示用户创建的对象;提供一个模式或`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节](xindex.html#XINDEX-OPCLASS)).如果*`访问方法模式`*指定时,只列出与名称与该模式匹配的访问方法关联的运算符类。如果*`输入类型模式`*指定时,只列出与名称与该模式匹配的输入类型关联的运算符类。如果`+`在命令名之后,每个操作符类都会与其关联的操作符族和所有者一起列出。 `\dAf[+][[*`访问方法模式`*](app-psql.html#app-psql-PATTERNS)[[*`输入类型模式`*](app-psql.html#app-psql-PATTERNS)]` 列出运算符族(请参见[第38.16.5节](xindex.html#XINDEX-OPFAMILY)).如果*`访问方法模式`*指定时,仅列出与名称与该模式匹配的访问方法关联的运算符族。如果*`输入类型模式`*指定时,仅列出与名称与该模式匹配的输入类型关联的运算符族。如果`+`在命令名之后,将列出每个操作符族及其所有者。 `\道[+][[*`访问方法模式`*](app-psql.html#app-psql-PATTERNS)[[*`操作员族模式`*](app-psql.html#app-psql-PATTERNS)]` 列出与运算符族关联的运算符(请参见[第38.16.2节](xindex.html#XINDEX-STRATEGIES)).如果*`访问方法模式`*指定时,仅列出与名称与该模式匹配的访问方法关联的运算符族的成员。如果*`操作员族模式`*指定时,仅列出名称与该模式匹配的运算符族成员。如果`+`附加到命令名后,每个运算符都会与其排序运算符系列(如果是排序运算符)一起列出。 `\dAp[+][[*`访问方法模式`*](app-psql.html#APP-PSQL-PATTERNS) [[*`运算符族模式`*](app-psql.html#APP-PSQL-PATTERNS)]]` 列出与运算符系列相关的支持功能(请参阅[第 38.16.3 节](xindex.html#XINDEX-SUPPORT))。如果*`访问方法模式`*指定时,仅列出与名称匹配该模式的访问方法关联的运算符系列的函数。如果*`运算符族模式`*指定时,仅列出名称与该模式匹配的运算符系列的函数。如果`+`附加到命令名称后,函数会详细显示,并带有它们的实际参数列表。 `\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-comment.html)SQL 命令。 `\dD[S+] [ [*`图案`*](app-psql.html#APP-PSQL-PATTERNS)]` 列出域。如果*`图案`*指定时,仅显示名称与模式匹配的域。默认情况下,仅显示用户创建的对象;提供一个模式或`小号`修饰符以包含系统对象。如果`+`附加到命令名称后,列出每个对象及其关联的权限和描述。 `\ddp [ [*`图案`*](app-psql.html#APP-PSQL-PATTERNS)]` 列出默认访问权限设置。对于默认权限设置已从内置默认值更改的每个角色(和架构,如果适用)显示一个条目。如果*`图案`*指定时,仅列出角色名称或模式名称与模式匹配的条目。 这[`更改默认权限`](sql-alterdefaultprivileges.html)命令用于设置默认访问权限。特权显示的含义在[第 5.7 节](ddl-priv.html). `\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)]` 列出表、视图和序列及其关联的访问权限。如果*`图案`*指定时,仅列出名称与模式匹配的表、视图和序列。 这[`授予`](sql-grant.html)和[`撤销`](sql-revoke.html)命令用于设置访问权限。特权显示的含义在[第 5.7 节](ddl-priv.html). `\dP[itn+] [ [*`图案`*](app-psql.html#APP-PSQL-PATTERNS)]` 列出分区关系。如果*`图案`*指定时,仅列出名称与模式匹配的条目。修饰符`吨`(表格)和`一世`(indexes) 可以附加到命令中,过滤要列出的关系类型。默认情况下,会列出分区表和索引。 如果修饰符`n`使用(“嵌套”)或指定模式,然后包括非根分区关系,并显示一列显示每个分区关系的父级。 如果`+`附加到命令名称后,还会显示每个关系的分区大小的总和以及关系的描述。如果`n`与`+`,显示了两种大小:一种包括直接连接的叶分区的总大小,另一种显示所有分区的总大小,包括间接连接的子分区。 `\drds [ [*`角色模式`*](app-psql.html#APP-PSQL-PATTERNS) [ [*`数据库模式`*](app-psql.html#APP-PSQL-PATTERNS) ] ]` 列出定义的配置设置。这些设置可以是特定于角色的、特定于数据库的,或两者兼而有之。*`角色模式`*和*`数据库模式`*用于分别选择要列出的特定角色和数据库。如果省略,或者如果`*`指定时,将列出所有设置,分别包括那些不特定于角色或特定于数据库的设置。 这[`改变角色`](sql-alterrole.html)和[`更改数据库`](sql-alterdatabase.html)命令用于定义每个角色和每个数据库的配置设置。 `\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`如果你想知道是否[`分析`](sql-analyze.html)已运行,规划师可以使用统计信息。 `\dy[+][*`图案`*](app-psql.html#app-psql-PATTERNS)]` 列出事件触发器。如果*`图案`*指定时,仅列出名称与模式匹配的事件触发器。如果`+`添加到命令名后,每个对象都会与其关联的描述一起列出。 `\e`或`\编辑` `[ *`文件名`* ] [ *`线号`* ]` 如果*`文件名`*指定时,将编辑该文件;编辑器退出后,文件的内容将复制到当前查询缓冲区中。如果没有*`文件名`*给定时,当前查询缓冲区将复制到一个临时文件,然后以相同的方式编辑该文件。或者,如果当前查询缓冲区为空,则将最近执行的查询复制到临时文件,并以相同的方式进行编辑。 如果编辑文件或上一个查询,并且在不修改文件的情况下退出编辑器,查询缓冲区将被清除。否则,将根据psql的常规规则重新解析查询缓冲区的新内容,将整个缓冲区视为一行。任何完整的查询都会立即执行;也就是说,如果查询缓冲区包含分号或以分号结尾,则执行并从查询缓冲区中删除该点之前的所有内容。查询缓冲区中剩余的内容将重新显示。输入分号或`\g`发送,或`\r`通过清除查询缓冲区来取消它。 将缓冲区视为一行主要影响元命令:元命令之后缓冲区中的任何内容都将被视为元命令的参数,即使它跨越多行。(因此,您不能以这种方式使用脚本生成元命令。请使用`\我`为此。) 如果指定了行号,psql会将光标定位在文件或查询缓冲区的指定行上。请注意,如果给定一个全数字参数,psql将假定它是行号,而不是文件名。 ### 提示 看见[环境](app-psql.html#APP-PSQL-ENVIRONMENT),了解如何配置和自定义编辑器。 `\回音*`文本`* [ ... ]` 将经过计算的参数打印到标准输出,以空格分隔,后跟换行符。这对于在脚本输出中散布信息很有用。例如: ``` => \echo `date` Tue Oct 26 21:40:57 CEST 1999 ``` 如果第一个参数是无引号的`-n`尾随的换行符未写入(第一个参数也未写入)。 ### 提示 如果你使用`\o`命令重定向您可能希望使用的查询输出`\基乔`而不是这个命令。另见`\警告`. `\ef[*`功能描述`* [ *`线号`* ] ]` 此命令以`创建或替换函数`或`创建或替换过程`命令编辑的方式与编辑相同`\编辑`.如果不保存就退出编辑器,则该语句将被丢弃。如果保存并退出编辑器,如果在其中添加分号,则会立即执行更新的命令。否则它会被重新显示;输入分号或`\g`发送,或`\r`取消。 例如,目标函数可以单独按名称指定,也可以按名称和参数指定`foo(整数,文本)`。如果有多个同名函数,则必须给出参数类型。 如果未指定函数,则为空`创建函数`模板将显示以供编辑。 如果指定了行号,psql会将光标定位在函数体的指定行上。(请注意,函数体通常不从文件的第一行开始。) 与大多数其他元命令不同,该行的整个剩余部分始终被视为`\ef`,并且在参数中既不执行变量插值,也不执行反引号展开。 ### 提示 看见[环境](app-psql.html#APP-PSQL-ENVIRONMENT),了解如何配置和自定义编辑器。 `\编码[*`编码`* ]` 设置客户端字符集编码。如果没有参数,此命令将显示当前编码。 `\错误冗长` 以最大的冗余度重复最近的服务器错误消息,就像`冗长`准备好了吗`冗长的`和`显示上下文`准备好了吗`总是`. `\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 变量中(参见[变量](app-psql.html#APP-PSQL-VARIABLES)以下)。要执行的查询必须恰好返回一行。行的每一列都存储在一个单独的变量中,命名与列相同。例如: ``` => 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](https://tools.ietf.org/html/rfc4180).此输出与服务器的 CSV 格式兼容`复制`命令。生成带有列名的标题行,除非`tuples_only`参数是`在`.不打印标题和页脚。每行都由系统相关的行尾字符终止,通常是单个换行符 (`\n`) 用于类 Unix 系统或回车和换行序列 (`\r\n`) 适用于 Microsoft Windows。可以选择逗号以外的字段分隔符`\pset csv_fieldsep`. `包裹`格式就像`对齐`但跨行包装宽数据值以使输出适合目标列宽。目标宽度的确定如下所述`列`选项。请注意,psql 不会尝试换行列标题;所以,`包裹`格式的行为与`对齐`如果列标题所需的总宽度超过目标。 这`asciidoc`,`html`,`乳胶`,`乳胶长桌`, 和`troff-ms`格式输出旨在使用相应标记语言包含在文档中的表格。它们不是完整的文件!这在 HTML 中可能不是必需的,但在 LaTeX 中,您必须有一个完整的文档包装器。这`乳胶`格式使用 LaTeX 的`表格`环境。这`乳胶长桌`格式需要 LaTeX`长桌`和`书单`包。 `线型` 将边框线绘制样式设置为以下之一`ascii`,`旧ASCII`, 或者`统一码`.允许使用唯一的缩写。(这意味着一个字母就足够了。)默认设置是`ascii`.此选项仅影响`对齐`和`包裹`输出格式。 `ascii`style 使用纯 ASCII 字符。数据中的换行符使用`+`右边空白处的符号。当。。。的时候`包裹`格式将数据从一行换行到下一行,没有换行符,点 (`.`) 显示在第一行的右侧边距中,并再次显示在下一行的左侧边距中。 `旧ASCII`style 使用纯 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` 设置标题的绘制样式`统一码`线条样式之一`单身的`或者`双倍的`. 这些不同格式的外观图示可以在[例子](app-psql.html#APP-PSQL-EXAMPLES), 以下。 ### 提示 有多种快捷命令可用于`\pset`.看`\一种`,`\C`,`\f`,`\H`,`\t`,`\T`, 和`\x`. `\q`要么`\放弃` 退出 psql 程序。在脚本文件中,仅终止该脚本的执行。 `\qecho *`文本`* [ ... ]` 该命令与`\回声`除了输出将被写入查询输出通道,如设置`\o`. `\r`要么`\重置` 重置(清除)查询缓冲区。 `\s [ *`文件名`* ]` 将 psql 的命令行历史打印到*`文件名`*.如果*`文件名`*省略时,历史记录将写入标准输出(如果合适,使用寻呼机)。如果 psql 是在没有 Readline 支持的情况下构建的,则此命令不可用。 `\放 [ *`姓名`* [ *`价值`* [ ... ] ] ]` 设置 psql 变量*`姓名`*到*`价值`*,或者如果给出了多个值,则将它们串联起来。如果只给出一个参数,则变量设置为空字符串值。要取消设置变量,请使用`\取消设置`命令。 `\放`不带任何参数显示所有当前设置的 psql 变量的名称和值。 有效的变量名称可以包含字母、数字和下划线。看[变量](app-psql.html#APP-PSQL-VARIABLES)详情如下。变量名区分大小写。 某些变量是特殊的,因为它们控制 psql 的行为或自动设置以反映连接状态。这些变量记录在[变量](app-psql.html#APP-PSQL-VARIABLES), 以下。 ### 笔记 此命令与 SQL 命令无关[`放`](sql-set.html). `\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行为的变量都不能取消设置;相反,一个`\解除`命令被解释为将它们设置为默认值。看见[变量](app-psql.html#APP-PSQL-VARIABLES)在下面 `\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节](protocol-flow.html#PROTOCOL-FLOW-MULTI-STATEMENT)有关服务器如何处理多查询字符串的更多详细信息。)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节](functions-matching.html#FUNCTIONS-POSIX-REGEXP),除了`.`如上所述,它被用作分隔符,`*`它被翻译成正则表达式符号`.*`, `?`翻译成`.`和`$`这是字面上的匹配。您可以在需要时通过编写`?`对于`.`, `(*`R`*+|)`对于`*`R`**`或`(*`R`*|)`对于`*`R`*?`. `$`不需要作为正则表达式字符,因为模式必须匹配全名,这与正则表达式的通常解释不同(换句话说,`$`将自动附加到模式中)。写`*`在开始和/或结束时,如果您不希望模式被锚定。请注意,在双引号中,所有正则表达式特殊字符都会失去其特殊含义,并按字面意思进行匹配。此外,正则表达式特殊字符在运算符名称模式(即`\做`). ### 高级功能 #### 变量 psql提供了类似于普通Unix命令shell的变量替换功能。变量只是名称/值对,其中的值可以是任何长度的任何字符串。名称必须由字母(包括非拉丁字母)、数字和下划线组成。 要设置变量,请使用psql meta命令`\设定`例如 ``` testdb=> \set foo bar ``` 设置变量`福`不折不扣`酒吧`.要检索变量的内容,请在名称前加冒号,例如: ``` testdb=> \echo :foo bar ``` 这适用于常规SQL命令和元命令;这里有更多细节[SQL插值](app-psql.html#APP-PSQL-INTERPOLATION)在下面 如果你打电话`\设定`如果没有第二个参数,变量将被设置为空字符串值。要取消设置(即删除)变量,请使用以下命令`\解除`.要显示所有变量的值,请调用`\设定`没有任何争论。 ### 笔记 的论点`\设定`受与其他命令相同的替换规则约束。因此,您可以构建有趣的引用,例如`\布景: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问题的提示应该是什么样子。看见[激励](app-psql.html#APP-PSQL-PROMPTING)在下面 `轻声的` 将此变量设置为`在…上`相当于命令行选项`-q`.它在交互模式下可能不太有用。 `行数` 上次SQL查询返回或影响的行数,如果查询失败或未报告行数,则为0. `服务器\u版本\u名称`\ `服务器版本号` 例如,以字符串形式显示服务器的版本号`9.6.2`, `10.1`或`11β1`,例如数字形式`90602`或`100001`。每次连接到数据库(包括程序启动)时都会设置这些设置,但可以更改或取消设置。 `显示上下文` 此变量可以设置为`从不`, `错误`或`总是`控制是否`上下文`字段显示在来自服务器的消息中。默认值是`错误`(这意味着上下文将显示在错误消息中,但不会显示在通知或警告消息中)。此设置在以下情况下无效:`冗长`即将`简短生硬的`或`sqlstate`(另见`\错误冗长`,当您想要获得刚刚得到的错误的详细版本时使用。) `单线` 将此变量设置为`在…上`相当于命令行选项`-S`. `单步` 将此变量设置为`在…上`相当于命令行选项`-s`. `SQLSTATE` 错误代码(请参阅[附录A](errcodes-appendix.html))与上一个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 变量的值*`姓名`*.看[变量](app-psql.html#APP-PSQL-VARIABLES),以上,详情。 ```%``*```命令\`\*\``` 的输出*`命令`*,类似于普通的“反引号”替换。 `%[`...`%]` 提示可以包含终端控制字符,例如,更改提示文本的颜色、背景或样式,或更改终端窗口的标题。为了使 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节](libpq-envars.html)). `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节](libpq-envars.html))。 ## 文件 `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 ```