psql — PostgreSQL 交互式终端
psql
[选项
...] [dbname
[username
]]
psql 是一个基于终端的 PostgreSQL 前端。它使您可以交互式地键入查询,将其发送到 PostgreSQL,并查看查询结果。或者,输入可以来自文件或命令行参数。此外,psql 提供了许多元命令和各种类似 shell 的功能,以方便编写脚本和自动化各种任务。
-a
--echo-all
#读取时将所有非空输入行打印到标准输出。(这不适用于交互式读取的行。)这等效于将变量 ECHO
设置为 all
。
-A
--no-align
#切换到不对齐的输出模式。(默认输出模式为 aligned
。)这等效于 \pset format unaligned
。
-b
--echo-errors
#将失败的 SQL 命令打印到标准错误输出。这等效于将变量 ECHO
设置为 errors
。
-c command
--command=command
#指定 psql 执行给定的命令字符串 command
。此选项可以重复,并且可以与 -f
选项以任何顺序组合使用。当指定 -c
或 -f
时,psql 不会从标准输入读取命令;而是在按顺序处理完所有 -c
和 -f
选项后终止。
command
必须是服务器可以完全解析的命令字符串(即,它不包含 psql 特有的功能),或单个反斜杠命令。因此,您不能在 -c
选项中混合使用SQL和 psql 元命令。要实现这一点,您可以使用重复的 -c
选项或将字符串通过管道传递到 psql,例如
psql -c '\x' -c 'SELECT * FROM foo;'
或
echo '\x \\ SELECT * FROM foo;' | psql
(\\
是分隔符元命令。)
传递给 -c
的每个SQL命令字符串都作为单个请求发送到服务器。因此,即使该字符串包含多个SQL命令,服务器也会将其作为单个事务执行,除非字符串中包含显式的 BEGIN
/COMMIT
命令将其划分为多个事务。(有关服务器如何处理多查询字符串的更多详细信息,请参见第 53.2.2.1 节。)
如果不希望在一个事务中执行多个命令,请使用重复的 -c
命令或将多个命令输入到 psql 的标准输入中,可以使用如上所示的 echo 或通过 shell here 文档,例如
psql <<EOF \x SELECT * FROM foo; EOF
--csv
#切换到CSV(逗号分隔值)输出模式。这等效于 \pset format csv
。
-d dbname
--dbname=dbname
#指定要连接的数据库的名称。这等效于在命令行上将 dbname
指定为第一个非选项参数。dbname
可以是连接字符串。如果是这样,连接字符串参数将覆盖任何冲突的命令行选项。
-e
--echo-queries
#同时将发送到服务器的所有 SQL 命令复制到标准输出。这等效于将变量 ECHO
设置为 queries
。
-E
--echo-hidden
#回显由 \d
和其他反斜杠命令生成的实际查询。您可以使用它来研究 psql 的内部操作。这等效于将变量 ECHO_HIDDEN
设置为 on
。
-f filename
--file=filename
#从文件 filename
中读取命令,而不是从标准输入读取。此选项可以重复,并且可以与 -c
选项以任何顺序组合使用。当指定 -c
或 -f
时,psql 不会从标准输入读取命令;而是在按顺序处理完所有 -c
和 -f
选项后终止。除此之外,此选项基本上等效于元命令 \i
。
如果 filename
为 -
(连字符),则读取标准输入,直到 EOF 指示或 \q
元命令。这可用于将交互式输入与来自文件的输入穿插使用。但请注意,在这种情况下不使用 Readline(就像指定了 -n
一样)。
使用此选项与编写 psql <
略有不同。通常,两者都会按您的预期工作,但使用 filename
-f
可以启用一些不错的功能,例如带有行号的错误消息。使用此选项也有一点机会可以减少启动开销。另一方面,使用 shell 的输入重定向的变体(理论上)保证产生与您手动输入所有内容时收到的完全相同的输出。
-F separator
--field-separator=separator
#使用 separator
作为不对齐输出的字段分隔符。这等效于 \pset fieldsep
或 \f
。
-h hostname
--host=hostname
#指定服务器运行所在计算机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。
-H
--html
#切换到HTML输出模式。这等效于 \pset format html
或 \H
命令。
-l
--list
#列出所有可用的数据库,然后退出。其他非连接选项将被忽略。这类似于元命令 \list
。
当使用此选项时,psql 将连接到数据库 postgres
,除非在命令行中指定了其他数据库(选项 -d
或非选项参数,可能通过服务条目,但不是通过环境变量)。
-L filename
--log-file=filename
#将所有查询输出写入文件 filename
,同时仍然输出到正常的目标位置。
-n
--no-readline
#不使用 Readline 进行行编辑,也不使用命令历史记录(请参阅下文“命令行编辑” 部分)。
-o filename
--output=filename
#将所有查询输出写入文件 filename
。这等效于命令 \o
。
-p port
--port=port
#指定服务器监听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。默认为 PGPORT
环境变量的值,如果未设置,则为编译时指定的端口,通常为 5432。
-P assignment
--pset=assignment
#指定打印选项,样式与 \pset
相同。请注意,此处您必须使用等号而不是空格来分隔名称和值。例如,要将输出格式设置为 LaTeX,您可以编写 -P format=latex
。
-q
--quiet
#指定 psql 应静默运行。默认情况下,它会打印欢迎消息和各种信息输出。如果使用此选项,则不会发生这种情况。这对于 -c
选项非常有用。这等效于将变量 QUIET
设置为 on
。
-R separator
--record-separator=separator
#使用 separator
作为非对齐输出的记录分隔符。这等效于 \pset recordsep
。
-s
--single-step
#以单步模式运行。这意味着在每个命令发送到服务器之前都会提示用户,并可以选择取消执行。使用此选项调试脚本。
-S
--single-line
#以单行模式运行,其中换行符终止 SQL 命令,分号也是如此。
此模式是为那些坚持使用它的人提供的,但不一定鼓励您使用它。特别是,如果您将SQL和元命令混合在同一行上,对于没有经验的用户来说,执行顺序可能并不总是很清楚。
-t
--tuples-only
#关闭列名称和结果行计数页脚等的打印。这等效于 \t
或 \pset tuples_only
。
-T table_options
--table-attr=table_options
#指定要放置在HTML table
标签内的选项。有关详细信息,请参阅 \pset tableattr
。
-U username
--username=username
#以用户 username
而不是默认用户连接到数据库。(当然,您必须有权限这样做。)
-v assignment
--set=assignment
--variable=assignment
#执行变量赋值,类似于 \set
元命令。请注意,您必须在命令行上使用等号分隔名称和值(如果有)。要取消设置变量,请省略等号。要设置具有空值的变量,请使用等号但省略值。这些赋值是在命令行处理期间完成的,因此反映连接状态的变量稍后将被覆盖。
-V
--version
#打印 psql 版本并退出。
-w
--no-password
#永远不发出密码提示。如果服务器需要密码身份验证,并且无法从其他来源(例如 .pgpass
文件)获取密码,则连接尝试将失败。此选项在批处理作业和脚本中非常有用,在这些作业和脚本中,没有用户可以输入密码。
请注意,此选项将在整个会话中保持设置状态,因此它会影响元命令 \connect
的使用以及初始连接尝试。
-W
--password
#强制 psql 在连接到数据库之前提示输入密码,即使密码不会被使用。
如果服务器需要密码身份验证,并且无法从其他来源(例如 .pgpass
文件)获取密码,则无论如何 psql 都会提示输入密码。但是,psql 将浪费一次连接尝试来找出服务器是否需要密码。在某些情况下,值得键入 -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
命令,从而将所有命令包装到单个事务中。如果任何命令失败并且设置了变量 ON_ERROR_STOP
,则会发送 ROLLBACK
命令。这确保所有命令都成功完成,或者不应用任何更改。
如果命令本身包含 BEGIN
、COMMIT
或 ROLLBACK
,则此选项将不会产生预期的效果。此外,如果单个命令无法在事务块内执行,则指定此选项将导致整个事务失败。
-?
--help[=topic
]
#显示有关 psql 的帮助并退出。可选的 topic
参数(默认为 options
)选择解释 psql 的哪个部分:commands
描述 psql 的反斜杠命令;options
描述可以传递给 psql 的命令行选项;variables
显示有关 psql 配置变量的帮助。
如果 psql 正常完成,则向 shell 返回 0;如果发生致命的自身错误(例如,内存不足、找不到文件),则返回 1;如果与服务器的连接出现问题且会话不是交互式的,则返回 2;如果脚本中发生错误并且设置了变量 ON_ERROR_STOP
,则返回 3。
psql 是一个常规的 PostgreSQL 客户端应用程序。为了连接到数据库,您需要知道目标数据库的名称、服务器的主机名和端口号,以及要连接的数据库用户名。psql 可以通过命令行选项告知这些参数,即分别为 -d
、-h
、-p
和 -U
。如果找到不属于任何选项的参数,则它将被解释为数据库名称(如果已给出数据库名称,则为数据库用户名)。并非所有这些选项都是必需的;有一些有用的默认值。如果您省略主机名,psql 将通过 Unix 域套接字连接到本地主机上的服务器,或通过 TCP/IP 连接到 Windows 上的 localhost
。默认端口号是在编译时确定的。由于数据库服务器使用相同的默认值,因此在大多数情况下您不必指定端口。默认数据库用户名是您的操作系统用户名。一旦确定了数据库用户名,它将用作默认数据库名称。请注意,您不能只连接到任何数据库下的任何数据库用户名。您的数据库管理员应已告知您有关您的访问权限。
当默认设置不完全正确时,您可以通过设置环境变量 PGDATABASE
、PGHOST
、PGPORT
和/或 PGUSER
为适当的值来减少输入。(有关其他环境变量,请参见第 32.15 节。)拥有一个 ~/.pgpass
文件也很方便,可以避免经常输入密码。有关更多信息,请参见第 32.16 节。
指定连接参数的另一种方法是在 conninfo
字符串或URI中使用,而不是数据库名称。此机制可以让你非常广泛地控制连接。例如
$psql "service=myservice sslmode=require"
$psql postgresql://dbmaster:5433/mydb?sslmode=require
这样你也可以使用LDAP来查找连接参数,如第 32.18 节中所述。有关所有可用连接选项的更多信息,请参见第 32.1.2 节。
如果由于任何原因(例如,权限不足、目标主机上未运行服务器等)无法建立连接,psql 将返回错误并终止。
如果标准输入和标准输出都是终端,则 psql 会将客户端编码设置为 “auto”,这将从区域设置(Unix 系统上的 LC_CTYPE
环境变量)中检测合适的客户端编码。如果这没有按预期工作,可以使用环境变量 PGCLIENTENCODING
覆盖客户端编码。
在正常操作中,psql 会提供一个提示符,其中包含 psql 当前连接的数据库的名称,后跟字符串 =>
。例如
$ psql testdb
psql (17.2)
Type "help" for help.
testdb=>
在提示符下,用户可以键入SQL命令。通常,当到达命令终止分号时,输入行将发送到服务器。行尾不会终止命令。因此,为了清晰起见,可以将命令分散在多行上。如果命令已发送并执行无误,则会在屏幕上显示命令的结果。
如果不受信任的用户可以访问未采用安全模式使用模式的数据库,请通过从 search_path
中删除公共可写模式来开始会话。可以将 options=-csearch_path=
添加到连接字符串,或者在其他 SQL 命令之前发出 SELECT pg_catalog.set_config('search_path', '', false)
。此考虑不特定于 psql;它适用于执行任意 SQL 命令的每个接口。
每当执行命令时,psql 还会轮询由 LISTEN
和 NOTIFY
生成的异步通知事件。
当 C 样式块注释被传递到服务器进行处理和删除时,SQL 标准注释会被 psql 删除。
您在 psql 中输入的任何以未加引号的反斜杠开头的都是 psql 元命令,它由 psql 本身处理。这些命令使 psql 对于管理或脚本编写更有用。元命令通常被称为斜线命令或反斜杠命令。
psql 命令的格式是反斜杠,后跟命令动词,然后是任何参数。参数与命令动词之间以及彼此之间用任意数量的空格字符分隔。
要在参数中包含空格,可以使用单引号将其引起来。要在参数中包含单引号,请在单引号文本中写入两个单引号。单引号中包含的任何内容还会受到 C 样式替换的影响,例如 \n
(换行符)、\t
(制表符)、\b
(退格符)、\r
(回车符)、\f
(换页符)、\
digits
(八进制)和 \x
digits
(十六进制)。单引号文本中任何其他字符之前的反斜杠都会引用该单个字符,无论它是什么。
如果参数中出现一个未加引号的冒号(:
),后跟 psql 变量名,它将被变量的值替换,如下面的SQL 插值中所述。那里描述的 :'
和 variable_name
':"
形式也有效。variable_name
":{?
语法允许测试是否定义了变量。它被替换为 TRUE 或 FALSE。使用反斜杠转义冒号可以防止其被替换。variable_name
}
在参数中,用反引号(`
)括起来的文本被视为传递给 shell 的命令行。命令的输出(删除任何尾随换行符)将替换反引号文本。在反引号括起来的文本中,不会发生特殊的引号或其他处理,除了 :
的出现(其中 variable_name
variable_name
是 psql 变量名)被替换为变量的值。此外,:'
的出现被替换为变量的值,并适当引用以成为单个 shell 命令参数。(除非你非常确定变量中的内容,否则后一种形式几乎总是首选的。)由于回车符和换行符字符无法在所有平台上安全地引用,因此当值中出现此类字符时,variable_name
':'
形式会打印错误消息,并且不替换变量值。variable_name
'
某些命令将SQL标识符(例如表名)作为参数。这些参数遵循以下语法规则SQL:未加引号的字母被强制转换为小写,而双引号("
)可以保护字母免于大小写转换,并允许将空格合并到标识符中。在双引号内,成对的双引号会简化为结果名称中的单个双引号。例如,FOO"BAR"BAZ
被解释为 fooBARbaz
,而 "A weird"" name"
变为 A weird" name
。
对参数的解析在行尾停止,或者当找到另一个未加引号的反斜杠时停止。未加引号的反斜杠被视为新的元命令的开头。特殊序列 \\
(两个反斜杠)标记参数的结束,并继续解析SQL命令(如果有)。那样SQL和 psql 命令可以在一行上自由混合。但在任何情况下,元命令的参数都不能超出行的末尾。
许多元命令作用于当前查询缓冲区。这只是一个缓冲区,其中包含已键入但尚未发送到服务器执行的任何 SQL 命令文本。这将包括以前的输入行以及同一行上元命令之前出现的任何文本。
定义了以下元命令
\a
#如果当前的表输出格式为未对齐,则将其切换为对齐。如果不是未对齐的,则将其设置为未对齐。保留此命令是为了向后兼容。有关更通用的解决方案,请参阅 \pset
。
\bind
[ parameter
] ... #为下一个查询执行设置查询参数,并将指定的参数传递给任何参数占位符($1
等)。
示例
INSERT INTO tbl1 VALUES ($1, $2) \bind 'first value' 'second value' \g
这对于 \g
之外的查询执行命令(例如 \gx
和 \gset
)也有效。
此命令导致使用扩展查询协议(请参阅第 53.1.2 节),这与使用简单查询协议的普通 psql 操作不同。因此,此命令对于从 psql 测试扩展查询协议可能很有用。(即使查询没有参数并且此命令指定零个参数,也会使用扩展查询协议。)此命令仅影响执行的下一个查询;默认情况下,所有后续查询都将使用简单查询协议。
\c
或 \connect [ -reuse-previous=on|off
] [ dbname
[ username
] [ host
] [ port
] | conninfo
]
#建立与 PostgreSQL 服务器的新连接。要使用的连接参数可以使用位置语法(一个或多个数据库名称、用户、主机和端口)指定,也可以使用 conninfo
连接字符串指定,如第 32.1.1 节中所述。如果未提供任何参数,则使用与之前相同的参数建立新连接。
将 dbname
、username
、host
或 port
中的任何一个指定为 -
等同于省略该参数。
新连接可以重用先前连接中的连接参数;不仅包括数据库名称、用户、主机和端口,还包括其他设置,例如 sslmode
。默认情况下,参数在位置语法中重用,但在给出 conninfo
字符串时不重用。传递 -reuse-previous=on
或 -reuse-previous=off
的第一个参数会覆盖该默认值。如果重用参数,则未显式指定为位置参数或在 conninfo
字符串中的任何参数都取自现有连接的参数。一个例外是,如果使用位置语法将其 host
设置更改为其先前的值,则会删除现有连接的参数中存在的任何 hostaddr
设置。此外,只有在用户、主机和端口设置未更改时,才会重用现有连接的任何密码。当命令既不指定也不重用特定参数时,将使用 libpq 默认值。
如果新连接成功建立,则之前的连接会被关闭。如果连接尝试失败(用户名错误、拒绝访问等),如果 psql 处于交互模式,则会保留之前的连接。但是,当执行非交互式脚本时,旧连接会被关闭并报告错误。这可能会或可能不会终止脚本;如果脚本没有终止,则所有数据库访问命令都将失败,直到另一个 \connect
命令成功执行。选择这种区别是为了方便用户避免输入错误,同时也作为一种安全机制,防止脚本意外地对错误的数据库执行操作。请注意,无论何时 \connect
命令尝试重用参数,重用的值都是上次成功连接的值,而不是后续任何失败尝试的值。但是,在非交互式 \connect
失败的情况下,不允许稍后重用任何参数,因为脚本很可能期望重用失败的 \connect
中的值。
示例
=> \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 [ title
]
#设置任何作为查询结果打印的表的标题,或者取消任何此类标题。此命令等效于 \pset title
。(此命令的名称源于“标题”,因为它以前仅用于设置表格中的标题。)HTML表格。)title
\cd [ directory
]
#将当前工作目录更改为 directory
。如果没有参数,则更改为当前用户的家目录。
要打印当前工作目录,请使用 \! pwd
。
\conninfo
#输出有关当前数据库连接的信息。
\copy { table
[ ( column_list
) ] } from
{ 'filename'
| program 'command'
| stdin | pstdin } [ [ with ] ( option
[, ...] ) ] [ where condition
]
\copy { table
[ ( column_list
) ] | ( query
) } to
{ 'filename'
| program 'command'
| stdout | pstdout } [ [ with ] ( option
[, ...] ) ]
#执行前端(客户端)复制。这是一个运行SQL COPY
命令的操作,但不是由服务器读取或写入指定的文件,而是由 psql 读取或写入文件,并在服务器和本地文件系统之间路由数据。这意味着文件可访问性和权限属于本地用户,而不是服务器,并且不需要 SQL 超级用户权限。
当指定 program
时,command
由 psql 执行,并且从 command
传递或传递到 command
的数据在服务器和客户端之间路由。同样,执行权限属于本地用户,而不是服务器,并且不需要 SQL 超级用户权限。
对于 \copy ... from stdin
,数据行从发出命令的同一源读取,直到读取 \.
或流到达EOF为止。此选项对于在 SQL 脚本文件中内联填充表很有用。对于 \copy ... to stdout
,输出将发送到与 psql 命令输出相同的位置,并且不会打印 COPY
命令状态(因为它可能会与数据行混淆)。要读取/写入 psql 的标准输入或输出,而不管当前的命令源或 count
\o
选项如何,请写入 from pstdin
或 to pstdout
。
此命令的语法与SQL COPY
命令的语法相似。除了数据源/目标之外的所有选项都与 COPY
指定的相同。因此,特殊的解析规则适用于 \copy
元命令。与大多数其他元命令不同,始终将行的其余部分视为 \copy
的参数,并且不会在参数中执行变量插值或反引号扩展。
获得与 \copy ... to
相同结果的另一种方法是使用SQL COPY ... TO STDOUT
命令并使用 \g
或 filename
\g |
终止它。与 program
\copy
不同,此方法允许命令跨越多行;此外,可以使用变量插值和反引号扩展。
这些操作不如SQL 使用文件或程序数据源或目标的 COPY
命令高效,因为所有数据都必须通过客户端/服务器连接传递。对于大量数据,COPY
SQL命令可能更可取。此外,由于这种传递方法,在CSV模式下的 \copy ... from
会错误地将单独一行上的 \.
数据值视为输入结束标记。
\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
中找到的值,其顺序与查询结果中的相同,但删除了重复项。
水平标题,显示为第一行,包含在列 colH
中找到的值,并删除了重复项。默认情况下,它们以与查询结果中相同的顺序显示。但是,如果给出了可选的 sortcolH
参数,它会标识一个其值必须为整数的列,并且 colH
中的值将根据相应的 sortcolH
值排序后出现在水平标题中。
在交叉表网格内部,对于 colH
的每个不同值 x
和 colV
的每个不同值 y
,位于交点 (x,y)
的单元格包含查询结果行中 colD
列的值,其中 colH
的值为 x
,colV
的值为 y
。如果没有这样的行,则单元格为空。如果有多行这样的行,则会报告错误。
\d[S+] [ pattern
]
#对于每个与 pattern
匹配的关系(表、视图、物化视图、索引、序列或外部表)或复合类型,显示所有列、它们的类型、表空间(如果不是默认值)以及任何特殊属性,例如 NOT NULL
或默认值。还会显示关联的索引、约束、规则和触发器。对于外部表,还会显示关联的外部服务器。(“匹配模式”在下面的 模式 中定义。)
对于某些类型的关系,\d
会显示每列的附加信息:序列的列值、索引的索引表达式以及外部表的外部数据包装器选项。
命令形式 \d+
是相同的,只不过显示了更多信息:显示与表的列关联的任何注释,以及表中是否存在 OID、如果关系是视图则显示视图定义、非默认的副本标识设置,以及如果关系具有访问方法,则显示访问方法名称。
默认情况下,仅显示用户创建的对象;提供一个模式或 S
修饰符以包括系统对象。
如果 \d
在没有 pattern
参数的情况下使用,则它等效于 \dtvmsE
,它将显示所有可见的表、视图、物化视图、序列和外部表的列表。这纯粹是一种方便的措施。
\da[S] [ pattern
]
#列出聚合函数,以及它们的返回类型和它们操作的数据类型。如果指定了 pattern
,则仅显示名称与模式匹配的聚合。默认情况下,仅显示用户创建的对象;提供一个模式或 S
修饰符以包括系统对象。
\dA[+] [ pattern
]
#列出访问方法。如果指定了 pattern
,则仅显示名称与模式匹配的访问方法。如果将 +
附加到命令名称,则会列出每个访问方法及其关联的处理程序函数和描述。
\dAc[+] [访问方法模式
[输入类型模式
]]
#列出操作符类(参阅第 36.16.1 节)。如果指定了访问方法模式
,则只列出与名称匹配该模式的访问方法关联的操作符类。如果指定了输入类型模式
,则只列出与名称匹配该模式的输入类型关联的操作符类。如果将+
附加到命令名称,则会列出每个操作符类及其关联的操作符族和所有者。
\dAf[+] [访问方法模式
[输入类型模式
]]
#列出操作符族(参阅第 36.16.5 节)。如果指定了访问方法模式
,则只列出与名称匹配该模式的访问方法关联的操作符族。如果指定了输入类型模式
,则只列出与名称匹配该模式的输入类型关联的操作符族。如果将+
附加到命令名称,则会列出每个操作符族及其所有者。
\dAo[+] [访问方法模式
[操作符族模式
]]
#列出与操作符族关联的操作符(参阅第 36.16.2 节)。如果指定了访问方法模式
,则只列出与名称匹配该模式的访问方法关联的操作符族的成员。如果指定了操作符族模式
,则只列出与名称匹配该模式的操作符族的成员。如果将+
附加到命令名称,则会列出每个操作符及其排序操作符族(如果它是一个排序操作符)。
\dAp[+] [访问方法模式
[操作符族模式
]]
#列出与操作符族关联的支持函数(参阅第 36.16.3 节)。如果指定了访问方法模式
,则只列出与名称匹配该模式的访问方法关联的操作符族的函数。如果指定了操作符族模式
,则只列出与名称匹配该模式的操作符族的函数。如果将+
附加到命令名称,则会详细显示函数,包括它们的实际参数列表。
\db[+] [ 模式
]
#列出表空间。如果指定了模式
,则只显示名称与该模式匹配的表空间。如果将+
附加到命令名称,则会列出每个表空间及其相关选项、磁盘大小、权限和描述。
\dc[S+] [ 模式
]
#列出字符集编码之间的转换。如果指定了模式
,则只列出名称与该模式匹配的转换。默认情况下,只显示用户创建的对象;提供一个模式或S
修饰符以包括系统对象。如果将+
附加到命令名称,则会列出每个对象及其关联的描述。
\dconfig[+] [ 模式
]
#列出服务器配置参数及其值。如果指定了模式
,则只列出名称与该模式匹配的参数。如果没有模式
,则只列出设置为非默认值的参数。(使用\dconfig *
查看所有参数。)如果将+
附加到命令名称,则会列出每个参数及其数据类型、可以设置该参数的上下文以及访问权限(如果已授予非默认的访问权限)。
\dC[+] [ 模式
]
#列出类型转换。如果指定了模式
,则只列出源类型或目标类型与该模式匹配的转换。如果将+
附加到命令名称,则会列出每个对象及其关联的描述。
\dd[S] [ 模式
]
#显示类型为约束
、操作符类
、操作符族
、规则
和触发器
的对象的描述。所有其他注释可以通过这些对象类型的各自的反斜杠命令查看。
\dd
显示与模式
匹配的对象的描述,或者如果没有给出参数,则显示相应类型的可见对象的描述。但无论哪种情况,都只列出有描述的对象。默认情况下,只显示用户创建的对象;提供一个模式或S
修饰符以包括系统对象。
可以使用COMMENT
SQL命令创建对象的描述。
\dD[S+] [ 模式
]
#列出域。如果指定了模式
,则只显示名称与该模式匹配的域。默认情况下,只显示用户创建的对象;提供一个模式或S
修饰符以包括系统对象。如果将+
附加到命令名称,则会列出每个对象及其关联的权限和描述。
\ddp [ 模式
]
#列出默认访问权限设置。对于每个角色(以及适用的模式),如果其默认权限设置已从内置默认值更改,则会显示一个条目。如果指定了模式
,则只列出角色名称或模式名称与该模式匹配的条目。
ALTER DEFAULT PRIVILEGES
命令用于设置默认访问权限。权限显示的含义在第 5.8 节中解释。
\dE[S+] [ 模式
]
\di[S+] [ 模式
]
\dm[S+] [ 模式
]
\ds[S+] [ 模式
]
\dt[S+] [ 模式
]
\dv[S+] [ 模式
]
#在这组命令中,字母E
、i
、m
、s
、t
和v
分别代表外部表、索引、物化视图、序列、表和视图。您可以按任何顺序指定这些字母中的任何一个或全部,以获得这些类型的对象的列表。例如,\dti
列出表和索引。如果将+
附加到命令名称,则会列出每个对象的持久性状态(永久、临时或未记录)、磁盘上的物理大小以及关联的描述(如果有)。如果指定了模式
,则只列出名称与该模式匹配的对象。默认情况下,只显示用户创建的对象;提供一个模式或S
修饰符以包括系统对象。
\des[+] [ 模式
]
#列出外部服务器(助记:“外部服务器”)。如果指定了模式
,则只列出名称与该模式匹配的服务器。如果使用\des+
形式,则会显示每个服务器的完整描述,包括服务器的访问权限、类型、版本、选项和描述。
\det[+] [ 模式
]
#列出外部表(助记:“外部表”)。如果指定了模式
,则只列出表名称或模式名称与该模式匹配的条目。如果使用\det+
形式,还会显示通用选项和外部表描述。
\deu[+] [ 模式
]
#列出用户映射(助记:“外部用户”)。如果指定了模式
,则只列出用户名与该模式匹配的映射。如果使用\deu+
形式,则会显示有关每个映射的附加信息。
\deu+
还可能显示远程用户的用户名和密码,因此应注意不要泄露它们。
\dew[+] [ 模式
]
#列出外部数据包装器(助记:“外部包装器”)。如果指定了模式
,则只列出名称与该模式匹配的外部数据包装器。如果使用\dew+
形式,还会显示外部数据包装器的访问权限、选项和描述。
\df[anptwS+] [ 模式
[ 参数模式
... ] ]
#列出函数及其结果数据类型、参数数据类型和函数类型,函数类型分为 “agg”(聚合)、“normal”(普通)、“procedure”(过程)、“trigger”(触发器)或 “window”(窗口)。要仅显示特定类型的函数,请在命令中添加相应的字母 a
、n
、p
、t
或 w
。如果指定了 pattern
,则仅显示名称与模式匹配的函数。任何其他参数都是类型名称模式,这些模式与函数的第一个、第二个等等参数的类型名称匹配。(匹配函数可以具有比您指定的更多的参数。为了防止这种情况,请在最后一个 arg_pattern
中写入短划线 -
。)默认情况下,仅显示用户创建的对象;提供一个模式或 S
修饰符来包括系统对象。如果使用 \df+
形式,则会显示有关每个函数的其他信息,包括易失性、并行安全性、所有者、安全分类、访问权限、语言、内部名称(仅适用于 C 和内部函数)和描述。可以使用 \sf
查看特定函数的源代码。
\dF[+] [ pattern
]
#列出文本搜索配置。如果指定了 pattern
,则仅显示名称与模式匹配的配置。如果使用 \dF+
形式,则会显示每个配置的完整描述,包括底层文本搜索解析器和每个解析器令牌类型的字典列表。
\dFd[+] [ pattern
]
#列出文本搜索字典。如果指定了 pattern
,则仅显示名称与模式匹配的字典。如果使用 \dFd+
形式,则会显示有关每个选定字典的其他信息,包括底层文本搜索模板和选项值。
\dFp[+] [ pattern
]
#列出文本搜索解析器。如果指定了 pattern
,则仅显示名称与模式匹配的解析器。如果使用 \dFp+
形式,则会显示每个解析器的完整描述,包括底层函数和已识别的令牌类型列表。
\dFt[+] [ pattern
]
#列出文本搜索模板。如果指定了 pattern
,则仅显示名称与模式匹配的模板。如果使用 \dFt+
形式,则会显示有关每个模板的其他信息,包括底层函数名称。
\dg[S+] [ pattern
]
#列出数据库角色。(由于 “用户” 和 “组” 的概念已统一为 “角色”,因此此命令现在等效于 \du
。)默认情况下,仅显示用户创建的角色;提供 S
修饰符以包括系统角色。如果指定了 pattern
,则仅列出名称与模式匹配的角色。如果使用 \dg+
形式,则会显示有关每个角色的其他信息;目前这会添加每个角色的注释。
\dl[+]
#这是 \lo_list
的别名,用于显示大型对象列表。如果将 +
附加到命令名称,则会列出每个大型对象及其关联的权限(如果有)。
\dL[S+] [ pattern
]
#列出过程语言。如果指定了 pattern
,则仅列出名称与模式匹配的语言。默认情况下,仅显示用户创建的语言;提供 S
修饰符以包括系统对象。如果将 +
附加到命令名称,则会列出每种语言及其调用处理程序、验证器、访问权限以及是否为系统对象。
\dn[S+] [ pattern
]
#列出模式(命名空间)。如果指定了 pattern
,则仅列出名称与模式匹配的模式。默认情况下,仅显示用户创建的对象;提供一个模式或 S
修饰符来包括系统对象。如果将 +
附加到命令名称,则会列出每个对象及其关联的权限和描述(如果有)。
\do[S+] [ pattern
[ arg_pattern
[ arg_pattern
] ] ]
#列出运算符及其操作数和结果类型。如果指定了 pattern
,则仅列出名称与模式匹配的运算符。如果指定了一个 arg_pattern
,则仅列出右侧参数类型名称与该模式匹配的前缀运算符。如果指定了两个 arg_pattern
,则仅列出参数类型名称与这些模式匹配的二元运算符。(或者,为一元运算符的未使用参数写入 -
。)默认情况下,仅显示用户创建的对象;提供一个模式或 S
修饰符来包括系统对象。如果将 +
附加到命令名称,则会显示有关每个运算符的其他信息,目前仅显示底层函数的名称。
\dO[S+] [ pattern
]
#列出排序规则。如果指定了 pattern
,则仅列出名称与模式匹配的排序规则。默认情况下,仅显示用户创建的对象;提供一个模式或 S
修饰符来包括系统对象。如果将 +
附加到命令名称,则会列出每个排序规则及其关联的描述(如果有)。请注意,仅显示可用于当前数据库编码的排序规则,因此结果在同一安装的不同数据库中可能会有所不同。
\dp[S] [ pattern
]
#列出表、视图和序列及其关联的访问权限。如果指定了 pattern
,则仅列出名称与模式匹配的表、视图和序列。默认情况下,仅显示用户创建的对象;提供一个模式或 S
修饰符来包括系统对象。
\dP[itn+] [ pattern
]
#列出已分区的关系。如果指定了 pattern
,则仅列出名称与模式匹配的条目。可以将修饰符 t
(表)和 i
(索引)附加到命令,以过滤要列出的关系类型。默认情况下,会列出已分区的表和索引。
如果使用修饰符 n
(“嵌套”)或指定模式,则会包括非根分区关系,并且会显示一列,其中显示每个分区关系的父关系。
如果将 +
附加到命令名称,还会显示每个关系的分区大小总和以及关系的描述。如果 n
与 +
结合使用,则会显示两个大小:一个包括直接附加的叶子分区的总大小,另一个显示所有分区的总大小,包括间接附加的子分区。
\drds [ role-pattern
[ database-pattern
] ]
#列出已定义的配置设置。这些设置可以是特定于角色的、特定于数据库的或两者都有。role-pattern
和 database-pattern
分别用于选择要列出的特定角色和数据库。如果省略,或者如果指定了 *
,则会列出所有设置,包括那些分别不特定于角色或数据库的设置。
ALTER ROLE
和 ALTER DATABASE
命令用于定义每个角色和每个数据库的配置设置。
\drg[S] [ pattern
]
#列出有关每个已授予的角色成员资格的信息,包括分配的选项(ADMIN
、INHERIT
和/或 SET
)和授予者。有关角色成员资格的信息,请参阅 GRANT
命令。
默认情况下,仅显示对用户创建的角色的授权;提供 S
修饰符以包括系统角色。如果指定了 pattern
,则仅列出对名称与模式匹配的角色的授权。
\dRp[+] [ pattern
]
#列出复制发布。如果指定了 pattern
,则只列出名称与该模式匹配的发布。如果在命令名称后附加了 +
,则还会显示与每个发布关联的表和模式。
\dRs[+] [ pattern
]
#列出复制订阅。如果指定了 pattern
,则只列出名称与该模式匹配的订阅。如果在命令名称后附加了 +
,则会显示订阅的附加属性。
\dT[S+] [ pattern
]
#列出数据类型。如果指定了 pattern
,则只列出名称与该模式匹配的类型。如果在命令名称后附加了 +
,则会列出每个类型的内部名称和大小,如果它是 enum
类型,则会列出其允许的值,以及其关联的权限。默认情况下,只显示用户创建的对象;提供模式或 S
修饰符以包括系统对象。
\du[S+] [ pattern
]
#列出数据库角色。(由于 “用户” 和 “组” 的概念已统一为 “角色”,因此此命令现在等效于 \dg
。)默认情况下,只显示用户创建的角色;提供 S
修饰符以包括系统角色。如果指定了 pattern
,则只列出名称与该模式匹配的角色。如果使用 \du+
形式,则会显示有关每个角色的附加信息;目前这会添加每个角色的注释。
\dx[+] [ pattern
]
#列出已安装的扩展。如果指定了 pattern
,则只列出名称与该模式匹配的扩展。如果使用 \dx+
形式,则会列出每个匹配扩展的所有对象。
\dX [ pattern
]
#列出扩展统计信息。如果指定了 pattern
,则只列出名称与该模式匹配的扩展统计信息。
每种扩展统计信息的状态都显示在其统计信息类型(例如 Ndistinct)之后命名的列中。defined
表示在创建统计信息时请求了该信息,而 NULL 表示未请求。如果您想知道是否已运行 ANALYZE
并且统计信息是否可用于计划器,可以使用 pg_stats_ext
。
\dy[+] [ pattern
]
#列出事件触发器。如果指定了 pattern
,则只列出名称与该模式匹配的事件触发器。如果在命令名称后附加了 +
,则会列出每个对象及其关联的描述。
\e
或 \edit
[ filename
] [ line_number
]
#如果指定了 filename
,则会编辑该文件;编辑器退出后,文件的内容会复制到当前查询缓冲区。如果未提供 filename
,则当前查询缓冲区会复制到临时文件,然后以相同的方式进行编辑。或者,如果当前查询缓冲区为空,则会将最近执行的查询复制到临时文件,并以相同的方式进行编辑。
如果您编辑文件或上一个查询,并且退出编辑器而未修改文件,则会清除查询缓冲区。否则,查询缓冲区的新内容会根据 psql 的正常规则进行重新解析,并将整个缓冲区视为单行。任何完整的查询都会立即执行;也就是说,如果查询缓冲区包含或以分号结尾,则会执行到该点为止的所有内容,并从查询缓冲区中删除。查询缓冲区中保留的任何内容都会重新显示。键入分号或 \g
来发送它,或键入 \r
来通过清除查询缓冲区来取消它。
将缓冲区视为单行主要影响元命令:元命令之后缓冲区中的任何内容都将被视为元命令的参数,即使它跨越多行。(因此,您不能以这种方式创建使用元命令的脚本。为此,请使用 \i
。)
如果指定了行号,则 psql 会将光标定位在文件或查询缓冲区的指定行上。请注意,如果给出了单个全数字参数,则 psql 会假定它是一个行号,而不是文件名。
有关如何配置和自定义编辑器,请参阅下面的 环境。
\echo text
[ ... ]
#将评估后的参数打印到标准输出,以空格分隔并后跟换行符。这对于在脚本输出中穿插信息非常有用。例如
=> \echo `date`
Tue Oct 26 21:40:57 CEST 1999
如果第一个参数是未加引号的 -n
,则不会写入尾随换行符(也不会写入第一个参数)。
如果您使用 \o
命令重定向查询输出,则可能希望使用 \qecho
而不是此命令。另请参阅 \warn
。
\ef [ function_description
[ line_number
] ]
#此命令以 CREATE OR REPLACE FUNCTION
或 CREATE OR REPLACE PROCEDURE
命令的形式,获取并编辑已命名函数或过程的定义。编辑方式与 \edit
相同。如果您退出编辑器而不保存,则该语句将被丢弃。如果您保存并退出编辑器,则如果您向其添加了分号,则会立即执行更新的命令。否则,它会重新显示;键入分号或 \g
发送它,或键入 \r
取消。
可以通过仅使用名称来指定目标函数,或者通过名称和参数来指定目标函数,例如 foo(integer, text)
。如果具有相同名称的函数不止一个,则必须给出参数类型。
如果未指定函数,则会显示一个空白的 CREATE FUNCTION
模板以进行编辑。
如果指定了行号,则 psql 会将光标定位在函数体的指定行上。(请注意,函数体通常不是从文件的第一行开始的。)
与大多数其他元命令不同,行的其余部分始终被视为 \ef
的参数,并且不会在参数中执行变量插值或反引号扩展。
有关如何配置和自定义编辑器,请参阅下面的 环境。
\encoding [ encoding
]
#设置客户端字符集编码。如果没有参数,此命令会显示当前编码。
\errverbose
#以最大详细程度重复最近的服务器错误消息,就像 VERBOSITY
设置为 verbose
并且 SHOW_CONTEXT
设置为 always
一样。
\ev [ view_name
[ line_number
] ]
#此命令以 CREATE OR REPLACE VIEW
命令的形式,获取并编辑已命名视图的定义。编辑方式与 \edit
相同。如果您退出编辑器而不保存,则该语句将被丢弃。如果您保存并退出编辑器,则如果您向其添加了分号,则会立即执行更新的命令。否则,它会重新显示;键入分号或 \g
发送它,或键入 \r
取消。
如果未指定视图,则会显示一个空白的 CREATE VIEW
模板以进行编辑。
如果指定了行号,则 psql 会将光标定位在视图定义的指定行上。
与大多数其他元命令不同,行的其余部分始终被视为 \ev
的参数,并且不会在参数中执行变量插值或反引号扩展。
\f [ string
]
#设置未对齐查询输出的字段分隔符。默认值为竖线 (|
)。它等效于 \pset fieldsep
。
\g [ (option
=value
[...]) ] [ filename
]
\g [ (option
=value
[...]) ] [ |command
]
#将当前查询缓冲区发送到服务器以执行。
如果 \g
之后出现括号,则它们会包含一个以空格分隔的 option
=
value
格式选项子句列表,这些子句的解释方式与 \pset
option
value
命令相同,但仅在此查询期间生效。在此列表中,不允许在 =
符号周围使用空格,但在选项子句之间是必需的。如果省略了 =
value
,则会以与没有显式 value
的 \pset
option
相同的方式更改已命名的 option
。
如果给定 filename
或 |
command
参数,查询的输出将写入指定的文件或通过管道传递给指定的 shell 命令,而不是像通常那样显示。只有当查询成功返回零个或多个元组时,才会写入文件或命令,而不是当查询失败或是一个不返回数据的 SQL 命令时。
如果当前的查询缓冲区为空,则会重新执行最近发送的查询。除了这种行为之外,不带任何参数的 \g
本质上等同于分号。带参数的 \g
提供了一个与 \o
命令对应的 “一次性” 替代方案,并且还允许对通常由 \pset
设置的输出格式选项进行一次性调整。
当最后一个参数以 |
开头时,整行剩余部分被视为要执行的 command
,并且不会对其执行变量插值或反引号扩展。该行的其余部分只是按字面传递给 shell。
\gdesc
#显示当前查询缓冲区的结果的描述(即列名和数据类型)。查询实际上不会被执行;但是,如果它包含某种类型的语法错误,则会以正常方式报告该错误。
如果当前查询缓冲区为空,则会描述最近发送的查询。
\getenv psql_var
env_var
#获取环境变量 env_var
的值,并将其分配给 psql 变量 psql_var
。如果 env_var
未在 psql 进程的环境中定义,则 psql_var
不会更改。示例:
=>\getenv home HOME
=>\echo :home
/home/postgres
\gexec
#将当前查询缓冲区发送到服务器,然后将查询输出的每一行的每一列(如果有)视为要执行的 SQL 语句。例如,要在 my_table
的每一列上创建索引
=>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
,否则将继续执行其余查询。每个查询的执行都受 ECHO
处理的影响。(建议在使用 \gexec
时将 ECHO
设置为 all
或 queries
。)查询日志记录、单步模式、计时和其他查询执行功能也适用于每个生成的查询。
如果当前查询缓冲区为空,则会重新执行最近发送的查询。
\gset [ prefix
]
#将当前查询缓冲区发送到服务器,并将查询的输出存储到 psql 变量中(请参见下面的变量)。要执行的查询必须恰好返回一行。该行的每一列都存储到一个单独的变量中,该变量的名称与该列相同。例如
=>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 [ (option
=value
[...]) ] [ filename
]
\gx [ (option
=value
[...]) ] [ |command
]
#\gx
等效于 \g
,只不过它为此查询强制使用扩展输出模式,就像在 \pset
选项列表中包含 expanded=on
一样。另请参阅 \x
。
\h
或 \help
[ command
]
#给出指定SQL命令的语法帮助。如果未指定 command
,则 psql 将列出所有可用的语法帮助命令。如果 command
是一个星号(*
),则将显示所有SQL命令的语法帮助。
与大多数其他元命令不同,整行剩余部分始终被视为 \help
的参数,并且不会在参数中执行变量插值或反引号扩展。
为了简化输入,由多个单词组成的命令不必用引号引起来。因此,键入 \help alter table
是可以的。
\H
或 \html
#开启HTML查询输出格式。如果HTML格式已开启,则将其切换回默认的对齐文本格式。此命令是为了兼容性和方便性而提供的,但有关设置其他输出选项的信息,请参阅 \pset
。
\i
或 \include
filename
#从文件 filename
读取输入,并像在键盘上键入一样执行它。
如果 filename
为 -
(连字符),则读取标准输入,直到出现 EOF 指示或 \q
元命令为止。这可以用于将交互式输入与来自文件的输入穿插起来。请注意,只有在最外层级别处于活动状态时,才会使用 Readline 行为。
如果要在读取时在屏幕上看到这些行,则必须将变量 ECHO
设置为 all
。
\if
expression
\elif
expression
\else
\endif
#这组命令实现可嵌套的条件块。条件块必须以 \if
开头,以 \endif
结尾。在这之间,可以有任意数量的 \elif
子句,这些子句可以选择后跟一个 \else
子句。形成条件块的命令之间可能会(而且通常会)出现普通查询和其他类型的反斜杠命令。
\if
和 \elif
命令读取其参数并将其评估为布尔表达式。如果表达式产生 true
,则处理将正常继续;否则,将跳过这些行,直到到达匹配的 \elif
、\else
或 \endif
为止。一旦 \if
或 \elif
测试成功,则不会评估同一块中稍后 \elif
命令的参数,而是将其视为 false。仅当之前没有匹配的 \if
或 \elif
成功时,才会处理 \else
后面的行。
\if
或 \elif
命令的 expression
参数会像任何其他反斜杠命令参数一样接受变量插值和反引号扩展。之后,它会像 on/off 选项变量的值一样进行评估。因此,有效值是以下各项之一的任何明确的、不区分大小写的匹配项:true
、false
、1
、0
、on
、off
、yes
、no
。例如,t
、T
和 tR
都将被视为 true
。
不能正确评估为 true 或 false 的表达式将生成警告,并被视为 false。
跳过的行会像正常一样进行解析,以识别查询和反斜杠命令,但是查询不会发送到服务器,并且除了条件命令(\if
、\elif
、\else
、\endif
)之外的反斜杠命令将被忽略。仅检查条件命令的有效嵌套。跳过的行中的变量引用不会扩展,也不会执行反引号扩展。
给定条件块的所有反斜杠命令都必须出现在同一源文件中。如果在关闭所有本地 \if
块之前到达主输入文件或 \include
的文件的 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_list
查找大型对象的OID.
\lo_import filename
[ comment
]
#将文件存储到 PostgreSQL 大型对象中。 可以选择将给定的注释与对象关联。 示例:
foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801
响应表明大型对象接收到对象 ID 152801,该 ID 可用于在将来访问新创建的大型对象。 为了便于阅读,建议始终将人类可读的注释与每个对象关联。 可以使用 \lo_list
命令查看 OID 和注释。
请注意,此命令与服务器端的 lo_import
略有不同,因为它充当本地文件系统上的本地用户,而不是服务器的用户和文件系统。
\lo_list[+]
#显示当前存储在数据库中的所有 PostgreSQL 大型对象的列表,以及为它们提供的任何注释。 如果在命令名称后附加 +
,则会列出每个大型对象及其关联的权限(如果有)。
\lo_unlink loid
#删除具有OID loid
的大型对象。
使用 \lo_list
查找大型对象的OID.
\o
或 \out [ filename
]
\o
或 \out [ |command
]
#安排将以后的查询结果保存到文件 filename
,或者将以后的结果通过管道传递到 shell 命令 command
。 如果未指定任何参数,则将查询输出重置为标准输出。
如果参数以 |
开头,则将该行的其余部分视为要执行的 command
,并且不会在其内部执行变量插值或反引号扩展。 该行的其余部分只是按字面传递给 shell。
“查询结果”包括从数据库服务器获得的所有表、命令响应和通知,以及查询数据库的各种反斜杠命令(例如 \d
)的输出;但不包括错误消息。
要在查询结果之间插入文本输出,请使用 \qecho
。
\p
或 \print
#将当前查询缓冲区打印到标准输出。 如果当前查询缓冲区为空,则改为打印最近执行的查询。
\password [ username
]
#更改指定用户的密码(默认为当前用户)。 此命令会提示输入新密码,对其进行加密,并将其作为 ALTER ROLE
命令发送到服务器。 这可以确保新密码不会以明文形式出现在命令历史记录、服务器日志或其他位置。
\prompt [ text
] name
#提示用户提供文本,该文本将被分配给变量 name
。 可以指定可选的提示字符串 text
。(对于多词提示,请用单引号将文本括起来。)
默认情况下,\prompt
使用终端进行输入和输出。 但是,如果使用了 -f
命令行开关,则 \prompt
将使用标准输入和标准输出。
\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
非零,则文件和管道输出也会包装到该宽度。
csv_fieldsep
#指定在CSV输出格式中使用的字段分隔符。 如果分隔符字符出现在字段的值中,则该字段将用双引号引起来输出,遵循标准的CSV规则。 默认值为逗号。
expanded
(或 x
) #如果指定了 value
,则它必须是 on
或 off
,这将启用或禁用扩展模式,或者 auto
。 如果省略 value
,则该命令会在开和关设置之间切换。 启用扩展模式后,查询结果将显示在两列中,左侧是列名,右侧是数据。 如果数据无法以正常的“水平”模式显示在屏幕上,则此模式很有用。 在自动设置中,只要查询输出具有多列且比屏幕宽时,就会使用扩展模式;否则,使用常规模式。 自动设置仅在对齐和包装格式中有效。 在其他格式中,其行为始终就像扩展模式已关闭。
fieldsep
#指定在未对齐输出格式中使用的字段分隔符。 这样,例如,可以创建制表符分隔的输出,其他程序可能更喜欢这种输出。 要将制表符设置为字段分隔符,请键入 \pset fieldsep '\t'
。 默认字段分隔符为 '|'
(竖线)。
fieldsep_zero
#将未对齐输出格式中使用的字段分隔符设置为零字节。
footer
#如果指定了 value
,则它必须是 on
或 off
,这将启用或禁用表格页脚((
计数)的显示。 如果省略 n
rows)value
,则该命令会切换页脚显示开或关。
format
#将输出格式设置为 aligned
、asciidoc
、csv
、html
、latex
、latex-longtable
、troff-ms
、unaligned
或 wrapped
之一。 允许使用唯一缩写。
aligned
格式是标准的、人类可读的、格式良好的文本输出;这是默认设置。
unaligned
格式将一行中的所有列写在一行上,并用当前活动的字段分隔符分隔。 这对于创建可能打算由其他程序读取的输出很有用,例如,制表符分隔或逗号分隔的格式。 但是,如果字段分隔符字符出现在列的值中,则不会对其进行特殊处理;因此,CSV格式可能更适合此类用途。
csv
格式 写入用逗号分隔的列值,并应用 RFC 4180 中描述的引号规则。 此输出与服务器 COPY
命令的 CSV 格式兼容。除非 tuples_only
参数为 on
,否则会生成带有列名的标题行。 不打印标题和页脚。 每行都以系统相关的行尾字符结束,对于类 Unix 系统,该字符通常是单个换行符 (\n
),对于 Microsoft Windows,则是回车符和换行符序列 (\r\n
)。 可以使用 \pset csv_fieldsep
选择逗号以外的字段分隔符字符。
wrapped
格式类似于 aligned
,但会将宽数据值跨行包装,以使输出适合目标列宽度。 目标宽度是根据 columns
选项下所述确定的。 请注意,如果列标题所需的总宽度超过目标宽度,则 psql 不会尝试包装列标题;因此,wrapped
格式的行为与 aligned
相同。
asciidoc
、html
、latex
、latex-longtable
和 troff-ms
格式输出的表格旨在包含在使用相应标记语言的文档中。它们不是完整的文档!这在HTML中可能不是必需的,但在 LaTeX 中,你必须有一个完整的文档包装器。latex
格式使用 LaTeX 的 tabular
环境。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
选项为 off
时,不使用寻呼程序程序。当 pager
选项为 on
时,在适当的时候使用寻呼程序,即当输出到终端并且无法在屏幕上显示时。也可以将 pager
选项设置为 always
,这将导致寻呼程序用于所有终端输出,无论其是否适合屏幕。\pset pager
没有 value
会打开和关闭寻呼程序的使用。
如果设置了环境变量 PSQL_PAGER
或 PAGER
,则要寻呼的输出将通过管道传递到指定的程序。否则,将使用平台相关的默认程序(例如 more
)。
当使用 \watch
命令重复执行查询时,在 Unix 系统上,将使用环境变量 PSQL_WATCH_PAGER
来查找寻呼程序程序。这是单独配置的,因为它可能会混淆传统的寻呼程序,但可用于将输出发送到理解 psql 输出格式的工具(例如 pspg --stream
)。
pager_min_lines
#如果将 pager_min_lines
设置为大于页面高度的数字,则仅当要显示的输出行至少有这么多行时才会调用寻呼程序程序。默认设置为 0。
recordsep
#指定要在不对齐的输出格式中使用的记录(行)分隔符。默认为换行符。
recordsep_zero
#将在不对齐的输出格式中使用的记录分隔符设置为零字节。
tableattr
(或 T
) #在HTML格式中,这指定要放置在 table
标记内的属性。例如,这可以是 cellpadding
或 bgcolor
。请注意,你可能不想在此处指定 border
,因为它已经由 \pset border
处理。如果未给出 value
,则会取消设置表属性。
在 latex-longtable
格式中,这控制包含左对齐数据类型的每一列的比例宽度。它指定为以空格分隔的值列表,例如,'0.2 0.2 0.6'
。未指定的输出列使用最后指定的值。
title
(或 C
) #为随后打印的任何表设置表标题。这可以用来为你的输出提供描述性标签。如果未给出 value
,则会取消设置标题。
tuples_only
(或 t
) #如果指定了 value
,则它必须是 on
或 off
,这将启用或禁用仅元组模式。如果省略 value
,则该命令会在常规和仅元组输出之间切换。常规输出包括额外的诸如列标题、标题和各种页脚之类的信息。在仅元组模式下,仅显示实际的表数据。
unicode_border_linestyle
#将 unicode
线条样式的边框绘制样式设置为 single
或 double
之一。
unicode_column_linestyle
#将 unicode
线条样式的列绘制样式设置为 single
或 double
之一。
unicode_header_linestyle
#将 unicode
线条样式的标题绘制样式设置为 single
或 double
之一。
xheader_width
#将扩展输出的标题的最大宽度设置为 full
(默认值)、column
、page
或一个 整数值
。
full
:不截断扩展的标题,并且它将与最宽的输出行一样宽。
column
:将标题行截断为第一列的宽度。
page
:将标题行截断为终端宽度。
整数值
:指定标题行的确切最大宽度。
这些不同格式的外观示例可以在下面的 示例 中看到。
有各种用于 \pset
的快捷命令。请参阅 \a
、\C
、\f
、\H
、\t
、\T
和 \x
。
\q
或 \quit
#退出 psql 程序。在脚本文件中,仅终止该脚本的执行。
\qecho text
[ ... ]
#此命令与 \echo
相同,只是输出将写入由 \o
设置的查询输出通道。
\r
或 \reset
#重置(清除)查询缓冲区。
\s [ filename
]
#将 psql 的命令行历史记录打印到 filename
。如果省略 filename
,则会将历史记录写入标准输出(如果适用,则使用寻呼程序)。如果 psql 是在没有 Readline 支持的情况下构建的,则此命令不可用。
\set [ name
[ value
[ ... ] ] ]
#将 psql 变量 name
设置为 value
,或者,如果给出了多个值,则设置为它们全部的串联。如果只给出一个参数,则变量将设置为空字符串值。要取消设置变量,请使用 \unset
命令。
没有参数的 \set
显示所有当前设置的 psql 变量的名称和值。
有效的变量名称可以包含字母、数字和下划线。有关详细信息,请参阅下面的 变量。变量名称区分大小写。
某些变量是特殊的,因为它们控制 psql 的行为或自动设置为反映连接状态。这些变量记录在下面的 变量 中。
此命令与SQL命令 SET
无关。
\setenv name
[ value
]
#将环境变量 name
设置为 value
,或者,如果未提供 value
,则取消设置环境变量。示例
testdb=>\setenv PAGER less
testdb=>\setenv LESS -imx4F
\sf[+] function_description
#此命令获取并显示指定函数或过程的定义,以 CREATE OR REPLACE FUNCTION
或 CREATE OR REPLACE PROCEDURE
命令的形式呈现。该定义将打印到当前查询输出通道,该通道由 \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
\timing [ on
| off
]
#带参数时,打开或关闭显示每个 SQL 语句所花费的时间。不带参数时,切换显示开和关。显示以毫秒为单位;超过 1 秒的间隔也以分钟:秒格式显示,如果需要,还会添加小时和天数字段。
\unset name
#取消设置(删除)psql 变量 name
。
大多数控制 psql 行为的变量无法取消设置;相反,\unset
命令被解释为将它们设置为默认值。请参阅下面的 变量。
\w
或 \write
filename
\w
或 \write
|
command
#将当前查询缓冲区写入文件 filename
或将其通过管道传输到 shell 命令 command
。如果当前查询缓冲区为空,则会写入最近执行的查询。
如果参数以 |
开头,则将该行的其余部分视为要执行的 command
,并且不会在其内部执行变量插值或反引号扩展。 该行的其余部分只是按字面传递给 shell。
\warn text
[ ... ]
#此命令与 \echo
相同,只是输出将写入 psql 的标准错误通道,而不是标准输出。
\watch [ i[nterval]=seconds
] [ c[ount]=times
] [ m[in_rows]=rows
] [ seconds
]
#重复执行当前查询缓冲区(如 \g
所做的那样),直到被中断,或者查询失败,或者达到执行计数限制(如果给定),或者查询不再返回最小行数。在执行之间等待指定的秒数(默认为 2)。为了向后兼容,seconds
可以带有或不带有 interval=
前缀指定。每个查询结果都显示一个标头,其中包括 \pset title
字符串(如果有)、查询开始时间以及延迟间隔。
如果当前查询缓冲区为空,则会重新执行最近发送的查询。
\x [ on
| off
| auto
]
#设置或切换扩展表格式模式。因此,它等效于 \pset expanded
。
\z[S] [ pattern
]
#列出表、视图和序列及其关联的访问权限。如果指定了 pattern
,则仅列出名称与该模式匹配的表、视图和序列。默认情况下,仅显示用户创建的对象;提供模式或 S
修饰符以包含系统对象。
这是 \dp
(“显示权限”)的别名。
\! [ command
]
#没有参数时,会转义到子 shell;当子 shell 退出时,psql 恢复。带有参数时,执行 shell 命令 command
。
与大多数其他元命令不同,行的剩余部分始终被视为 \!
的参数,并且不会在参数中执行变量插值或反引号扩展。行的其余部分只是按字面意思传递给 shell。
\? [ topic
]
#显示帮助信息。可选的 topic
参数(默认为 commands
)选择要解释的 psql 的哪个部分:commands
描述 psql 的反斜杠命令;options
描述可以传递给 psql 的命令行选项;variables
显示关于 psql 配置变量的帮助。
\;
#反斜杠-分号与前面的命令不同,它不是元命令;而是仅仅导致将分号添加到查询缓冲区,而无需进行任何进一步处理。
通常,psql 一旦到达命令结尾分号,就会将 SQL 命令分派给服务器,即使当前行上仍有更多输入。因此,例如输入
select 1; select 2; select 3;
将导致将三个 SQL 命令分别发送到服务器,每个命令的结果都会在继续下一个命令之前显示。但是,以 \;
形式输入的分号不会触发命令处理,因此它之前的命令和它之后的命令被有效地组合起来,并在一个请求中发送到服务器。因此,例如
select 1\; select 2\; select 3;
当到达非反斜杠分号时,会导致在单个请求中将三个 SQL 命令发送到服务器。除非字符串中包含显式的 BEGIN
/COMMIT
命令将其划分为多个事务,否则服务器会将此类请求作为单个事务执行。(有关服务器如何处理多查询字符串的更多详细信息,请参阅 第 53.2.2.1 节)。
各种 \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
开头的模式中。当没有出现点时,模式仅匹配当前模式搜索路径中可见的对象。同样,双引号内的点会失去其特殊含义,而是按字面意思匹配。包含两个点(.
)的关系模式被解释为数据库名称,后跟模式名称模式,后跟对象名称模式。数据库名称部分将不会被视为模式,并且必须与当前连接的数据库的名称匹配,否则将引发错误。
包含点(.
)的模式被解释为数据库名称后跟模式名称模式。例如,\dn mydb.*foo*
显示所有模式名称包含 foo
的模式。数据库名称部分不会被视为模式,必须与当前连接的数据库的名称匹配,否则会引发错误。
高级用户可以使用正则表达式表示法,例如字符类,例如 [0-9]
来匹配任何数字。所有正则表达式特殊字符的工作方式都如 第 9.7.3 节 中指定的那样,除了 .
(如上所述,它被视为分隔符)、*
(被转换为正则表达式表示法 .*
)、?
(被转换为 .
)以及 $
(按字面意思匹配)之外。 您可以根据需要通过编写 ?
来模拟这些模式字符以表示 .
,编写 (
来表示 R
+|)
,或者编写 R
*(
来表示 R
|)
。R
?$
不需要作为正则表达式字符,因为模式必须匹配整个名称,这与通常的正则表达式解释不同(换句话说,$
会自动附加到您的模式)。 如果您不希望模式被锚定,请在开头和/或结尾写入 *
。请注意,在双引号内,所有正则表达式特殊字符都会失去其特殊含义,并按字面意思匹配。此外,正则表达式特殊字符在运算符名称模式中按字面意思匹配(即,\do
的参数)。
psql 提供了类似于常见 Unix 命令 shell 的变量替换功能。变量只是名称/值对,其中值可以是任何长度的字符串。名称必须由字母(包括非拉丁字母)、数字和下划线组成。
要设置变量,请使用 psql 元命令 \set
。例如,
testdb=> \set foo bar
将变量 foo
设置为值 bar
。要检索变量的内容,请在名称前加上冒号,例如
testdb=> \echo :foo
bar
这在常规 SQL 命令和元命令中都有效;在下面的 SQL 插值 中有更多详细信息。
如果在没有第二个参数的情况下调用 \set
,则会将变量设置为空字符串值。要取消设置(即,删除)变量,请使用命令 \unset
。要显示所有变量的值,请在不带任何参数的情况下调用 \set
。
\set
的参数与其他命令一样受相同的替换规则约束。因此,您可以构建有趣的引用,例如 \set :foo 'something'
,并获得 “软链接” 或 “变量变量”(分别为 Perl 或 PHP 的特性)。不幸的是(或者幸运的是?),没有办法使用这些结构做任何有用的事情。另一方面,\set bar :foo
是复制变量的完全有效的方法。
这些变量中的许多都由 psql 特殊处理。它们表示某些选项设置,可以通过更改变量的值在运行时更改,或者在某些情况下表示 psql 的可更改状态。按照惯例,所有特殊处理的变量的名称都由所有大写的 ASCII 字母(以及可能的数字和下划线)组成。为了确保未来最大的兼容性,请避免将此类变量名称用于您自己的目的。
控制 psql 行为的变量通常无法取消设置或设置为无效值。\unset
命令是允许的,但会被解释为将变量设置为其默认值。没有第二个参数的 \set
命令会被解释为将变量设置为 on
,对于接受该值的控制变量,并且会被其他变量拒绝。此外,接受值 on
和 off
的控制变量也将接受布尔值的其他常用拼写,例如 true
和 false
。
特殊处理的变量是
AUTOCOMMIT
#当 on
(默认)时,每个 SQL 命令在成功完成后都会自动提交。要在此模式下推迟提交,您必须输入 BEGIN
或 START TRANSACTION
SQL 命令。当 off
或未设置时,SQL 命令不会提交,直到您显式发出 COMMIT
或 END
。自动提交关闭模式的工作方式是为您发出一个隐式的 BEGIN
,就在任何尚未在事务块中且本身不是 BEGIN
或其他事务控制命令的命令之前,以及任何无法在事务块内执行的命令(例如 VACUUM
)。
在自动提交关闭模式下,您必须通过输入 ABORT
或 ROLLBACK
来显式放弃任何失败的事务。还要记住,如果您在不提交的情况下退出会话,您的工作将会丢失。
自动提交开启模式是 PostgreSQL 的传统行为,但自动提交关闭模式更接近 SQL 规范。如果您更喜欢自动提交关闭模式,您可能希望在系统范围的 psqlrc
文件或您的 ~/.psqlrc
文件中设置它。
COMP_KEYWORD_CASE
#确定在完成 SQL 关键字时要使用哪个字母大小写。如果设置为 lower
或 upper
,则完成的单词将分别为小写或大写。如果设置为 preserve-lower
或 preserve-upper
(默认值),则完成的单词将采用已输入的单词的大小写,但没有输入任何内容的情况下完成的单词将分别为小写或大写。
DBNAME
#您当前连接的数据库的名称。每次您连接到数据库(包括程序启动)时都会设置此名称,但可以更改或取消设置。
ECHO
#如果设置为 all
,则所有非空输入行在读取时都会打印到标准输出。(这不适用于以交互方式读取的行。)要在程序启动时选择此行为,请使用开关 -a
。如果设置为 queries
,则 psql 会在将每个查询发送到服务器时将其打印到标准输出。选择此行为的开关是 -e
。如果设置为 errors
,则只会在标准错误输出上显示失败的查询。此行为的开关是 -b
。如果设置为 none
(默认值),则不会显示任何查询。
ECHO_HIDDEN
#当此变量设置为 on
并且反斜杠命令查询数据库时,会首先显示查询。此功能可帮助您研究 PostgreSQL 的内部结构,并在您自己的程序中提供类似的功能。(要在程序启动时选择此行为,请使用开关 -E
。)如果您将此变量设置为值 noexec
,则只会显示查询,而不会实际发送到服务器并执行。默认值为 off
。
ENCODING
#当前客户端字符集编码。每次您连接到数据库(包括程序启动)时都会设置此编码,并且当您使用 \encoding
更改编码时也会设置此编码,但可以更改或取消设置它。
ERROR
#如果上一个 SQL 查询失败,则为 true
;如果成功,则为 false
。另请参阅 SQLSTATE
。
FETCH_COUNT
#如果此变量设置为大于零的整数值,则 SELECT
查询的结果会以该行数的分组进行提取和显示,而不是默认行为,即在显示之前收集整个结果集。因此,无论结果集的大小如何,都只会使用有限的内存。启用此功能时,通常使用 100 到 1000 的设置。请记住,当使用此功能时,查询可能会在已经显示某些行后失败。
虽然您可以将任何输出格式与此功能一起使用,但默认的 aligned
格式往往看起来很糟糕,因为每组 FETCH_COUNT
行将单独格式化,从而导致行组的列宽度变化。其他输出格式效果更好。
HIDE_TABLEAM
#如果此变量设置为 true
,则不会显示表的访问方法详细信息。这主要用于回归测试。
HIDE_TOAST_COMPRESSION
#如果此变量设置为 true
,则不会显示列压缩方法详细信息。这主要用于回归测试。
HISTCONTROL
#如果此变量设置为 ignorespace
,则以空格开头的行不会输入到历史列表中。如果设置为 ignoredups
的值,则与上一个历史记录行匹配的行不会输入。值 ignoreboth
组合了这两个选项。如果设置为 none
(默认值),则以交互模式读取的所有行都会保存在历史记录列表中。
此功能是从 Bash 中无耻地抄袭来的。
HISTFILE
#用于存储历史列表的文件名。如果未设置,则文件名取自 PSQL_HISTORY
环境变量。如果该环境变量也未设置,则默认值为 ~/.psql_history
,在 Windows 上为 %APPDATA%\postgresql\psql_history
。例如,将
\set HISTFILE ~/.psql_history-:DBNAME
放入 ~/.psqlrc
中将使 psql 为每个数据库维护单独的历史记录。
此功能是从 Bash 中无耻地抄袭来的。
HISTSIZE
#命令历史记录中要存储的最大命令数(默认值为 500)。如果设置为负值,则不应用限制。
此功能是从 Bash 中无耻地抄袭来的。
HOST
#您当前连接的数据库服务器主机。每次您连接到数据库(包括程序启动时)都会设置此值,但可以更改或取消设置。
IGNOREEOF
#如果设置为 1 或更小的值,则向 psql 的交互式会话发送EOF字符(通常是 Control+D)将终止应用程序。如果设置为较大的数值,则必须键入这么多连续的EOF字符才能使交互式会话终止。如果变量设置为非数值,则将其解释为 10。默认值为 0。
此功能是从 Bash 中无耻地抄袭来的。
LASTOID
#从 INSERT
或 \lo_import
命令返回的最后影响的 OID 值。此变量仅保证在下一个命令的结果显示后才有效。SQL自 12 版本以来的 PostgreSQL 服务器不再支持 OID 系统列,因此当针对此类服务器时,INSERT
后的 LASTOID 将始终为 0。
LAST_ERROR_MESSAGE
LAST_ERROR_SQLSTATE
#当前 psql 会话中最近失败查询的主要错误消息和相关的 SQLSTATE 代码,如果当前会话中没有发生错误,则为空字符串和 00000
。
ON_ERROR_ROLLBACK
#当设置为 on
时,如果事务块中的语句生成错误,则会忽略该错误,并且事务继续。当设置为 interactive
时,此类错误仅在交互式会话中被忽略,而在读取脚本文件时则不会。当设置为 off
(默认值)时,事务块中生成错误的语句会中止整个事务。错误回滚模式的工作方式是在事务块中每个命令之前为您发出一个隐式的 SAVEPOINT
,然后在命令失败时回滚到保存点。
ON_ERROR_STOP
#默认情况下,在发生错误后命令处理会继续。当此变量设置为 on
时,处理将立即停止。在交互模式下,psql 将返回到命令提示符;否则,psql 将退出,返回错误代码 3,以区分此情况与使用错误代码 1 报告的致命错误情况。在任何一种情况下,任何当前正在运行的脚本(如果有,则为顶级脚本,以及它可能调用的任何其他脚本)都将立即终止。如果顶级命令字符串包含多个 SQL 命令,则处理将在当前命令处停止。
PORT
#您当前连接的数据库服务器端口。每次您连接到数据库(包括程序启动时)都会设置此值,但可以更改或取消设置。
PROMPT1
PROMPT2
PROMPT3
#这些指定 psql 发出的提示符应该是什么样子。请参阅下面的提示符。
QUIET
#将此变量设置为 on
等同于命令行选项 -q
。它在交互模式下可能不是很有用。
ROW_COUNT
#上一个 SQL 查询返回或影响的行数,如果查询失败或未报告行数,则为 0。
SERVER_VERSION_NAME
SERVER_VERSION_NUM
#服务器的版本号,以字符串形式表示,例如 9.6.2
、10.1
或 11beta1
,以数字形式表示,例如 90602
或 100001
。每次您连接到数据库(包括程序启动时)都会设置这些值,但可以更改或取消设置。
SHELL_ERROR
#如果上一个 shell 命令失败,则为 true
,如果成功,则为 false
。这适用于通过 \!
、\g
、\o
、\w
和 \copy
元命令调用的 shell 命令,以及反引号 (`
) 扩展。请注意,对于 \o
,此变量在下一个 \o
命令关闭输出管道时更新。另请参阅 SHELL_EXIT_CODE
。
SHELL_EXIT_CODE
#上一个 shell 命令返回的退出状态。0–127 表示程序退出代码,128–255 表示被信号终止,-1 表示未能启动程序或未能收集其退出状态。这适用于通过 \!
、\g
、\o
、\w
和 \copy
元命令调用的 shell 命令,以及反引号 (`
) 扩展。请注意,对于 \o
,此变量在下一个 \o
命令关闭输出管道时更新。另请参阅 SHELL_ERROR
。
SHOW_ALL_RESULTS
#当此变量设置为 off
时,仅显示组合查询 (\;
) 的最后一个结果,而不是全部。默认值为 on
。关闭行为是为了与旧版本的 psql 兼容。
SHOW_CONTEXT
#此变量可以设置为 never
、errors
或 always
值,以控制是否在服务器消息中显示 CONTEXT
字段。默认值为 errors
(表示上下文将显示在错误消息中,但不会显示在通知或警告消息中)。当 VERBOSITY
设置为 terse
或 sqlstate
时,此设置无效。(另请参阅 \errverbose
,以便在您需要刚获得的错误的详细版本时使用。)
SINGLELINE
#将此变量设置为 on
等同于命令行选项 -S
。
SINGLESTEP
#将此变量设置为 on
等同于命令行选项 -s
。
SQLSTATE
#与上一个 SQL 查询失败关联的错误代码(请参阅附录 A),如果成功,则为 00000
。
USER
#您当前连接的数据库用户。每次您连接到数据库(包括程序启动时)都会设置此值,但可以更改或取消设置。
VERBOSITY
#此变量可以设置为 default
、verbose
、terse
或 sqlstate
值,以控制错误报告的详细程度。(另请参阅 \errverbose
,以便在您需要刚获得的错误的详细版本时使用。)
VERSION
VERSION_NAME
VERSION_NUM
#这些变量在程序启动时设置,以分别反映 psql 的版本,分别为详细字符串、短字符串(例如,9.6.2
、10.1
或 11beta1
)和数字(例如,90602
或 100001
)。它们可以更改或取消设置。
psql 变量的一个关键特性是,您可以将它们替换(“插值”)到常规SQL语句以及元命令的参数中。此外,psql 提供了确保用作 SQL 字面值和标识符的变量值被正确引用的工具。在没有任何引号的情况下插入值的语法是在变量名称前面加上冒号 (:
)。例如,
testdb=>\set foo 'my_table'
testdb=>SELECT * FROM :foo;
将查询表 my_table
。请注意,这可能是不安全的:变量的值是按字面复制的,因此它可能包含不平衡的引号,甚至反斜杠命令。您必须确保它在您放置的位置有意义。
当一个值要用作 SQL 字面值或标识符时,最安全的方法是安排它被引用。要将变量的值引用为 SQL 字面值,请在单引号中写入冒号后跟变量名称。要将该值引用为 SQL 标识符,请在双引号中写入冒号后跟变量名称。这些构造可以正确处理嵌入在变量值中的引号和其他特殊字符。前面的示例可以更安全地写成这样
testdb=>\set foo 'my_table'
testdb=>SELECT * FROM :"foo";
变量插值将不会在带引号的SQL字面值和标识符中执行。因此,像 ':foo'
这样的构造无法从变量的值生成带引号的字面值(如果它确实有效,那将是不安全的,因为它无法正确处理嵌入在值中的引号)。
此机制的一个示例用途是将文件的内容复制到表列中。首先将文件加载到变量中,然后将该变量的值作为带引号的字符串插入
testdb=>\set content `cat my_file.txt`
testdb=>INSERT INTO my_table VALUES (:'content');
(请注意,如果 my_file.txt
包含 NUL 字节,这将仍然不起作用。psql 不支持变量值中嵌入的 NUL 字节。)
由于冒号在 SQL 命令中是合法的,所以除非已设置了指定的变量,否则不会替换明显的插值尝试(即 :name
、:'name'
或 :"name"
)。在任何情况下,您都可以使用反斜杠转义冒号,以防止其被替换。
:{?
特殊语法会根据变量是否存在而返回 TRUE 或 FALSE,因此始终会被替换,除非冒号使用反斜杠转义。name
}
变量的冒号语法是标准的SQL用于嵌入式查询语言,例如 ECPG。数组切片和类型转换的冒号语法是 PostgreSQL 扩展,有时可能会与标准用法冲突。使用冒号引号语法将变量的值转义为 SQL 字面量或标识符是 psql 扩展。
psql 发出的提示可以根据您的喜好进行自定义。三个变量 PROMPT1
、PROMPT2
和 PROMPT3
包含描述提示外观的字符串和特殊转义序列。提示 1 是当 psql 请求新命令时发出的正常提示。当命令输入期间需要更多输入时,例如因为命令未以分号终止或引号未关闭时,会发出提示 2。当您正在运行SQL COPY FROM STDIN
命令并且需要在终端上输入行值时,会发出提示 3。
选定提示变量的值会按字面打印,但遇到百分号 (%
) 时除外。根据下一个字符,会替换为某些其他文本。定义的替换如下:
%M
#数据库服务器的完整主机名(带有域名),如果连接是通过 Unix 域套接字,则为 [local]
,如果 Unix 域套接字不在编译时默认位置,则为 [local:
。/dir/name
]
%m
#数据库服务器的主机名,在第一个点处截断,如果连接是通过 Unix 域套接字,则为 [local]
。
%>
#数据库服务器正在侦听的端口号。
%n
#数据库会话用户名。(此值的展开可能会在数据库会话期间因 SET SESSION AUTHORIZATION
命令的结果而更改。)
%/
#当前数据库的名称。
%~
#与 %/
类似,但如果数据库是您的默认数据库,则输出为 ~
(波浪号)。
%#
#如果会话用户是数据库超级用户,则为 #
,否则为 >
。(此值的展开可能会在数据库会话期间因 SET SESSION AUTHORIZATION
命令的结果而更改。)
%p
#当前连接的后端进程的进程 ID。
%R
#在提示 1 中,通常为 =
,但如果会话处于条件块的非活动分支中,则为 @
,如果在单行模式下,则为 ^
,如果会话与数据库断开连接(如果 \connect
失败可能会发生),则为 !
。在提示 2 中,%R
会被一个字符替换,该字符取决于 psql 期望更多输入的原因:如果命令只是尚未终止,则为 -
,但如果有未完成的 /* ... */
注释,则为 *
,如果有未完成的带引号的字符串,则为单引号,如果有未完成的带引号的标识符,则为双引号,如果有未完成的美元引号字符串,则为美元符号,或者如果有不匹配的左括号,则为 (
。在提示 3 中,%R
不会产生任何内容。
%x
#事务状态:当不在事务块中时为空字符串,当在事务块中时为 *
,当在失败的事务块中时为 !
,当事务状态不确定时(例如,因为没有连接)为 ?
。
%l
#当前语句内的行号,从 1
开始。
%
digits
#替换为具有指定八进制代码的字符。
%:
name
:
#psql 变量 name
的值。有关详细信息,请参阅上面的变量。
%`
command
`
#command
的输出,类似于普通的 “反引号” 替换。
%[
... %]
#提示可以包含终端控制字符,例如,更改提示文本的颜色、背景或样式,或更改终端窗口的标题。为了使 Readline 的行编辑功能正常工作,这些非打印控制字符必须通过用 %[
和 %]
包围来指定为不可见。这些对可以在提示中多次出现。例如
testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '
在兼容 VT100 的彩色终端上,会生成粗体 (1;
) 黄色背景黑色 (33;40
) 提示。
%w
#与 PROMPT1
的最新输出宽度相同的空白。这可以用作 PROMPT2
设置,以便多行语句与第一行对齐,但没有可见的辅助提示。
要将百分号插入提示中,请写入 %%
。默认提示为提示 1 和 2 的 '%/%R%x%# '
,以及提示 3 的 '>> '
。
此功能毫不羞耻地剽窃自 tcsh。
如果可用,psql 使用 Readline 或 libedit 库进行方便的行编辑和检索。当 psql 退出时,命令历史记录会自动保存,并在 psql 启动时重新加载。键入向上箭头或 Control-P 以检索上一行。
您还可以使用 Tab 键补全来填充许多(但绝不是全部)上下文中的部分键入的关键字和 SQL 对象名称。例如,在命令的开头,键入 ins
并按 Tab 键将填充 insert into
。然后,键入表或模式名称的几个字符并按 Tab
键将填充未完成的名称,或者当有多个匹配项时提供可能的补全菜单。(根据使用的库,您可能需要按多次 Tab
键才能获得菜单。)
SQL 对象名称的 Tab 键补全需要向服务器发送查询以查找可能的匹配项。在某些情况下,这可能会干扰其他操作。例如,在 BEGIN
之后,如果在两者之间发出 Tab 键补全查询,则发出 SET TRANSACTION ISOLATION LEVEL
将为时已晚。如果您根本不想要 Tab 键补全,可以通过在主目录中名为 .inputrc
的文件中输入以下内容来永久关闭它
$if psql set disable-completion on $endif
(这不是 psql,而是 Readline 功能。请阅读其文档以了解更多详细信息。)
-n
(--no-readline
) 命令行选项也可用于禁用单次运行 psql 的 Readline 的使用。这会阻止 Tab 键补全、使用或记录命令行历史记录以及编辑多行命令。当您需要复制粘贴包含 Tab
字符的文本时,它特别有用。
COLUMNS
#如果 \pset columns
为零,则控制 wrapped
格式的宽度,以及用于确定宽输出是否需要分页器,或者是否应在扩展自动模式下切换到垂直格式的宽度。
PGDATABASE
PGHOST
PGPORT
PGUSER
#默认连接参数(请参阅第 32.15 节)。
PG_COLOR
#指定是否在诊断消息中使用颜色。可能的值为 always
、auto
和 never
。
PSQL_EDITOR
EDITOR
VISUAL
#由 \e
、\ef
和 \ev
命令使用的编辑器。按照列出的顺序检查这些变量;使用第一个设置的变量。如果未设置任何变量,则默认情况下,在 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
#命令历史文件的替代位置。会执行波浪号 (~
) 展开。
PSQL_PAGER
PAGER
#如果查询结果无法在屏幕上完整显示,则会通过此命令进行管道传输。典型的值是 more
或 less
。可以通过将 PSQL_PAGER
或 PAGER
设置为空字符串,或者调整 \pset
命令中与分页器相关的选项来禁用分页器的使用。这些变量按列出的顺序检查;使用第一个已设置的变量。如果它们都没有设置,则默认在大多数平台上使用 more
,但在 Cygwin 上使用 less
。
PSQL_WATCH_PAGER
#当使用 \watch
命令重复执行查询时,默认情况下不使用分页器。可以通过将 PSQL_WATCH_PAGER
设置为分页器命令(在 Unix 系统上)来更改此行为。pspg
分页器(不是 PostgreSQL 的一部分,但在许多开源软件发行版中可用)如果以 --stream
选项启动,则可以显示 \watch
的输出。
PSQLRC
#用户 .psqlrc
文件的替代位置。会执行波浪号 (~
) 展开。
SHELL
#由 \!
命令执行的命令。
TMPDIR
#用于存储临时文件的目录。默认值为 /tmp
。
此实用程序与大多数其他 PostgreSQL 实用程序一样,也使用 libpq 支持的环境变量(请参见第 32.15 节)。
psqlrc
和 ~/.psqlrc
#除非传递了 -X
选项,否则 psql 会尝试从系统范围的启动文件 (psqlrc
) 和用户的个人启动文件 (~/.psqlrc
) 中读取并执行命令,这在连接到数据库之后但在接受正常命令之前执行。这些文件可用于根据需要设置客户端和/或服务器,通常使用 \set
和 SET
命令。
系统范围的启动文件名为 psqlrc
。默认情况下,它在安装的“系统配置”目录中查找,该目录通过运行 pg_config --sysconfdir
最可靠地标识。通常,此目录相对于包含 PostgreSQL 可执行文件的目录为 ../etc/
。要查找的目录可以通过 PGSYSCONFDIR
环境变量显式设置。
用户的个人启动文件名为 .psqlrc
,并在调用用户的 home 目录中查找。在 Windows 上,个人启动文件改为命名为 %APPDATA%\postgresql\psqlrc.conf
。在这两种情况下,都可以通过设置 PSQLRC
环境变量来覆盖此默认文件路径。
系统范围的启动文件和用户的个人启动文件都可以通过在文件名后附加破折号和 PostgreSQL 主版本或次版本标识符,使其特定于 psql 版本,例如 ~/.psqlrc-17
或 ~/.psqlrc-17.2
。最特定的版本匹配文件将优先于非特定版本的文件读取。这些版本后缀是在确定上述文件路径后添加的。
.psql_history
#命令行历史记录存储在 ~/.psql_history
文件中,或者在 Windows 上存储在 %APPDATA%\postgresql\psql_history
中。
历史记录文件的位置可以通过 HISTFILE
psql 变量或 PSQL_HISTORY
环境变量显式设置。
psql 在与相同或更旧主要版本的服务器一起使用时效果最佳。如果服务器的版本比 psql 本身更新,则反斜杠命令尤其可能失败。但是,\d
系列的反斜杠命令应适用于版本追溯到 9.2 的服务器,但不一定适用于比 psql 本身更新的服务器。运行 SQL 命令和显示查询结果的常规功能也应适用于较新主要版本的服务器,但不能保证在所有情况下都适用。
如果要使用 psql 连接到多个不同主要版本的服务器,建议使用最新版本的 psql。或者,你可以保留每个主要版本的 psql 副本,并确保使用与相应服务器匹配的版本。但在实践中,这种额外的复杂性是不必要的。
在 PostgreSQL 9.6 之前,-c
选项暗示 -X
(--no-psqlrc
);现在情况不再如此。
在 PostgreSQL 8.4 之前,psql 允许单个字母反斜杠命令的第一个参数直接在命令之后开始,而无需插入空格。现在,需要一些空格。
psql 构建为“控制台应用程序”。由于 Windows 控制台窗口使用与系统其他部分不同的编码,因此在 psql 中使用 8 位字符时必须格外小心。如果 psql 检测到有问题的控制台代码页,则会在启动时发出警告。要更改控制台代码页,需要做两件事
通过输入 cmd.exe /c chcp 1252
设置代码页。(1252 是适用于德语的代码页;请将其替换为你的值。)如果使用的是 Cygwin,可以将此命令放在 /etc/profile
中。
将控制台字体设置为 Lucida Console
,因为光栅字体不适用于 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
--------+---------+-----------+----------+---------
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 csv
Output format is csv. peter@localhost testdb=>\pset tuples_only
Tuples only is on. peter@localhost testdb=>SELECT second, first FROM my_table;
one,1 two,2 three,3 four,4 peter@localhost testdb=>\pset format unaligned
Output format is unaligned. peter@localhost testdb=>\pset fieldsep '\t'
Field separator is " ". 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
此外,这些输出格式选项可以通过使用 \g
来仅为一个查询设置
peter@localhost testdb=>SELECT * FROM my_table
peter@localhost testdb->\g (format=aligned tuples_only=off expanded=on)
-[ RECORD 1 ]- first | 1 second | one -[ RECORD 2 ]- first | 2 second | two -[ RECORD 3 ]- first | 3 second | three -[ RECORD 4 ]- first | 4 second | four
以下示例说明如何使用 \df
命令仅查找名称与 int*pl
匹配且其第二个参数类型为 bigint
的函数
testdb=> \df int*pl * bigint
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+---------+------------------+---------------------+------
pg_catalog | int28pl | bigint | smallint, bigint | func
pg_catalog | int48pl | bigint | integer, bigint | func
pg_catalog | int8pl | bigint | bigint, bigint | func
(3 rows)
在适当的时候,可以使用 \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)
第二个示例显示了一个乘法表,其中行按反向数值顺序排序,列按独立的升序数值顺序排序。
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)
如果你在文档中看到任何不正确、与你特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。