On this page
Note
psql
psql — PostgreSQL 交互式终端
Synopsis
psql
[ option
...] [ dbname
[ username
]]
Description
psql 是 PostgreSQL 的基于终端的前端。它使您能够以交互方式键入查询,将其发布到 PostgreSQL,并查看查询结果。或者,Importing 可以来自文件,也可以来自命令行参数。另外,psql 提供了许多元命令和各种类似于 shell 的功能,以帮助编写脚本和自动化各种任务。
Options
-a
--echo-all
- 读取时将所有非空 Importing 行打印到标准输出。 (这不适用于以交互方式读取的行.)这等效于将变量
ECHO
设置为all
。
- 读取时将所有非空 Importing 行打印到标准输出。 (这不适用于以交互方式读取的行.)这等效于将变量
-A
--no-align
- 切换到不对齐输出模式。 (否则将默认输出模式对齐.)这等效于
\pset format unaligned
。
- 切换到不对齐输出模式。 (否则将默认输出模式对齐.)这等效于
-b
--echo-errors
- 将失败的 SQL 命令打印到标准错误输出。这等效于将变量
ECHO
设置为errors
。
- 将失败的 SQL 命令打印到标准错误输出。这等效于将变量
-c command
--command=command
- 指定 psql 将执行给定的命令字符串*
command
*。此选项可以重复使用,并可以与-f
选项以任何 Sequences 组合。当指定-c
或-f
时,psql 不会从标准 Importing 读取命令;而是在依次处理所有-c
和-f
选项后终止。
- 指定 psql 将执行给定的命令字符串*
command
*必须是服务器可以完全解析的命令字符串(即,不包含特定于 psql 的功能),也可以是单个反斜杠命令。因此,您不能在-c
选项中混合使用 SQL 和 psql 元命令。为此,可以使用重复的-c
选项或将字符串通过管道传递到 psql 中,例如:
psql -c '\x' -c 'SELECT * FROM foo;'
or
echo '\x \\ SELECT * FROM foo;' | psql
(\\
是分隔符元命令.)
传递给-c
的每个 SQL 命令字符串都作为单个查询发送到服务器。因此,即使字符串包含多个 SQL 命令,服务器也将其作为单个事务执行,除非字符串中包含显式的BEGIN
/COMMIT
命令将其分为多个事务。另外,psql 仅显示字符串中最后一个 SQL 命令的结果。这与从文件中读取相同的字符串或将其馈送到 psql 的标准 Importing 时的行为不同,因为 psql 会分别发送每个 SQL 命令。
由于这种行为,在单个-c
字符串中放置多个命令通常会产生意外结果。最好使用重复的-c
命令或将多个命令提供给 psql 的标准 Importing,例如使用上面说明的 echo 或通过 shell here-document,例如:
psql <<EOF
\x
SELECT * FROM foo;
EOF
-d dbname
--dbname=dbname
- 指定要连接的数据库的名称。这等效于在命令行上将*
dbname
*指定为第一个非选项参数。
- 指定要连接的数据库的名称。这等效于在命令行上将*
如果此参数包含=
符号或以有效的 URI 前缀(postgresql://
或postgres://
)开头,则将其视为* conninfo
*字符串。有关更多信息,请参见Section 33.1.1。
-e
--echo-queries
- 还将所有发送到服务器的 SQL 命令复制到标准输出。这等效于将变量
ECHO
设置为queries
。
- 还将所有发送到服务器的 SQL 命令复制到标准输出。这等效于将变量
-E
--echo-hidden
- 回显由
\d
和其他反斜杠命令生成的实际查询。您可以使用它来研究 psql 的内部操作。这等效于将变量ECHO_HIDDEN
设置为on
。
- 回显由
-f filename
--file=filename
- 从文件*
filename
*中读取命令,而不是从标准 Importing 中读取命令。此选项可以重复使用,并可以与-c
选项以任何 Sequences 组合。当指定-c
或-f
时,psql 不会从标准 Importing 读取命令;而是在依次处理所有-c
和-f
选项后终止。除此之外,此选项在很大程度上等效于元命令\i
。
- 从文件*
如果* filename
*为-
(连字符),则将读取标准 Importing,直到 EOF 指示或\q
元命令为止。这可用于将交互式 Importing 与文件 Importing 进行穿插。但是请注意,在这种情况下不使用 Readline(就像已指定-n
一样)。
使用此选项与编写psql < filename
稍有不同。通常,两者都能达到您的期望,但是使用-f
可以启用一些不错的功能,例如带有行号的错误消息。使用此选项还可能会减少启动开销。另一方面,使用 shell 的 Importing 重定向的变体在理论上可以保证产生与您手工 Importing 的所有内容完全相同的输出。
-F separator
--field-separator=separator
- 使用*
separator
*作为未对齐输出的字段分隔符。这等效于\pset fieldsep
或\f
。
- 使用*
-h hostname
--host=hostname
- 指定运行服务器的计算机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。
-H
--html
- 打开 HTML 表格输出。这等效于
\pset format html
或\H
命令。
- 打开 HTML 表格输出。这等效于
-l
--list
- 列出所有可用的数据库,然后退出。其他非连接选项将被忽略。这类似于元命令
\list
。
- 列出所有可用的数据库,然后退出。其他非连接选项将被忽略。这类似于元命令
使用此选项时,除非在命令行上命名其他数据库(选项-d
或非选项参数,可能通过服务条目,而不是环境变量),否则 psql 将连接到数据库postgres
。
-L filename
--log-file=filename
- 除正常输出目标外,还将所有查询输出写入文件*
filename
*。
- 除正常输出目标外,还将所有查询输出写入文件*
-n
--no-readline
- 不要将 Readline 用于行编辑,也不要使用命令历史记录。剪切和粘贴时,这对于关闭选项卡扩展很有用。
-o filename
--output=filename
- 将所有查询输出放入文件*
filename
*中。这等效于命令\o
。
- 将所有查询输出放入文件*
-p port
--port=port
- 指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件 extensions。默认为
PGPORT
环境变量的值,或者,如果未设置,则默认为编译时指定的端口,通常为 5432.
- 指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件 extensions。默认为
-P assignment
--pset=assignment
- 以
\pset
的样式指定打印选项。请注意,这里必须用等号(而不是空格)分隔名称和值。例如,要将输出格式设置为 LaTeX,可以编写-P format=latex
。
- 以
-q
--quiet
- 指定 psql 应该安静地工作。默认情况下,它打印欢迎消息和各种信息输出。如果使用此选项,则不会发生任何情况。这对
-c
选项很有用。这等效于将变量QUIET
设置为on
。
- 指定 psql 应该安静地工作。默认情况下,它打印欢迎消息和各种信息输出。如果使用此选项,则不会发生任何情况。这对
-R separator
--record-separator=separator
- 使用*
separator
*作为未对齐输出的记录分隔符。这等效于\pset recordsep
。
- 使用*
-s
--single-step
- 以单步模式运行。这意味着在将每个命令发送到服务器之前都会提示用户,并且还可以选择取消执行。使用它来调试脚本。
-S
--single-line
- 在单行模式下运行,其中换行符终止 SQL 命令,就像分号一样。
Note
坚持使用此模式的人可以使用,但不一定鼓励您使用它。特别是,如果您在一行上混合使用 SQL 和元命令,则对于经验不足的用户,执行 Sequences 可能并不总是很清楚。
-t
--tuples-only
- 关闭列名称和结果行计数页脚等的打印。这等效于
\t
或\pset tuples_only
。
- 关闭列名称和结果行计数页脚等的打印。这等效于
-T table_options
--table-attr=table_options
- 指定要放置在 HTML
table
标记内的选项。有关详情,请参见\pset tableattr
。
- 指定要放置在 HTML
-U username
--username=username
- 以用户*
username
*的身份(而不是默认用户)连接到数据库。 (当然,您必须具有这样做的权限.)
- 以用户*
-v assignment
--set=assignment
--variable=assignment
- 执行变量分配,例如
\set
元命令。请注意,必须在命令行上用等号分隔名称和值(如果有)。要取消设置变量,请取消等号。要将变量设置为空值,请使用等号,但不要使用该值。这些分配是在命令行处理期间完成的,因此反映连接状态的变量将在以后被覆盖。
- 执行变量分配,例如
-V
--version
- 打印 psql 版本并退出。
-w
--no-password
- 切勿发出密码提示。如果服务器要求密码验证,而其他方式(例如
.pgpass
文件)无法使用密码,则连接尝试将失败。该选项在没有用户 Importing 密码的批处理作业和脚本中很有用。
- 切勿发出密码提示。如果服务器要求密码验证,而其他方式(例如
请注意,此选项将在整个会话中保持设置状态,因此会影响元命令\connect
的使用以及初始连接尝试。
-W
--password
- 强制 psql 在连接数据库之前提示 Importing 密码。
此选项从不是必需的,因为如果服务器要求密码验证,则 psql 将自动提示 Importing 密码。但是,psql 会浪费连接尝试,以便发现服务器需要密码。在某些情况下,值得 Importing-W
以避免额外的连接尝试。
请注意,此选项将在整个会话中保持设置状态,因此会影响元命令\connect
的使用以及初始连接尝试。
-x
--expanded
- 打开扩展的表格格式设置模式。这等效于
\x
或\pset expanded
。
- 打开扩展的表格格式设置模式。这等效于
-X,
--no-psqlrc
- 不要读取启动文件(系统范围的
psqlrc
文件或用户的~/.psqlrc
文件)。
- 不要读取启动文件(系统范围的
-z
--field-separator-zero
- 将未对齐输出的字段分隔符设置为零字节。这等效于
\pset fieldsep_zero
。
- 将未对齐输出的字段分隔符设置为零字节。这等效于
-0
--record-separator-zero
- 将未对齐输出的记录分隔符设置为零字节。这对于例如与
xargs -0
的接口很有用。这等效于\pset recordsep_zero
。
- 将未对齐输出的记录分隔符设置为零字节。这对于例如与
-1
--single-transaction
- 此选项只能与一个或多个
-c
和/或-f
选项结合使用。它使 psql 在第一个这样的选项之前发出BEGIN
命令,在最后一个选项之后发出COMMIT
命令,从而将所有命令包装到单个事务中。这样可以确保所有命令都成功完成,或者不应用任何更改。
- 此选项只能与一个或多个
如果命令本身包含BEGIN
,COMMIT
或ROLLBACK
,则此选项将不会产生所需的效果。另外,如果不能在事务块内执行单个命令,则指定此选项将导致整个事务失败。
-?
--help[=topic]
- 显示有关 psql 的帮助并退出。可选的*
topic
*参数(默认为options
)用于选择 psql 的哪一部分:commands
描述 psql 的反斜杠命令;options
描述了可以传递给 psql 的命令行选项;和variables
显示有关 psql 配置变量的帮助。
- 显示有关 psql 的帮助并退出。可选的*
Exit Status
如果 psql 正常完成,它将返回 0 到 Shell;如果发生自身的致命错误(例如,内存不足,找不到文件),则返回 1;如果与服务器的连接断开并且会话不是交互式的,则返回 2;脚本中发生错误,并设置了变量ON_ERROR_STOP
。
Usage
连接到数据库
psql 是常规的 PostgreSQLClient 端应用程序。为了连接到数据库,您需要知道目标数据库的名称,服务器的主机名和端口号以及要用作连接的用户名。可以通过命令行选项告诉 psql 这些参数,分别是-d
,-h
,-p
和-U
。如果找到的参数不属于任何选项,它将被解释为数据库名称(或用户名,如果已经提供了数据库名称)。并非所有这些选项都是必需的。有一些有用的默认值。如果省略主机名,则 psql 将通过 Unix 域套接字连接到 localhost 上的服务器,或者通过 TCP/IP 连接到不具有 Unix 域套接字的计算机上的localhost
。默认端口号在编译时确定。由于数据库服务器使用相同的缺省值,因此在大多数情况下,您不必指定端口。默认用户名是您的 os 用户名,默认数据库名也是。请注意,您不能仅以任何用户名连接到任何数据库。您的数据库 Management 员应已将您的访问权限告知您。
当默认值不太合适时,可以通过将环境变量PGDATABASE
,PGHOST
,PGPORT
和/或PGUSER
设置为适当的值来节省键入时间。 (有关其他环境变量,请参见Section 33.14。)拥有~/.pgpass
文件也很方便,以避免经常需要 Importing 密码。有关更多信息,请参见Section 33.15。
指定连接参数的另一种方法是使用* conninfo
*字符串或 URI,而不是数据库名称。此机制使您可以非常广泛地控制连接。例如:
$ psql "service=myservice sslmode=require"
$ psql postgresql://dbmaster:5433/mydb?sslmode=require
这样,您还可以使用 LDAP 来进行连接参数查找,如Section 33.17中所述。有关所有可用连接选项的更多信息,请参见Section 33.1.2。
如果由于任何原因(例如,特权不足,目标主机上的服务器未运行等)而无法构建连接,则 psql 将返回错误并终止。
如果标准 Importing 和标准输出均为终端,则 psql 将 Client 端编码设置为“自动”,这将从区域设置(Unix 系统上的LC_CTYPE
环境变量)中检测相应的 Client 端编码。如果无法正常工作,则可以使用环境变量PGCLIENTENCODING
覆盖 Client 端编码。
ImportingSQL 命令
在正常操作中,psql 会提示您 Importing 当前与 psql 连接的数据库的名称,后跟字符串=>
。例如:
$ psql testdb
psql (10.13)
Type "help" for help.
testdb=>
在提示符下,用户可以键入 SQL 命令。通常,当到达命令终止分号时,会将 Importing 行发送到服务器。行尾不会终止命令。因此,为了清楚起见,命令可以分布在几行上。如果命令已正确发送和执行,则命令的结果将显示在屏幕上。
如果不受信任的用户可以访问未采用安全模式使用模式的数据库,请通过从search_path
删除可公开写模式来开始会话。可以将options=-csearch_path=
添加到连接字符串中,或在其他 SQL 命令之前发出SELECT pg_catalog.set_config('search_path', '', false)
。此注意事项并非特定于 psql;它适用于执行任意 SQL 命令的每个接口。
每当执行命令时,psql 还将轮询LISTEN和NOTIFY生成的异步通知事件。
将 C 样式的块 Comments 传递到服务器进行处理和除去时,psql 除去 SQL 标准 Comments。
Meta-Commands
在 psql 中 Importing 的任何以引号反斜杠开头的内容都是 psql 元命令,该命令由 psql 本身处理。这些命令使 psql 对 Management 或脚本化更加有用。元命令通常称为斜杠或反斜杠命令。
psql 命令的格式为反斜杠,后跟命令动词,然后是任何参数。参数与命令动词彼此分隔,并由任意数量的空格字符分隔。
要在参数中包含空格,可以用单引号将其引起来。要在参数中包含单引号,请在单引号引起来的文本中写两个单引号。此外,单引号中包含的所有内容都可以用 C 代替\n
(换行),\t
(制表符),\b
(退格键),\r
(回车符),\f
(换页),\
* digits
*(八进制),和\x
* digits
*(十六进制)。单引号文本中任何其他字符前面的反斜杠都会引用该单个字符,无论它是什么。
如果参数中出现未加引号的冒号(:
)后跟 psql 变量名,则将其替换为变量的值,如SQL Interpolation中所述。此处描述的:'variable_name'
和:"variable_name"
形式也适用。
在参数内,用反引号(```)引起来的文本将作为传递给 shell 的命令行使用。命令的输出(删除了所有尾随的换行符)将替换反引号引起的文本。在反引号内的文本内,不进行特殊的引号或其他处理,除了在:variable_name
的出现(其中* variable_name
*是 psql 变量名称)替换为变量的值。同样,:'variable_name'
的外观将替换为适当引用以成为单个 shell 命令参数的变量的值。 (除非您非常确定变量中有什么,否则后一种形式几乎总是可取的.)由于不能在所有平台上安全地引用回车符和换行符,因此:'variable_name'
表单会显示错误消息,并且不能替代变量值中出现此类字符时的值。
一些命令将 SQL 标识符(例如表名)作为参数。这些参数遵循 SQL 的语法规则:不带引号的字母被强制小写,而双引号("
)保护字母不进行大小写转换,并允许将空格合并到标识符中。在双引号中,成对的双引号会在结果名称中减少为单双引号。例如,FOO"BAR"BAZ
被解释为fooBARbaz
,而"A weird"" name"
成为A weird" name
。
对参数的解析在该行的结尾处停止,或者在找到另一个未引用的反斜杠时停止。无引号的反斜杠被视为新元命令的开始。特殊序列\\
(两个反斜杠)标记参数的结尾,并 continue 解析 SQL 命令(如果有)。这样,SQL 和 psql 命令可以自由地混合在一行上。但是无论如何,元命令的参数不能 continue 超出行尾。
许多元命令作用于当前查询缓冲区。这只是一个缓冲区,用于保存已键入但尚未发送到服务器以执行的任何 SQL 命令文本。这将包括先前的 Importing 行以及在同一行上的 meta 命令之前出现的所有文本。
定义了以下元命令:
\a
- 如果当前表的输出格式未对齐,则将其切换为对齐。如果未对齐,则将其设置为未对齐。保留此命令是为了向后兼容。有关更一般的解决方案,请参见
\pset
。
- 如果当前表的输出格式未对齐,则将其切换为对齐。如果未对齐,则将其设置为未对齐。保留此命令是为了向后兼容。有关更一般的解决方案,请参见
\c
或\connect [ -reuse-previous=on|off ] [ dbname [ username ] [ host ] [ port ] | conninfo ]
- 构建与 PostgreSQL 服务器的新连接。可以使用位置语法或使用Section 33.1.1中详细说明的*
conninfo
*连接字符串来指定要使用的连接参数。
- 构建与 PostgreSQL 服务器的新连接。可以使用位置语法或使用Section 33.1.1中详细说明的*
如果该命令省略了数据库名称,用户,主机或端口,则新连接可以重用先前 Connecting 的值。默认情况下,除非处理* conninfo
字符串,否则将重用先前连接的值。传递第一个参数-reuse-previous=on
或-reuse-previous=off
会覆盖该默认值。当命令既未指定也不重用特定参数时,将使用 libpq 缺省值。将 dbname
, username
, host
或 port
*指定为-
等效于忽略该参数。
如果成功构建了新连接,则先前的连接将关闭。如果连接尝试失败(错误的用户名,访问被拒绝等),则仅当 psql 处于交互模式时才保留先前的连接。执行非交互式脚本时,处理将立即停止并显示错误。选择此区别的目的是一方面为用户提供了避免 Importing 错误的便利,另一方面又选择了一种安全机制,确保脚本不会意外地作用于错误的数据库。
Examples:
=> \c mydb myuser host.dom 6432
=> \c service=foo
=> \c "host=localhost port=5432 dbname=mydb connect_timeout=10 sslmode=disable"
=> \c postgresql://tom@localhost/mydb?application_name=myapp
\C [ title ]
- 设置作为查询结果打印的任何表的标题,或取消设置任何此类标题。此命令等效于
\pset title title
。 (此命令的名称源自“ caption”,因为它以前仅用于设置 HTML 表中的标题.)
- 设置作为查询结果打印的任何表的标题,或取消设置任何此类标题。此命令等效于
\cd [ directory ]
- 将当前工作目录更改为*
directory
*。不带参数的情况下,更改为当前用户的主目录。
- 将当前工作目录更改为*
Tip
要打印当前的工作目录,请使用\! pwd
。
\conninfo
- 输出有关当前数据库连接的信息。
\copy { table [ ( column_list ) ] | ( query ) } { from | to } { 'filename' | program 'command' | stdin | stdout | pstdin | pstdout } [ [ with ] ( option [, ...] ) ]
- 执行前端(Client 端)副本。这是运行 SQL COPY命令的操作,但是 psql 读取或写入文件并在服务器和本地文件系统之间路由数据,而不是由服务器读取或写入指定的文件。这意味着文件可访问性和特权是本地用户(而不是服务器)的文件可访问性和特权,并且不需要 SQL 超级用户特权。
当指定program
时,* command
*由 psql 执行,并且从command
传递到 command
的数据在服务器和 Client 端之间路由。同样,执行特权是本地用户的特权,而不是服务器的特权,并且不需要 SQL 超级用户特权。
对于\copy ... from stdin
,从发出该命令的同一源读取数据行,一直持续到读取\.
或流到达 EOF 为止。此选项对于在 SQL 脚本文件中内联填充表很有用。对于\copy ... to stdout
,输出将发送到与 psql 命令输出相同的位置,并且不会打印COPY count
命令状态(因为它可能与数据行混淆)。要读取/写入 psql 的标准 Importing 或输出而不管当前命令源或\o
选项如何,请写入from pstdin
或to pstdout
。
该命令的语法与 SQL COPY命令的语法相似。数据源/目标以外的所有其他选项均已为COPY指定。因此,特殊的解析规则适用于\copy
元命令。与大多数其他元命令不同,该行的其余部分始终被视为\copy
的参数,并且在参数中既不执行变量插值也不执行反引号扩展。
Tip
获得与\copy ... to
相同的结果的另一种方法是使用 SQL COPY ... TO STDOUT
命令并以\g filename
或\g |program
终止它。与\copy
不同,此方法允许命令跨越多行。同样,可以使用变量插值和反引号扩展。
Tip
这些操作的效率不如带有文件或程序数据源或目标的 SQL COPY
命令,因为所有数据都必须通过 Client 端/服务器连接传递。对于大量数据,SQL 命令可能更可取。
\copyright
- 显示 PostgreSQL 的版权和发行条款。
\crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ]
- 执行当前查询缓冲区(如
\g
),并在交叉表网格中显示结果。查询必须至少返回三列。 *colV
标识的输出列成为垂直标题,而colH
*标识的输出列成为水平标题。 *colD
*标识要在网格内显示的输出列。 *sortcolH
*标识水平标题的可选排序列。
- 执行当前查询缓冲区(如
每个列规范可以是列号(从 1 开始)或列名。通常的 SQL 情况下的折叠和引用规则适用于列名。如果省略,* colV
作为第 1 列, colH
作为第 2 列. colH
必须与 colV
不同。如果未指定 colD
,那么查询结果中必须恰好有三列,并且既不是 colV
也不是 colH
的列将被视为 colD
*。
垂直标题显示在最左边的列中,包含在* colV
*列中找到的值,其 Sequences 与查询结果中的 Sequences 相同,但删除了重复项。
显示为第一行的水平标题包含在* colH
列中找到的值,并删除了重复项。默认情况下,它们的显示 Sequences 与查询结果中的 Sequences 相同。但是,如果给出了可选的 sortcolH
参数,它将标识一列其值必须为整数的列,并且 colH
中的值将出现在水平标题中,并根据相应的 sortcolH
*值进行排序。
在交叉表网格内部,对于* colH
的每个不同值x
和 colV
的每个不同值y
,位于交点(x,y)
的单元格包含查询结果行中colD
列的值, colH
的值是x
, colV
*的值是y
。如果没有这样的行,则该单元格为空。如果有多个这样的行,则会报告错误。
\d[S+] [ pattern ]
- 对于与*
pattern
*匹配的每个关系(表,视图,实例化视图,索引,序列或外部表)或复合类型,请显示所有列,它们的类型,表空间(如果不是默认值)以及任何特殊属性,例如NOT NULL
或默认值。还显示了相关的索引,约束,规则和触发器。对于外部表,还将显示关联的外部服务器。 (“匹配模式”在下面的Patterns中定义。)
- 对于与*
对于某些类型的关系,\d
显示每列的其他信息:序列的列值,索引的索引表达式以及外部表的外部数据包装器选项。
命令形式\d+
相同,只是显示了更多信息:显示了与表的列关联的所有 Comments,以及表中是否存在 OID,如果关系是视图,则为视图定义,这是非默认值replica identity设置。
默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。
Note
如果使用\d
而不带* pattern
*参数,则它等效于\dtvmsE
,它将显示所有可见表,视图,实例化视图,序列和外部表的列表。这纯粹是一种方便的措施。
\da[S] [ pattern ]
- 列出聚合函数,以及它们的返回类型和操作的数据类型。如果指定*
pattern
*,则仅显示名称与模式匹配的聚合。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。
- 列出聚合函数,以及它们的返回类型和操作的数据类型。如果指定*
\dA[+] [ pattern ]
- 列出访问方法。如果指定*
pattern
*,则仅显示名称与模式匹配的访问方法。如果在命令名称后附加了+
,则会列出每个访问方法及其关联的处理函数和描述。
- 列出访问方法。如果指定*
\db[+] [ pattern ]
- 列出表空间。如果指定*
pattern
*,则仅显示名称与模式匹配的表空间。如果在命令名称后附加了+
,则会列出每个表空间及其相关的选项,磁盘大小,权限和描述。
- 列出表空间。如果指定*
\dc[S+] [ pattern ]
- 列出字符集编码之间的转换。如果指定*
pattern
*,则仅列出名称与模式匹配的转换。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。如果在命令名称后附加+
,则会列出每个对象及其相关描述。
- 列出字符集编码之间的转换。如果指定*
\dC[+] [ pattern ]
- 列出类型转换。如果指定*
pattern
*,则仅列出其源或目标类型与模式匹配的转换。如果在命令名称后附加了+
,则会列出每个对象及其相关说明。
- 列出类型转换。如果指定*
\dd[S] [ pattern ]
- 显示类型为
constraint
,operator class
,operator family
,rule
和trigger
的对象的描述。可以通过相应的反斜杠命令针对这些对象类型查看所有其他 Comments。
- 显示类型为
\dd
显示与* pattern
*匹配的对象的描述,或者如果没有给出参数,则显示适当类型的可见对象的描述。但无论哪种情况,仅列出具有描述的对象。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。
可以使用COMMENT SQL 命令创建对象的描述。
\dD[S+] [ pattern ]
- 列出域。如果指定*
pattern
*,则仅显示名称与模式匹配的域。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。如果在命令名称后附加+
,则会列出每个对象及其关联的权限和描述。
- 列出域。如果指定*
\ddp [ pattern ]
- 列出默认的访问权限设置。将为每个角色(和模式,如果适用)显示一个条目,其默认特权设置已从内置默认值更改。如果指定*
pattern
*,则仅列出角色名称或模式名称与模式匹配的条目。
- 列出默认的访问权限设置。将为每个角色(和模式,如果适用)显示一个条目,其默认特权设置已从内置默认值更改。如果指定*
更改默认特权命令用于设置默认访问权限。特权显示的含义在GRANT下解释。
\dE[S+] [ pattern ]
\di[S+] [ pattern ]
\dm[S+] [ pattern ]
\ds[S+] [ pattern ]
\dt[S+] [ pattern ]
\dv[S+] [ pattern ]
- 在这组命令中,字母
E
,i
,m
,s
,t
和v
分别代表外部表,索引,实例化视图,序列,表和视图。您可以以任何 Sequences 指定任何或所有这些字母,以获得这些类型的对象的列表。例如,\dit
列出索引和表。如果将+
附加到命令名称,则会列出每个对象及其在磁盘上的物理大小及其相关的描述(如果有)。如果指定*pattern
*,则仅列出名称与模式匹配的对象。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。
- 在这组命令中,字母
\des[+] [ pattern ]
- 列出外部服务器(助记符:“外部服务器”)。如果指定*
pattern
*,则仅列出名称与模式匹配的那些服务器。如果使用格式\des+
,则会显示每个服务器的完整描述,包括服务器的 ACL,类型,版本,选项和描述。
- 列出外部服务器(助记符:“外部服务器”)。如果指定*
\det[+] [ pattern ]
- 列出外部表(助记符:“外部表”)。如果指定*
pattern
*,则仅列出其表名或模式名与模式匹配的条目。如果使用格式\det+
,则还将显示通用选项和外部表描述。
- 列出外部表(助记符:“外部表”)。如果指定*
\deu[+] [ pattern ]
- 列出用户 Map(助记符:“外部用户”)。如果指定*
pattern
*,则仅列出其用户名与模式匹配的那些 Map。如果使用格式\deu+
,则会显示有关每个 Map 的其他信息。
- 列出用户 Map(助记符:“外部用户”)。如果指定*
Caution
\deu+
可能还会显示远程用户的用户名和密码,因此请注意不要泄露它们。
\dew[+] [ pattern ]
- 列出外部数据包装器(助记符:“外部包装器”)。如果指定*
pattern
*,则仅列出名称与模式匹配的外部数据包装器。如果使用格式\dew+
,则还将显示 ACL,选项和外部数据包装器的描述。
- 列出外部数据包装器(助记符:“外部包装器”)。如果指定*
\df[antwS+] [ pattern ]
- 列出函数及其结果数据类型,自变量数据类型和函数类型,这些函数分为“ agg”(聚合),“ normal”,“ trigger”或“ window”。要仅显示特定类型的功能,请在命令中添加相应的字母
a
,n
,t
或w
。如果指定*pattern
*,则仅显示名称与模式匹配的功能。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。如果使用格式\df+
,则会显示有关每个功能的其他信息,包括易变性,并行安全性,所有者,安全性分类,访问权限,语言,源代码和描述。
- 列出函数及其结果数据类型,自变量数据类型和函数类型,这些函数分为“ agg”(聚合),“ normal”,“ trigger”或“ window”。要仅显示特定类型的功能,请在命令中添加相应的字母
Tip
要查找带有参数或返回特定数据类型值的函数,请使用寻呼机的搜索功能滚动\df
输出。
\dF[+] [ pattern ]
- 列出文本搜索配置。如果指定*
pattern
*,则仅显示名称与模式匹配的配置。如果使用格式\dF+
,则会显示每个配置的完整描述,包括基础文本搜索解析器和每种解析器令牌类型的字典列表。
- 列出文本搜索配置。如果指定*
\dFd[+] [ pattern ]
- 列出文本搜索词典。如果指定*
pattern
*,则仅显示名称与模式匹配的字典。如果使用格式\dFd+
,则会显示有关每个所选字典的附加信息,包括基础文本搜索模板和选项值。
- 列出文本搜索词典。如果指定*
\dFp[+] [ pattern ]
- 列出文本搜索解析器。如果指定*
pattern
*,则仅显示名称与模式匹配的解析器。如果使用\dFp+
形式,则会显示每个解析器的完整描述,包括基础功能和已识别令牌类型的列表。
- 列出文本搜索解析器。如果指定*
\dFt[+] [ pattern ]
- 列出文本搜索模板。如果指定*
pattern
*,则仅显示名称与模式匹配的模板。如果使用格式\dFt+
,则会显示有关每个模板的其他信息,包括基础函数名称。
- 列出文本搜索模板。如果指定*
\dg[S+] [ pattern ]
- 列出数据库角色。 (由于将“用户”和“组”的概念统一为“角色”,因此该命令现在等效于
\du
.)默认情况下,仅显示用户创建的角色;提供S
修饰符以包括系统角色。如果指定*pattern
*,则仅列出名称与模式匹配的那些角色。如果使用格式\dg+
,则会显示有关每个角色的其他信息;否则,将显示其他信息。目前,这会为每个角色添加 Comment。
- 列出数据库角色。 (由于将“用户”和“组”的概念统一为“角色”,因此该命令现在等效于
\dl
- 这是
\lo_list
的别名,该别名显示大对象的列表。
- 这是
\dL[S+] [ pattern ]
- 列出程序语言。如果指定*
pattern
*,则仅列出名称与模式匹配的语言。默认情况下,仅显示用户创建的语言。提供S
修饰符以包括系统对象。如果在命令名后附加+
,则会列出每种语言及其调用处理程序,验证程序,访问权限以及是否为系统对象。
- 列出程序语言。如果指定*
\dn[S+] [ pattern ]
- 列出架构(名称空间)。如果指定*
pattern
*,则仅列出名称与模式匹配的模式。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。如果在命令名后附加+
,则会列出每个对象及其关联的权限和描述(如果有)。
- 列出架构(名称空间)。如果指定*
\do[S+] [ pattern ]
- 列出运算符及其操作数和结果类型。如果指定*
pattern
*,则仅列出名称与模式匹配的运算符。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。如果在命令名后附加+
,则将显示有关每个运算符的其他信息,当前仅是基础函数的名称。
- 列出运算符及其操作数和结果类型。如果指定*
\dO[S+] [ pattern ]
- 列出排序规则。如果指定*
pattern
*,则仅列出名称与模式匹配的排序规则。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。如果在命令名后附加+
,则会列出每个排序规则及其关联的描述(如果有)。请注意,仅显示可与当前数据库的编码一起使用的归类,因此在同一安装的不同数据库中,结果可能会有所不同。
- 列出排序规则。如果指定*
\dp [ pattern ]
- 列出具有相关访问权限的表,视图和序列。如果指定*
pattern
*,则仅列出名称与模式匹配的表,视图和序列。
- 列出具有相关访问权限的表,视图和序列。如果指定*
GRANT和REVOKE命令用于设置访问权限。 GRANT下解释特权显示的含义。
\drds [ role-pattern [ database-pattern ] ]
- 列出定义的配置设置。这些设置可以是角色特定的,数据库特定的或两者。 *
role-pattern
和database-pattern
*用于分别选择要列出的特定角色和数据库。如果省略,或者指定了*
,则列出所有设置,包括分别不是角色特定或数据库特定的设置。
- 列出定义的配置设置。这些设置可以是角色特定的,数据库特定的或两者。 *
ALTER ROLE和ALTER DATABASE命令用于定义每个角色和每个数据库的配置设置。
\dRp[+] [ pattern ]
- 列出复制出版物。如果指定*
pattern
*,则仅列出名称与模式匹配的那些出版物。如果在命令名后附加了+
,则还将显示与每个发布关联的表。
- 列出复制出版物。如果指定*
\dRs[+] [ pattern ]
- 列出复制订阅。如果指定*
pattern
*,则仅列出名称与模式匹配的那些订阅。如果在命令名称后附加了+
,则会显示订阅的其他属性。
- 列出复制订阅。如果指定*
\dT[S+] [ pattern ]
- 列出数据类型。如果指定*
pattern
*,则仅列出其名称与模式匹配的类型。如果将+
附加到命令名称中,则会列出每种类型及其内部名称和大小,如果是enum
类型则允许的值以及相关的权限。默认情况下,仅显示用户创建的对象。提供一个模式或S
修饰符以包含系统对象。
- 列出数据类型。如果指定*
\du[S+] [ pattern ]
- 列出数据库角色。 (由于将“用户”和“组”的概念统一为“角色”,因此该命令现在等效于
\dg
.)默认情况下,仅显示用户创建的角色;提供S
修饰符以包括系统角色。如果指定*pattern
*,则仅列出名称与模式匹配的那些角色。如果使用格式\du+
,则会显示有关每个角色的其他信息;否则,将显示其他信息。目前,这会为每个角色添加 Comment。
- 列出数据库角色。 (由于将“用户”和“组”的概念统一为“角色”,因此该命令现在等效于
\dx[+] [ pattern ]
- 列出已安装的扩展。如果指定*
pattern
*,则仅列出名称与模式匹配的 extensions。如果使用格式\dx+
,则会列出属于每个匹配 extensions 的所有对象。
- 列出已安装的扩展。如果指定*
\dy[+] [ pattern ]
- 列出事件触发器。如果指定*
pattern
*,则仅列出名称与模式匹配的那些事件触发器。如果在命令名称后附加了+
,则会列出每个对象及其相关说明。
- 列出事件触发器。如果指定*
\e
或\edit
[ filename ] [ line_number ]
- 如果指定*
filename
,则文件被编辑;编辑器退出后,文件内容将复制到当前查询缓冲区中。如果未指定filename
*,则将当前查询缓冲区复制到一个临时文件,然后以相同的方式对其进行编辑。或者,如果当前查询缓冲区为空,则将最近执行的查询复制到临时文件中,并以相同的方式进行编辑。
- 如果指定*
然后根据 psql 的常规规则重新解析查询缓冲区的新内容,将整个缓冲区视为一行。任何完整的查询都会立即执行;也就是说,如果查询缓冲区包含分号或以分号结尾,则执行该操作。剩下的将在查询缓冲区中 await;Importing 分号或\g
发送,或\r
通过清除查询缓冲区将其取消。将缓冲区视为单行主要影响元命令:元命令之后缓冲区中的内容将被视为元命令的参数,即使它跨越多行也是如此。 (因此,您不能以这种方式制作使用元命令的脚本.为此请使用\i
.)
如果指定了行号,则 psql 将光标定位在文件或查询缓冲区的指定行上。请注意,如果给出单个全数字参数,则 psql 假定它是行号,而不是文件名。
Tip
有关如何配置和自定义编辑器的信息,请参见Environment。
\echo text [ ... ]
- 将参数输出到标准输出,中间用一个空格分隔,后跟换行符。这对于在脚本输出中散布信息很有用。例如:
=> \echo `date`
Tue Oct 26 21:40:57 CEST 1999
如果第一个参数是未加引号的-n
,则不写结尾的换行符。
Tip
如果使用\o
命令重定向查询输出,则可能希望使用\qecho
代替此命令。
\ef [ function_description [ line_number ] ]
- 该命令以
CREATE OR REPLACE FUNCTION
命令的形式获取并编辑命名函数的定义。编辑的方式与\edit
相同。编辑器退出后,更新的命令将在查询缓冲区中 await;Importing 分号或\g
发送,或\r
取消。
- 该命令以
目标函数可以仅通过名称指定,也可以通过名称和参数指定,例如foo(integer, text)
。如果有多个同名函数,则必须给出参数类型。
如果未指定功能,则会显示空白的CREATE FUNCTION
模板进行编辑。
如果指定了行号,则 psql 将光标定位在函数主体的指定行上。 (请注意,函数主体通常不在文件的第一行开始.)
与大多数其他元命令不同,该行的其余部分始终被视为\ef
的参数,并且在参数中既不执行变量插值也不执行反引号扩展。
Tip
有关如何配置和自定义编辑器的信息,请参见Environment。
\encoding [ encoding ]
- 设置 Client 端字符集编码。不带参数的此命令将显示当前编码。
\errverbose
- 以最大详细程度重复最近的服务器错误消息,就像将
VERBOSITY
设置为verbose
并将SHOW_CONTEXT
设置为always
一样。
- 以最大详细程度重复最近的服务器错误消息,就像将
\ev [ view_name [ line_number ] ]
- 该命令以
CREATE OR REPLACE VIEW
命令的形式获取并编辑命名视图的定义。编辑的方式与\edit
相同。编辑器退出后,更新的命令将在查询缓冲区中 await;Importing 分号或\g
发送,或\r
取消。
- 该命令以
如果未指定视图,则会显示空白的CREATE VIEW
模板进行编辑。
如果指定了行号,则 psql 将光标定位在视图定义的指定行上。
与大多数其他元命令不同,该行的其余部分始终被视为\ev
的参数,并且在参数中既不执行变量插值也不执行反引号扩展。
\f [ string ]
- 为未对齐的查询输出设置字段分隔符。默认值为竖线(
|
)。它等效于\pset fieldsep
。
- 为未对齐的查询输出设置字段分隔符。默认值为竖线(
\g [ filename ]
\g [ |command ]
- 将当前查询缓冲区发送到服务器以执行。如果提供了参数,则查询的输出将写入指定的文件或通过管道传递到给定的 shell 命令,而不是像往常一样显示它。仅当查询成功返回零个或多个 Tuples 时,才写入文件或命令,如果查询失败或是不返回数据的 SQL 命令,则不写入文件或命令。
如果当前查询缓冲区为空,则重新执行最近发送的查询。除了该行为外,不带参数的\g
本质上等效于分号。带参数的\g
是\o
命令的“一次性”替代。
如果参数以|
开头,则该行的其余全部为* command
*要执行,并且变量插值和反引号扩展均未执行。该行的其余部分仅按字面意义传递给 Shell。
\gexec
- 将当前查询缓冲区发送到服务器,然后将查询输出的每一行的每一列(如果有的话)都视为要执行的 SQL 语句。例如,要在
my_table
的每一列上创建索引:
- 将当前查询缓冲区发送到服务器,然后将查询输出的每一行的每一列(如果有的话)都视为要执行的 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
生成的查询将按返回行的 Sequences 执行,如果有多个列,则在每一行中从左到右执行。空字段将被忽略。生成的查询从字面上发送到服务器进行处理,因此它们既不能是 psql 元命令,也不能包含 psql 变量引用。如果任何单个查询失败,除非设置ON_ERROR_STOP
,否则其余查询将 continue 执行。每个查询的执行都经过ECHO
处理。 (使用\gexec
时,通常建议将ECHO
设置为all
或queries
.)查询日志记录,单步模式,计时和其他查询执行功能也适用于每个生成的查询。
如果当前查询缓冲区为空,则重新执行最近发送的查询。
\gset [ prefix ]
- 将当前查询缓冲区发送到服务器,并将查询的输出存储到 psql 变量中(请参见Variables)。要执行的查询必须恰好返回一行。该行的每一列都存储在一个单独的变量中,该变量与该列相同。例如:
=> SELECT 'hello' AS var1, 10 AS var2
-> \gset
=> \echo :var1 :var2
hello 10
如果指定* prefix
*,则该字符串将放在查询的列名之前,以创建要使用的变量名:
=> SELECT 'hello' AS var1, 10 AS var2
-> \gset result_
=> \echo :result_var1 :result_var2
hello 10
如果列结果为 NULL,则未设置而不是设置相应的变量。
如果查询失败或不返回一行,则不会更改任何变量。
如果当前查询缓冲区为空,则重新执行最近发送的查询。
\gx [ filename ]
\gx [ |command ]
\gx
等效于\g
,但是对此查询强制使用扩展的输出模式。参见\x
。
\h
或\help
[ command ]
- 提供有关指定 SQL 命令的语法帮助。如果未指定*
command
,则 psql 将列出所有可使用语法帮助的命令。如果command
*是星号(*
),则会显示所有 SQL 命令的语法帮助。
- 提供有关指定 SQL 命令的语法帮助。如果未指定*
与大多数其他元命令不同,该行的其余部分始终被视为\help
的参数,并且在参数中既不执行变量插值也不执行反引号扩展。
Note
为了简化键入,不必引用由几个单词组成的命令。因此,可以 Importing \help alter table
。
\H
或\html
- 打开 HTML 查询输出格式。如果 HTML 格式已打开,则将其切换回默认的对齐文本格式。此命令用于兼容性和方便性,但是有关设置其他输出选项的信息,请参见
\pset
。
- 打开 HTML 查询输出格式。如果 HTML 格式已打开,则将其切换回默认的对齐文本格式。此命令用于兼容性和方便性,但是有关设置其他输出选项的信息,请参见
\i
或\include
*filename
*- 从文件
filename
*中读取 Importing,并像在键盘上键入的那样执行它。
- 从文件
如果* filename
*为-
(连字符),则将读取标准 Importing,直到 EOF 指示或\q
元命令为止。这可用于将交互式 Importing 与文件 Importing 进行穿插。请注意,只有在最外层处于活动状态时,才会使用 Readline 行为。
Note
如果要在阅读时看到屏幕上的线条,必须将变量ECHO
设置为all
。
\if
expression
\elif
expression
\else
\endif
- 这组命令实现了可嵌套的条件块。条件块必须以
\if
开头和\endif
结束。在两者之间可以有任意数量的\elif
子句,可以选择在其后跟单个\else
子句。普通查询和其他类型的反斜杠命令可能会(并且通常会)出现在形成条件块的命令之间。
- 这组命令实现了可嵌套的条件块。条件块必须以
\if
和\elif
命令读取其参数,并将其评估为布尔表达式。如果表达式的结果为true
,则处理将 continue 正常进行;否则,处理将 continue 进行。否则,将跳过行,直到达到匹配的\elif
,\else
或\endif
。一旦\if
或\elif
测试成功,就不会求值同一块中后来的\elif
命令的自变量,而是将其视为 false。仅当没有成功匹配\if
或\elif
时,才处理\else
之后的行。
就像其他反斜杠命令参数一样,\if
或\elif
命令的* expression
*参数也要进行变量插值和反引号扩展。之后,将像打开/关闭选项变量的值一样对它进行评估。因此,有效值是true
,false
,1
,0
,on
,off
,yes
,no
之一的任何明确的不区分大小写的匹配。例如,t
,T
和tR
都将被视为true
。
不能正确评估为 true 或 false 的表达式将生成警告,并被视为 false。
正常情况下,将解析被跳过的行以标识查询和反斜杠命令,但是查询不会发送到服务器,并且将忽略条件语句(\if
,\elif
,\else
,\endif
)以外的反斜杠命令。仅检查条件命令的有效嵌套。跳过行中的变量引用不会扩展,也不执行反引号扩展。
给定条件块的所有反斜杠命令必须出现在同一源文件中。如果在关闭所有本地\if
-block 之前在主 Importing 文件或\include
-ed 文件上达到 EOF,则 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
*filename
*\ir
命令类似于\i
,但是以不同的方式解析相对文件名。在交互模式下执行时,两个命令的行为相同。但是,当从脚本中调用\ir
时,将相对于脚本所在目录而不是当前工作目录来解释文件名。
\l[+]
或\list[+] [ pattern ]
- 列出服务器中的数据库,并显示其名称,所有者,字符集编码和访问特权。如果指定*
pattern
*,则仅列出名称与模式匹配的数据库。如果在命令名称后附加+
,则还将显示数据库大小,默认表空间和描述。 (大小信息仅适用于当前用户可以连接到的数据库.)
- 列出服务器中的数据库,并显示其名称,所有者,字符集编码和访问特权。如果指定*
\lo_export loid filename
- 从数据库中读取 OID *
loid
的大对象,并将其写入filename
*。请注意,这与服务器功能lo_export
稍有不同,服务器功能lo_export
在数据库服务器运行所在的用户权限和服务器的文件系统上运行。
- 从数据库中读取 OID *
Tip
使用\lo_list
查找大对象的 OID。
\lo_import filename [ comment ]
- 将文件存储到 PostgreSQL 大对象中。 (可选)它将给定的 Comments 与对象相关联。例:
foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801
该响应指示大对象接收到对象 ID 152801,该对象 ID 将来可用于访问新创建的大对象。为了便于阅读,建议始终将人类可读的 Comments 与每个对象相关联。可以使用\lo_list
命令查看 OID 和 Comments。
请注意,此命令与服务器端lo_import
略有不同,因为它充当本地文件系统上的本地用户,而不是服务器的用户和文件系统。
\lo_list
- 显示当前存储在数据库中的所有 PostgreSQL 大对象的列表,以及为其提供的任何 Comments。
\lo_unlink loid
- 从数据库中删除 OID *
loid
*的大对象。
- 从数据库中删除 OID *
Tip
使用\lo_list
查找大对象的 OID。
\o
或\out [ filename ]
\o
或\out [ |command ]
- 安排将将来的查询结果保存到文件*
filename
或将将来的结果通过管道传送到 shell 命令command
*。如果未指定任何参数,则查询输出将重置为标准输出。
- 安排将将来的查询结果保存到文件*
如果参数以|
开头,则该行的其余全部为* command
*要执行,并且变量插值和反引号扩展均未执行。该行的其余部分仅按字面意义传递给 Shell。
“查询结果”包括从数据库服务器获得的所有表,命令响应和通知,以及查询数据库的各种反斜杠命令的输出(例如\d
);但不是错误消息。
Tip
要在查询结果之间插入文本输出,请使用\qecho
。
\p
或\print
- 将当前查询缓冲区打印到标准输出。如果当前查询缓冲区为空,则打印最近执行的查询。
\password [ username ]
- 更改指定用户(默认情况下为当前用户)的密码。此命令提示 Importing 新密码,对其进行加密,然后将其作为
ALTER ROLE
命令发送到服务器。这样可以确保新密码不会在命令历史记录,服务器日志或其他地方以明文形式出现。
- 更改指定用户(默认情况下为当前用户)的密码。此命令提示 Importing 新密码,对其进行加密,然后将其作为
\prompt [ text ] name
- 提示用户提供文本,该文本已分配给变量*
name
。可以指定一个可选的提示字符串text
*。 (对于多字提示,请用单引号将文本引起来.)
- 提示用户提供文本,该文本已分配给变量*
默认情况下,\prompt
使用终端进行 Importing 和输出。但是,如果使用了-f
命令行开关,则\prompt
使用标准 Importing 和标准输出。
\pset [ option [ value ] ]
- 此命令设置影响查询结果表输出的选项。 *
option
*表示要设置的选项。 *value
的语义因所选选项而异。对于某些选项,省略value
会导致该选项被切换或取消设置,如特定选项所述。如果未提及此类行为,则省略value
*只会导致显示当前设置。
- 此命令设置影响查询结果表输出的选项。 *
\pset
不带任何参数将显示所有打印选项的当前状态。
可调打印选项包括:
border
-
value
*必须是数字。通常,数字越高,表格将具有的边框和线条越多,但是细节取决于特定的格式。在 HTML 格式中,这将直接转换为border=...
属性。在大多数其他格式中,只有值 0(无边框),1(内部分隔线)和 2(表格框架)才有意义,而大于 2 的值将与border = 2
相同。latex
和latex-longtable
格式另外允许值 3 在数据行之间添加分隔线。
columns
- 设置
wrapped
格式的目标宽度,以及用于确定输出是否足够宽以要求寻呼机或在扩展自动模式下切换到垂直显示的宽度限制。零(默认值)导致目标宽度由环境变量COLUMNS
控制,如果未设置COLUMNS
则由检测到的屏幕宽度控制。另外,如果columns
为零,则wrapped
格式仅影响屏幕输出。如果columns
不为零,则文件和管道输出也将包装为该宽度。
- 设置
expanded
(或x
)- 如果指定*
value
,则必须为on
或off
,这将启用或禁用扩展模式,或auto
。如果省略value
*,该命令将在打开和关闭设置之间切换。启用扩展模式后,查询结果将显示在两列中,左列名称和右列数据。如果在正常的“水平”模式下数据无法显示在屏幕上,则此模式很有用。在自动设置中,只要查询输出多于一列并且比屏幕宽,就会使用扩展模式。否则,使用常规模式。自动设置仅在对齐和包装的格式中有效。在其他格式下,它始终表现为关闭扩展模式。
- 如果指定*
fieldsep
- 指定以未对齐的输出格式使用的字段分隔符。这样一来,便可以创建制表符或逗号分隔的输出,而其他程序可能更喜欢这种输出。要将选项卡设置为字段分隔符,请 Importing
\pset fieldsep '\t'
。默认的字段分隔符是'|'
(竖线)。
- 指定以未对齐的输出格式使用的字段分隔符。这样一来,便可以创建制表符或逗号分隔的输出,而其他程序可能更喜欢这种输出。要将选项卡设置为字段分隔符,请 Importing
fieldsep_zero
- 将字段分隔符设置为以未对齐的输出格式使用为零字节。
footer
- 如果指定*
value
,则必须为on
或off
,这将启用或禁用表尾的显示((n rows)
计数)。如果省略value
*,该命令将打开或关闭页脚显示。
- 如果指定*
format
- 将输出格式设置为
unaligned
,aligned
,wrapped
,html
,asciidoc
,latex
(使用tabular
),latex-longtable
或troff-ms
之一。允许使用唯一的缩写。
- 将输出格式设置为
-
unaligned
格式将一行的所有列写在一行上,并由当前活动的字段分隔符分隔。这对于创建可能打算由其他程序读取的输出(例如,制表符分隔或逗号分隔的格式)很有用。
aligned
格式是标准的,人类可读的,格式良好的文本输出;这是默认值。
wrapped
格式与aligned
类似,但是跨行包装宽数据值以使输出适合目标列宽。如columns
选项所述确定目标宽度。请注意,psql 不会尝试包装列标题标题。因此,如果列标题所需的总宽度超过目标,则wrapped
格式的行为与aligned
相同。
html
,asciidoc
,latex
,latex-longtable
和troff-ms
格式使用相应的标记语言列出了旨在包含在文档中的表格。它们不是完整的文件!在 HTML 中这可能不是必需的,但是在 LaTeX 中,您必须具有完整的文档包装器。 latex-longtable
还需要 LaTeX longtable
和booktabs
软件包。
linestyle
- 将边界线绘制样式设置为
ascii
,old-ascii
或unicode
之一。允许使用唯一的缩写。 (这意味着一个字母就足够了.)默认设置为ascii
。此选项仅影响aligned
和wrapped
输出格式。
- 将边界线绘制样式设置为
ascii
样式使用纯 ASCII 字符。数据中的换行符在右边距中使用+
符号显示。当wrapped
格式将数据从一行换行到下一行而没有换行符时,在第一行的右边距中显示一个点(.
),在下一行的左边距中再次显示一个点。
old-ascii
样式使用普通 ASCII 字符,并使用 PostgreSQL 8.4 及更早版本中使用的格式样式。使用:
符号代替左列分隔符来显示数据中的换行符。当数据从一行换到另一行而没有换行符时,使用;
符号代替左侧的列分隔符。
unicode
样式使用 Unicode 框画字符。数据中的换行符在右边距中使用回车符显示。当数据从一行换行到下一行而没有换行符时,在第一行的右边距中显示省略号,并在下一行的左边距中显示省略号。
当border
设置大于零时,linestyle
选项还确定绘制边框线的字符。纯 ASCII 字符在任何地方都可以使用,但是 Unicode 字符在可以识别它们的显示器上看起来更好。
null
- 设置要打印的字符串以代替空值。默认设置为不打印任何内容,这很容易被误认为是空字符串。例如,某人可能更喜欢
\pset null '(null)'
。
- 设置要打印的字符串以代替空值。默认设置为不打印任何内容,这很容易被误认为是空字符串。例如,某人可能更喜欢
numericlocale
- 如果指定了*
value
,则必须是on
或off
,这将启用或禁用显示特定于语言的字符以将小数点标记左侧的数字组分开。如果省略value
*,该命令将在常规和特定于区域的数字输出之间切换。
- 如果指定了*
pager
- 控制用于查询和 psql 帮助输出的寻呼机程序的使用。如果设置了环境变量
PAGER
,则将输出通过管道传递到指定的程序。否则,将使用依赖于平台的默认值(例如more
)。
- 控制用于查询和 psql 帮助输出的寻呼机程序的使用。如果设置了环境变量
当pager
选项为off
时,不使用寻呼程序。当pager
选项为on
时,将在适当的时候使用寻呼机,即当输出到终端并且不适合屏幕时。 pager
选项也可以设置为always
,这将使寻呼机用于所有终端输出,无论它是否适合屏幕显示。 \pset pager
不带* value
*可以打开和关闭寻呼机的使用。
pager_min_lines
- 如果
pager_min_lines
设置为大于页面高度的数字,则除非至少要显示这么多的输出行,否则不会调用该寻呼机程序。默认设置为 0.
- 如果
recordsep
- 指定以未对齐的输出格式使用的记录(行)分隔符。默认值为换行符。
recordsep_zero
- 将记录分隔符设置为以未对齐的输出格式使用为零字节。
tableattr
(或T
)- 以 HTML 格式,它指定要放置在
table
标记内的属性。例如,可以是cellpadding
或bgcolor
。请注意,您可能不想在此处指定border
,因为\pset border
已经解决了这个问题。如果未给出*value
*,则表属性未设置。
- 以 HTML 格式,它指定要放置在
在latex-longtable
格式中,这控制着包含左对齐数据类型的每一列的比例宽度。它被指定为以空格分隔的值列表,例如'0.2 0.2 0.6'
。未指定的输出列使用最后指定的值。
title
(或C
)- 设置任何后续打印表格的表格标题。这可用于为您提供输出描述性标签。如果未给出*
value
*,则标题未设置。
- 设置任何后续打印表格的表格标题。这可用于为您提供输出描述性标签。如果未给出*
tuples_only
(或t
)- 如果指定*
value
,则必须为on
或off
,这将启用或禁用仅 Tuples 模式。如果省略value
*,该命令将在常规输出和仅 Tuples 输出之间切换。常规输出包括额外的信息,例如列标题,标题和各种页脚。在仅 Tuples 模式下,仅显示实际表数据。
- 如果指定*
unicode_border_linestyle
- 将
unicode
线型的边框绘制样式设置为single
或double
之一。
- 将
unicode_column_linestyle
- 将
unicode
线条样式的列绘图样式设置为single
或double
之一。
- 将
unicode_header_linestyle
- 将
unicode
线型的标题绘图样式设置为single
或double
之一。
- 将
Examples部分中提供了这些不同格式的外观说明。
Tip
\pset
有多种快捷方式命令。参见\a
,\C
,\f
,\H
,\t
,\T
和\x
。
\q
或\quit
- 退出 psql 程序。在脚本文件中,仅终止该脚本的执行。
\qecho text [ ... ]
- 该命令与
\echo
相同,只不过输出将被写入\o
设置的查询输出通道。
- 该命令与
\r
或\reset
- 重置(清除)查询缓冲区。
\s [ filename ]
- 将 psql 的命令行历史记录打印到*
filename
。如果省略filename
*,则将历史记录写入标准输出(如果合适,使用寻呼机)。如果 psql 是在没有 Readline 支持的情况下构建的,则此命令不可用。
- 将 psql 的命令行历史记录打印到*
\set [ name [ value [ ... ] ] ]
- 将 psql 变量*
name
设置为value
*,或者如果给出多个值,则将所有变量的串联。如果仅给出一个参数,则将变量设置为空字符串值。要取消设置变量,请使用\unset
命令。
- 将 psql 变量*
\set
不带任何参数将显示所有当前设置的 psql 变量的名称和值。
有效的变量名称可以包含字母,数字和下划线。有关详情,请参见下面的Variables部分。变量名称区分大小写。
某些变量是特殊的,因为它们控制 psql 的行为或自动设置以反映连接状态。这些变量记录在下面的Variables中。
Note
该命令与 SQL 命令SET无关。
\setenv name [ value ]
- 将环境变量*
name
设置为value
,或者如果未提供value
*,则取消设置环境变量。例:
- 将环境变量*
testdb=> \setenv PAGER less
testdb=> \setenv LESS -imx4F
\sf[+] function_description
- 该命令以
CREATE OR REPLACE FUNCTION
命令的形式获取并显示命名函数的定义。定义将打印到当前查询输出通道,由\o
设置。
- 该命令以
目标函数可以仅通过名称指定,也可以通过名称和参数指定,例如foo(integer, text)
。如果有多个同名函数,则必须给出参数类型。
如果在命令名后附加了+
,则对输出行进行编号,而函数主体的第一行为行 1.
与大多数其他元命令不同,该行的其余部分始终被视为\sf
的参数,并且在参数中既不执行变量插值也不执行反引号扩展。
\sv[+] view_name
- 该命令以
CREATE OR REPLACE VIEW
命令的形式获取并显示命名视图的定义。定义将打印到当前查询输出通道,由\o
设置。
- 该命令以
如果在命令名称后附加了+
,则输出行从 1 开始编号。
与大多数其他元命令不同,该行的其余部分始终被视为\sv
的参数,并且在参数中既不执行变量插值也不执行反引号扩展。
\t
- 切换输出列名称标题和行计数页脚的显示。此命令等效于
\pset tuples_only
,为方便起见而提供。
- 切换输出列名称标题和行计数页脚的显示。此命令等效于
\T table_options
- 指定以 HTML 输出格式放置在
table
标记内的属性。此命令等效于\pset tableattr table_options
。
- 指定以 HTML 输出格式放置在
\timing [ on | off ]
- 使用参数,可以显示每个 SQL 语句打开或关闭的时间。如果没有参数,则在打开和关闭之间切换显示。显示单位为毫秒;超过 1 秒的时间间隔也以分钟:秒格式显示,并在需要时添加了小时和天字段。
\unset name
- 取消设置(删除)psql 变量*
name
*。
- 取消设置(删除)psql 变量*
大多数控制 psql 行为的变量不能被取消设置。而是将\unset
命令解释为将其设置为默认值。请参阅下面的Variables。
\w
或\write
*filename
*\w
或\write
|
*command
*- 将当前查询缓冲区写入文件*
filename
或通过管道将其传输到 shell 命令command
*。如果当前查询缓冲区为空,则写入最近执行的查询。
- 将当前查询缓冲区写入文件*
如果参数以|
开头,则该行的其余全部为* command
*要执行,并且变量插值和反引号扩展均未执行。该行的其余部分仅按字面意义传递给 Shell。
\watch [ seconds ]
- 重复执行当前查询缓冲区(如
\g
一样),直到被中断或查询失败。在两次执行之间 await 指定的秒数(默认为 2)。将显示每个查询结果的标题,其中包括\pset title
字符串(如果有),查询开始的时间以及延迟间隔。
- 重复执行当前查询缓冲区(如
如果当前查询缓冲区为空,则重新执行最近发送的查询。
\x [ on | off | auto ]
- 设置或切换扩展表格式设置模式。因此,它等效于
\pset expanded
。
- 设置或切换扩展表格式设置模式。因此,它等效于
\z [ pattern ]
- 列出具有相关访问权限的表,视图和序列。如果指定*
pattern
*,则仅列出名称与模式匹配的表,视图和序列。
- 列出具有相关访问权限的表,视图和序列。如果指定*
这是\dp
(“显示权限”)的别名。
\! [ command ]
- 不带任何参数,转至子 Shell;子 Shell 程序退出时,psql 恢复。带参数执行 shell 命令*
command
*。
- 不带任何参数,转至子 Shell;子 Shell 程序退出时,psql 恢复。带参数执行 shell 命令*
与大多数其他元命令不同,该行的其余部分始终被视为\!
的参数,并且在参数中既不执行变量插值也不执行反引号扩展。该行的其余部分仅按字面意义传递给 Shell。
\? [ topic ]
- 显示帮助信息。可选的*
topic
*参数(默认为commands
)用于选择 psql 的哪一部分:commands
描述 psql 的反斜杠命令;options
描述了可以传递给 psql 的命令行选项;和variables
显示有关 psql 配置变量的帮助。
- 显示帮助信息。可选的*
Patterns
各种\d
命令接受* pattern
*参数以指定要显示的对象名称。在最简单的情况下,模式只是对象的确切名称。模式中的字符通常折叠成小写,就像 SQL 名称一样。例如,\dt FOO
将显示名为foo
的表。与在 SQL 名称中一样,在模式周围放置双引号会停止折叠为小写。如果需要在模式中包含实际的双引号字符,请将其写为双引号序列中的一对双引号。再次符合 SQL 带引号的标识符的规则。例如,\dt "FOO""BAR"
将显示名为FOO"BAR
的表(而不是foo"bar
)。与一般的 SQL 名称规则不同,您可以在模式的一部分周围加上双引号,例如\dt FOO"FOO"BAR
将显示名为fooFOObar
的表。
只要* pattern
参数被完全省略,\d
命令就会显示在当前模式搜索路径中可见的所有对象-这等效于使用*
作为模式。 (如果对象包含的架构位于搜索路径中,并且在搜索路径中较早出现的对象没有相同种类和名称,则称该对象为可见*.显式架构限定.)要查看数据库中的所有对象而不论可见性如何,请使用*.*
作为模式。
在模式中,*
匹配任何字符序列(包括没有字符),而?
匹配任何单个字符。 (此表示法可与 Unix Shell 文件名模式相提并论.)例如,\dt int*
显示名称以int
开头的表。但是在双引号中,*
和?
失去了这些特殊含义,只是在字面上匹配。
包含点(.
)的模式被解释为架构名称模式,后跟对象名称模式。例如,\dt foo*.*bar*
显示表名包含bar
的所有表,这些表的模式名以foo
开头。如果没有点出现,则该模式仅匹配在当前模式搜索路径中可见的对象。同样,双引号中的点失去其特殊含义,并且在字面上匹配。
高级用户可以使用正则表达式表示法,例如字符类,例如[0-9]
来匹配任何数字。所有正则表达式特殊字符均按Section 9.7.3的规定工作,除了.
如上所述(用作分隔符),*
转换为正则表达式.*
,?
转换为.
以及$
从字面上匹配。您可以根据需要通过将?
表示.
,(R+|)
表示R*
或(R|)
表示R?
来模拟这些模式字符。不需要$
作为正则表达式字符,因为该模式必须与整个名称匹配,这与通常对正则表达式的解释不同(换句话说,$
自动添加到您的模式)。如果您不希望锚定图案,请在开头和/或结尾处写*
。请注意,在双引号中,所有正则表达式特殊字符都会失去其特殊含义,并且会在字面上进行匹配。同样,正则表达式特殊字符在运算符名称模式(即\do
的参数)中按字面值进行匹配。
Advanced Features
Variables
psql 提供了类似于普通 Unix 命令 shell 的变量替换功能。变量只是名称/值对,其中值可以是任何长度的任何字符串。名称必须由字母(包括非拉丁字母),数字和下划线组成。
要设置变量,请使用 psql 元命令\set
。例如,
testdb=> \set foo bar
将变量foo
设置为值bar
。要检索变量的内容,请在名称前加上冒号,例如:
testdb=> \echo :foo
bar
这在常规 SQL 命令和元命令中均有效;在下面的SQL Interpolation中有更多详细信息。
如果您在没有第二个参数的情况下调用\set
,则该变量将设置为空字符串值。要取消设置(即删除)变量,请使用命令\unset
。要显示所有变量的值,请不带任何参数调用\set
。
Note
\set
的参数应遵循与其他命令相同的替换规则。因此,您可以构造有趣的引用,例如\set :foo 'something'
并分别获得 Perl 或 PHP 的“软链接”或“变量变量”。不幸的是(或者幸运的是?),无法对这些构造做任何有用的事情。另一方面,\set bar :foo
是复制变量的完美有效方法。
psql 特别处理了许多这些变量。它们表示某些选项设置,可以在运行时通过更改变量的值来更改这些设置,或者在某些情况下表示 psql 的可更改状态。按照惯例,所有经过特殊处理的变量名称均由所有大写 ASCII 字母(以及可能的数字和下划线)组成。为了确保将来具有最大的兼容性,请避免出于自己的目的使用此类变量名。
控制 psql 行为的变量通常不能取消设置或设置为无效值。允许使用\unset
命令,但将其解释为将变量设置为其默认值。对于接受第二个参数的控制变量,不带第二个参数的\set
命令被解释为将变量设置为on
。同样,接受值on
和off
的控制变量也将接受布尔值的其他常见拼写,例如true
和false
。
特殊处理的变量是:
-
- 如果为
on
(默认值),则成功完成后将自动提交每个 SQL 命令。要在此模式下推迟提交,必须 ImportingBEGIN
或START TRANSACTION
SQL 命令。off
或未设置时,除非明确发出COMMIT
或END
,否则不会提交 SQL 命令。自动提交模式的工作方式是,在尚未在事务块中且本身不是BEGIN
或其他事务控制命令的任何命令,或不能在事务块内部执行的命令之前,为您发出隐式BEGIN
(例如VACUUM
)。
- 如果为
Note
在自动提交模式下,您必须通过 ImportingABORT
或ROLLBACK
明确放弃任何失败的事务。另外请记住,如果您退出会话而不提交,则您的工作将会丢失。
Note
自动提交模式是 PostgreSQL 的传统行为,但是自动提交模式更接近 SQL 规范。如果您希望自动提交,则可能希望在系统范围的psqlrc
文件或~/.psqlrc
文件中进行设置。
COMP_KEYWORD_CASE
- 确定在完成 SQL 关键字时要使用的字母大小写。如果设置为
lower
或upper
,则完成的单词将分别为小写或大写。如果设置为preserve-lower
或preserve-upper
(默认值),则在已经 Importing 单词的情况下,完成的单词将为小写或大写。
- 确定在完成 SQL 关键字时要使用的字母大小写。如果设置为
DBNAME
- 当前连接到的数据库的名称。每次您连接到数据库(包括程序启动)时都会进行设置,但是可以更改或取消设置。
ECHO
- 如果设置为
all
,则所有非空 Importing 行将在读取时打印到标准输出。 (这不适用于以交互方式读取的行.)要在程序启动时选择此行为,请使用开关-a
。如果设置为queries
,则 psql 在将每个查询发送到服务器时将其打印到标准输出。选择此行为的开关是-e
。如果设置为errors
,则在标准错误输出上仅显示失败的查询。此行为的开关是-b
。如果设置为none
(默认值),则不会显示查询。
- 如果设置为
ECHO_HIDDEN
- 当此变量设置为
on
且反斜杠命令查询数据库时,将首先显示该查询。此功能可帮助您研究 PostgreSQL 内部结构并在您自己的程序中提供类似的功能。 (要在程序启动时选择此行为,请使用-E
开关.)如果将此变量设置为值noexec
,则仅显示查询,但实际上不将查询发送到服务器并执行查询。默认值为off
。
- 当此变量设置为
ENCODING
- 当前 Client 端字符集编码。每次您连接到数据库(包括程序启动)时,以及使用
\encoding
更改编码时,都会进行设置,但是可以更改或取消设置。
- 当前 Client 端字符集编码。每次您连接到数据库(包括程序启动)时,以及使用
FETCH_COUNT
- 如果将此变量设置为大于零的整数值,则将提取
SELECT
查询的结果并将其以该多行的形式显示,而不是在显示之前收集整个结果集的默认行为。因此,无论结果集的大小如何,仅使用有限的内存量。启用此功能时,通常使用 100 到 1000 的设置。请记住,使用此功能时,已经显示了一些行之后查询可能会失败。
- 如果将此变量设置为大于零的整数值,则将提取
Tip
尽管您可以使用此功能使用任何输出格式,但是默认的aligned
格式看起来很糟糕,因为每组FETCH_COUNT
行将分别设置格式,从而导致行组中的列宽变化。其他输出格式效果更好。
HISTCONTROL
- 如果此变量设置为
ignorespace
,则以空格开头的行不会 Importing 到历史记录列表中。如果设置为ignoredups
,则不会 Importing 与上一个历史记录行匹配的行。值ignoreboth
结合了两个选项。如果设置为none
(默认值),则以交互方式读取的所有行都将保存在历史记录列表中。
- 如果此变量设置为
Note
Bash 毫不掩饰地 feature 窃了此功能。
HISTFILE
- 将用于存储历史记录列表的文件名。如果未设置,则文件名称取自
PSQL_HISTORY
环境变量。如果也未设置,则在 Windows 上默认为~/.psql_history
或%APPDATA%\postgresql\psql_history
。例如,将:
- 将用于存储历史记录列表的文件名。如果未设置,则文件名称取自
\set HISTFILE ~/.psql_history- :DBNAME
~/.psqlrc
中的 in 将导致 psql 为每个数据库维护单独的历史记录。
Note
Bash 毫不掩饰地 feature 窃了此功能。
HISTSIZE
- 在命令历史 Logging 存储的最大命令数(默认为 500)。如果设置为负值,则不应用限制。
Note
Bash 毫不掩饰地 feature 窃了此功能。
HOST
- 当前连接到的数据库服务器主机。每次您连接到数据库(包括程序启动)时都会进行设置,但是可以更改或取消设置。
IGNOREEOF
- 如果设置为 1 或更小,向 psql 的交互式会话发送 EOF 字符(通常是 Control D )将终止应用程序。如果设置为较大的数值,则必须键入许多连续的 EOF 字符以使交互式会话终止。如果变量设置为非数字值,则将其解释为 10.默认值为 0.
Note
Bash 毫不掩饰地 feature 窃了此功能。
LASTOID
- 从
INSERT
或\lo_import
命令返回的最后受影响的 OID 的值。仅在显示下一个 SQL 命令的结果之前,此变量才有效。
- 从
-
- 当设置为
on
时,如果事务块中的语句生成错误,则该错误将被忽略,事务将 continue。设置为interactive
时,此类错误仅在交互式会话中被忽略,而在读取脚本文件时则不会被忽略。当设置为off
(默认值)时,事务块中的一条语句会生成错误,从而中止整个事务。错误回滚模式的工作方式是,在事务块中的每个命令之前向您发出一个隐式SAVEPOINT
,然后在命令失败时回滚到保存点。
- 当设置为
ON_ERROR_STOP
- 默认情况下,发生错误后命令处理将 continue。当此变量设置为
on
时,处理将立即停止。在交互模式下,psql 将返回命令提示符;否则,psql 将退出,返回错误代码 3 以区分这种情况与致命错误情况,致命错误情况是使用错误代码 1 报告的。在任何一种情况下,任何当前运行的脚本(顶级脚本(如果有)以及任何其他脚本)它可能已被调用)将立即终止。如果顶级命令字符串包含多个 SQL 命令,则处理将以当前命令停止。
- 默认情况下,发生错误后命令处理将 continue。当此变量设置为
PORT
- 当前连接到的数据库服务器端口。每次您连接到数据库(包括程序启动)时都会进行设置,但是可以更改或取消设置。
PROMPT1
PROMPT2
PROMPT3
- 这些指定了提示 psql 问题的外观。请参阅下面的Prompting。
QUIET
- 将此变量设置为
on
等效于命令行选项-q
。在交互模式下,它可能不太有用。
- 将此变量设置为
SERVER_VERSION_NAME
SERVER_VERSION_NUM
- 服务器的版本号,以字符串形式,例如
9.6.2
,10.1
或11beta1
,以数字形式,例如90602
或100001
。每次您连接到数据库(包括程序启动)时都进行设置,但是可以更改或取消设置。
- 服务器的版本号,以字符串形式,例如
SHOW_CONTEXT
- 可以将此变量设置为值
never
,errors
或always
,以控制在服务器消息中是否显示CONTEXT
字段。默认值为errors
(表示上下文将显示在错误消息中,而不显示在通知或警告消息中)。当VERBOSITY
设置为terse
时,此设置无效。 (另请参见\errverbose
,当您想要刚刚得到的错误的详细版本时使用.)
- 可以将此变量设置为值
SINGLELINE
- 将此变量设置为
on
等效于命令行选项-S
。
- 将此变量设置为
SINGLESTEP
- 将此变量设置为
on
等效于命令行选项-s
。
- 将此变量设置为
USER
- 当前连接的数据库用户。每次您连接到数据库(包括程序启动)时都会进行设置,但是可以更改或取消设置。
VERBOSITY
- 可以将此变量设置为值
default
,verbose
或terse
,以控制错误报告的详细程度。 (另请参见\errverbose
,当您想要刚刚得到的错误的详细版本时使用.)
- 可以将此变量设置为值
VERSION
VERSION_NAME
VERSION_NUM
- 这些变量是在程序启动时设置的,分别反映为 psql 的版本,包括详细字符串,短字符串(例如
9.6.2
,10.1
或11beta1
)和数字(例如90602
或100001
)。可以更改或取消设置。
- 这些变量是在程序启动时设置的,分别反映为 psql 的版本,包括详细字符串,短字符串(例如
SQL Interpolation
psql 变量的一个关键功能是您可以将它们替换(“内插”)到常规 SQL 语句以及元命令的参数中。此外,psql 提供了一些设施,以确保正确引用用作 SQLLiterals 和标识符的变量值。不带引号插值的语法是在变量名前加冒号(:
)。例如,
testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;
将查询表my_table
。请注意,这可能是不安全的:变量的值是按字面值复制的,因此它可以包含不平衡的引号,甚至包含反斜杠命令。您必须确保将它放在哪里有意义。
当将值用作 SQLLiterals 或标识符时,最安全的方法是对其进行引用。要将变量的值引用为 SQLLiterals,请在单引号中写一个冒号,后跟变量名称。要将值用作 SQL 标识符,请在冒号后加上双引号,然后在变量名前加上双引号。这些构造可以正确处理包含在变量值中的引号和其他特殊字符。前面的示例将通过这种方式更安全地编写:
testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :"foo";
在带引号的 SQLLiterals 和标识符中不会执行变量插值。因此,诸如':foo'
之类的构造不适用于从变量的值中产生带引号的 Literals(并且如果起作用,将是不安全的,因为它将无法正确处理值中嵌入的引号)。
此机制的一个示例用法是将文件的内容复制到表列中。首先将文件加载到变量中,然后将变量的值作为带引号的字符串插入:
testdb=> \set content `cat my_file.txt`
testdb=> INSERT INTO my_table VALUES (:'content');
(请注意,如果my_file.txt
包含 NUL 字节,这仍然行不通.psql 不支持在变量值中嵌入 NUL 字节.)
由于冒号可以合法地出现在 SQL 命令中,因此除非当前设置了命名变量,否则不会替换明显的插值尝试(即:name
,:'name'
或:"name"
)。无论如何,您都可以使用反斜杠转义冒号,以防止其被替换。
变量的冒号语法是嵌入式查询语言(例如 ECPG)的标准 SQL。数组切片和类型转换的冒号语法是 PostgreSQL 扩展,有时可能与标准用法冲突。将变量值转义为 SQLLiterals 或标识符的冒号引用语法是 psql 扩展。
Prompting
可以根据您的喜好自定义提示 psql 问题。三个变量PROMPT1
,PROMPT2
和PROMPT3
包含字符串和特殊的转义序列,用于描述提示的外观。提示 1 是 psql 请求新命令时发出的普通提示。当在命令 Importing 期间需要更多 Importing 时,例如因为命令未以分号终止或未关闭引号,则发出提示 2.当您运行 SQL COPY FROM STDIN
命令并且需要在终端上 Importing 行值时,将发出提示 3.
所选提示变量的值按字面意义打印,除非遇到百分号(%
)。根据下一个字符,某些其他文本将被替换。定义的替换是:
%M
- 数据库服务器的完整主机名(带有域名),如果连接通过 Unix 域套接字,则为__;如果 Unix 域套接字不在默认位置的已编译位置,则为
[local:/dir/name]
。
- 数据库服务器的完整主机名(带有域名),如果连接通过 Unix 域套接字,则为__;如果 Unix 域套接字不在默认位置的已编译位置,则为
%m
- 数据库服务器的主机名,在第一个点处被截断,如果连接是通过 Unix 域套接字,则为
[local]
。
- 数据库服务器的主机名,在第一个点处被截断,如果连接是通过 Unix 域套接字,则为
%>
- 数据库服务器正在侦听的端口号。
%n
- 数据库会话用户名。 (此值的扩展可能在数据库会话期间由于命令
SET SESSION AUTHORIZATION
而改变.)
- 数据库会话用户名。 (此值的扩展可能在数据库会话期间由于命令
%/
- 当前数据库的名称。
%~
- 类似于
%/
,但是如果数据库是默认数据库,则输出为~
(波浪号)。
- 类似于
%#
- 如果会话用户是数据库超级用户,则为
#
,否则为>
。 (此值的扩展可能在数据库会话期间由于命令SET SESSION AUTHORIZATION
而改变.)
- 如果会话用户是数据库超级用户,则为
%p
- 当前连接的后端的进程 ID。
%R
- 在提示符 1 中通常为
=
,但如果会话处于条件块的非活动分支中则为@
,如果在单行模式下则为^
,如果会话与数据库断开连接则为!
(如果\connect
失败则可能发生)。在提示符 2 中,%R
被一个字符替换,该字符取决于 psql 期望更多 Importing 的原因:-
(如果该命令只是还没有终止),但*
(如果有未完成的/* ... */
Comments),如果有未完成的引号字符串则为单引号,如果有未完成的带引号的标识符,则使用双引号;如果有未完成的用美元引号的字符串,则使用美元符号;如果有未匹配的左括号,则使用(
。在提示 3 中%R
不产生任何结果。
- 在提示符 1 中通常为
%x
- 事务状态:不在事务块中时为空字符串,在事务块中时为
*
,在失败事务块中时为!
,或者在事务状态不确定时(例如,因为没有连接)为?
。
- 事务状态:不在事务块中时为空字符串,在事务块中时为
%l
- 当前语句中的行号,从
1
开始。
- 当前语句中的行号,从
%
digits
- 带有指示的八进制代码的字符将被替换。
%:
name
:
- psql 变量*
name
*的值。有关详细信息,请参见Variables部分。
- psql 变量*
``%```
command
`````-
command
*的输出,类似于普通的“反 t”替代。
-
%[
...%]
- 提示可以包含终端控制字符,例如,可以更改提示文本的颜色,背景或样式,或更改终端窗口的标题。为了使 Readline 的行编辑功能正常工作,必须将这些非打印控制字符用
%[
和%]
包围以指定为不可见。提示中可以出现多对。例如:
- 提示可以包含终端控制字符,例如,可以更改提示文本的颜色,背景或样式,或更改终端窗口的标题。为了使 Readline 的行编辑功能正常工作,必须将这些非打印控制字符用
testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '
会在兼容 VT100 且具有颜色的终端上显示黑底黑字(33;40
)的粗体(1;
)提示。
要将百分号插入提示中,请 Importing%%
。默认提示是'%/%R%# '
表示提示 1 和 2,'>> '
表示提示 3.
Note
从 tcsh sh 窃此功能。
Command-Line Editing
psql 支持 Readline 库,以方便进行行编辑和检索。当 psql 退出时,命令历史记录将自动保存,并在 psql 启动时重新加载。尽管补全逻辑不声称是 SQL 解析器,但也支持制表符补全。制表符补全生成的查询也可能会干扰其他 SQL 命令,例如SET TRANSACTION ISOLATION LEVEL
。如果由于某种原因您不喜欢制表符补全,可以通过将其放在主目录中名为.inputrc
的文件中将其关闭:
$if psql
set disable-completion on
$endif
(这不是 psql,而是 Readline 功能.有关更多详细信息,请阅读其文档.)
Environment
COLUMNS
- 如果
\pset columns
为零,则控制wrapped
格式的宽度和宽度,以确定宽输出是需要寻呼机还是应在扩展自动模式下切换为垂直格式。
- 如果
PAGER
- 如果查询结果无法显示在屏幕上,则通过此命令通过管道传递查询结果。典型值为
more
或less
。默认值取决于平台。可以通过将PAGER
设置为空或使用\pset
命令的与寻呼机相关的选项来禁用该寻呼机的使用。
- 如果查询结果无法显示在屏幕上,则通过此命令通过管道传递查询结果。典型值为
PGDATABASE
PGHOST
PGPORT
PGUSER
- 默认连接参数(请参见Section 33.14)。
PSQL_EDITOR
EDITOR
VISUAL
\e
,\ef
和\ev
命令使用的编辑器。这些变量按照列出的 Sequences 进行检查。使用设置的第一个。
内置的默认编辑器在 Unix 系统上为vi
,在 Windows 系统上为notepad.exe
。
PSQL_EDITOR_LINENUMBER_ARG
- 当
\e
,\ef
或\ev
与行号参数一起使用时,此变量指定用于将起始行号传递给用户的编辑器的命令行参数。对于 Emacs 或 vi 等编辑器,这是一个加号。如果选项名称和行号之间需要有空格,请在变量的值中包含尾随空格。例子:
- 当
PSQL_EDITOR_LINENUMBER_ARG='+'
PSQL_EDITOR_LINENUMBER_ARG='--line '
在 Unix 系统上,默认值为+
(与默认编辑器vi
对应,对许多其他常用编辑器很有用);但 Windows 系统上没有默认设置。
PSQL_HISTORY
- 命令历史记录文件的备用位置。进行波浪(
~
)扩展。
- 命令历史记录文件的备用位置。进行波浪(
PSQLRC
- 用户的
.psqlrc
文件的备用位置。进行波浪(~
)扩展。
- 用户的
SHELL
\!
命令执行的命令。
TMPDIR
- 用于存储临时文件的目录。默认值为
/tmp
。
- 用于存储临时文件的目录。默认值为
与大多数其他 PostgreSQLUtil 一样,该 Util 也使用 libpq 支持的环境变量(请参见Section 33.14)。
Files
psqlrc
和~/.psqlrc
- 除非传递了
-X
选项,否则 psql 将尝试在连接到数据库之后但在接受常规命令之前先从系统级启动文件(psqlrc
)然后从用户的个人启动文件(~/.psqlrc
)读取并执行命令。这些文件通常用于\set
和SET
命令,可用于设置要品尝的 Client 端和/或服务器。
- 除非传递了
系统范围的启动文件名为psqlrc
,可以在安装的“系统配置”目录中找到,该目录可以通过运行pg_config --sysconfdir
来最可靠地标识。默认情况下,该目录相对于包含 PostgreSQL 可执行文件的目录为../etc/
。可以通过PGSYSCONFDIR
环境变量显式设置此目录的名称。
用户的个人启动文件名为.psqlrc
,并在调用用户的主目录中查找。在缺少这种概念的 Windows 上,个人启动文件名为%APPDATA%\postgresql\psqlrc.conf
。可以通过PSQLRC
环境变量显式设置用户启动文件的位置。
通过在文件名后加上破折号和 PostgreSQL 主要或次要发行版号,例如~/.psqlrc-9.2
或~/.psqlrc-9.2.5
,可以使系统范围内的启动文件和用户的个人启动文件都成为 psql-version-specific。与非版本特定的文件相比,将优先读取最特定的版本匹配文件。
.psql_history
- 命令行历史记录存储在 Windows 上的文件
~/.psql_history
或%APPDATA%\postgresql\psql_history
中。
- 命令行历史记录存储在 Windows 上的文件
可以通过HISTFILE
psql 变量或PSQL_HISTORY
环境变量显式设置历史记录文件的位置。
Notes
- psql 与相同或较旧的主要版本的服务器一起使用时效果最佳。如果服务器的版本比 psql 本身的版本新,则反斜杠命令很可能会失败。但是,
\d
系列的反斜杠命令应与版本 7.4 或更高的服务器一起使用,尽管不一定适用于比 psql 本身新的服务器。运行 SQL 命令和显示查询结果的常规功能也应与较新的主要版本的服务器一起使用,但这不能在所有情况下都得到保证。
如果要使用 psql 连接到多个具有不同主要版本的服务器,则建议使用最新版本的 psql。另外,您可以保留每个主要版本的 psql 副本,并确保使用与相应服务器匹配的版本。但是在实践中,这种额外的复杂性是不必要的。
在 PostgreSQL 9.6 之前,
-c
选项隐含-X
(--no-psqlrc
);这已不再是这种情况。在 PostgreSQL 8.4 之前,psql 允许单字母反斜杠命令的第一个参数在命令后直接启动,而无需插入空格。现在,需要一些空格。
Windows 用户注意事项
psql 被构建为“控制台应用程序”。由于 Windows 控制台窗口使用与系统其余部分不同的编码,因此在 psql 中使用 8 位字符时必须格外小心。如果 psql 检测到有问题的控制台代码页,它将在启动时警告您。要更改控制台代码页,需要做两件事:
通过 Importing
cmd.exe /c chcp 1252
设置代码页。 (1252 是适用于德语的代码页;将其替换为您的值.)如果您使用的是 Cygwin,则可以将此命令放在/etc/profile
中。将控制台字体设置为
Lucida Console
,因为栅格字体不适用于 ANSI 代码页。
Examples
第一个示例显示了如何将命令分布在多行 Importing 上。注意更改提示:
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
--------+---------+-----------+----------+---------
first | integer | | not null | 0
second | text | | |
现在,我们将提示更改为更有趣的内容:
testdb=> \set PROMPT1 '%n@%m %~%R%# '
peter@localhost testdb=>
假设您已经用数据填充了表并想看一下它:
peter@localhost testdb=> SELECT * FROM my_table;
first | second
-------+--------
1 | one
2 | two
3 | three
4 | four
(4 rows)
您可以使用\pset
命令以不同方式显示表:
peter@localhost testdb=> \pset border 2
Border style is 2.
peter@localhost testdb=> SELECT * FROM my_table;
+-------+--------+
| first | second |
+-------+--------+
| 1 | one |
| 2 | two |
| 3 | three |
| 4 | four |
+-------+--------+
(4 rows)
peter@localhost testdb=> \pset border 0
Border style is 0.
peter@localhost testdb=> SELECT * FROM my_table;
first second
----- ------
1 one
2 two
3 three
4 four
(4 rows)
peter@localhost testdb=> \pset border 1
Border style is 1.
peter@localhost testdb=> \pset format unaligned
Output format is unaligned.
peter@localhost testdb=> \pset fieldsep ","
Field separator is ",".
peter@localhost testdb=> \pset tuples_only
Showing only tuples.
peter@localhost testdb=> SELECT second, first FROM my_table;
one,1
two,2
three,3
four,4
或者,使用简短命令:
peter@localhost testdb=> \a \t \x
Output format is aligned.
Tuples only is off.
Expanded display is on.
peter@localhost testdb=> SELECT * FROM my_table;
-[ RECORD 1 ]-
first | 1
second | one
-[ RECORD 2 ]-
first | 2
second | two
-[ RECORD 3 ]-
first | 3
second | three
-[ RECORD 4 ]-
first | 4
second | four
如果合适,查询结果可以使用\crosstabview
命令以交叉表的形式显示:
testdb=> SELECT first, second, first > 2 AS gt2 FROM my_table;
first | second | gt2
-------+--------+-----
1 | one | f
2 | two | f
3 | three | t
4 | four | t
(4 rows)
testdb=> \crosstabview first second
first | one | two | three | four
-------+-----+-----+-------+------
1 | f | | |
2 | | f | |
3 | | | t |
4 | | | | t
(4 rows)
第二个示例显示了一个乘法表,其中行以相反的数字 Sequences 排序,而列则具有独立的,升序数字 Sequences。
testdb=> SELECT t1.first as "A", t2.first+100 AS "B", t1.first*(t2.first+100) as "AxB",
testdb(> row_number() over(order by t2.first) AS ord
testdb(> FROM my_table t1 CROSS JOIN my_table t2 ORDER BY 1 DESC
testdb(> \crosstabview "A" "B" "AxB" ord
A | 101 | 102 | 103 | 104
---+-----+-----+-----+-----
4 | 404 | 408 | 412 | 416
3 | 303 | 306 | 309 | 312
2 | 202 | 204 | 206 | 208
1 | 101 | 102 | 103 | 104
(4 rows)