pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
psql — Postgres 的交互式客户端
psql [dbname] psql -A [ -cquery] [ -ddbname] -e -E [ -ffilename] [ -Fseparator] [ -hhostname] -Hln [ -ofilename] [ -pport] -qsSt [ -Ttable_o] -ux [dbname]
psql 接受许多命令行参数、一整套丰富的元命令,以及 Postgres 支持的完整 SQL 语言。 The most common command-line arguments are:
dbnameThe name of an existing database to access. dbname defaults to the value of the USER environment variable or, if that's not set, to the Unix account name of the current user.
query要运行的单条查询。完成后 psql 将退出。
完整的命令行参数和元命令集合在后续小节中描述。
有一些环境变量可以用来代替命令行参数。 Additionally, the Postgres frontend library used by the psql application looks for other optional environment variables to configure, for example, the style of date/time representation and the local time zone. Refer to the chapter on libpq in the Programmer's Guide for more details.
你可以设置以下任何环境变量来避免指定命令行选项:
PGHOSTThe DNS host name of the database server. Setting PGHOST to a non-zero-length string causes TCP/IP communication to be used, rather than the default local Unix domain sockets.
PGPORTPostgres 服务器正在监听的端口号。默认为 5432。
PGTTY客户端支持库消息的显示目标。不是必需的。
PGOPTION如果指定了 PGOPTION, 其中包含的选项会在任何命令行选项之前 被解析。
PGREALMPGREALM 只在使用 Kerberos 认证时适用。如果设置了此环境变量,Postgres 将向此 realm 的服务器尝试认证,并使用单独的票据文件以避免凭据冲突。
psql 正常结束时向 shell 返回 0;发生错误时返回 1;与后端意外断开连接时返回 2。如果由于任何原因无法建立到数据库的连接,psql 也将返回 1。
使用默认的 TAB 分隔符。
psql 是 Postgres 的一个基于字符的前端。它使你能够交互式地输入查询,将其发送给 Postgres,并查看查询结果。
psql 是一个 Postgres 客户端应用程序。因此,在执行 psql 之前,数据库服务器主机上必须有一个 postmaster 进程在运行。 In addition, the correct parameters to identify the database server, such as the postmaster host name, may need to be specified as described below.
psql 启动时,先从 /etc/psqlrc 再从 $(HOME)/.psqlrc 读取 SQL 命令。这使像 SET 这样可用于设置日期风格的 SQL 命令能在每个会话开始时运行。
psql 尝试连接到命令行上指定的主机名和端口号处的数据库。如果由于任何原因(如权限不足、postmaster 未在服务器上运行等)无法建立连接, .IR psql will return an error that says
Connection to database failed.
The reason for the connection failure is not provided.
在正常操作时,psql 提供一个提示符,它是 psql 当前连接到的数据库名称后跟字符串 "=>". For example,
$ psql testdb
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
[PostgreSQL 6.5.0 on i686-pc-linux-gnu, compiled by gcc 2.7.2.3]
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: testdb
testdb=>
在提示符下,用户可以输入 SQL 查询。除非设置了 -S 选项,当遇到表示查询结束的分号时,输入行被发送到后端。
每当执行一条查询时,psql 还会轮询由 LISTEN 和 NOTIFY 生成的异步通知事件。
psql 可以在管道序列中使用,并自动检测它是否连接到真实的 tty。
来自 Brett McCormick 在邮件列表上的发言(1998-04-04)。
要影响 psql 输出的分页行为,请设置或取消设置你的 PAGER 环境变量。 I always have to set mine before it will pause. And of course you have to do this before starting the program.
在 csh/tcsh 或其他 C shell 中:
% unsetenv PAGER
而在 sh/bash 或其他 Bourne shell 中:
% unset PAGER
psql 理解下列命令行选项:
打印表元素时关闭填充对齐。
query指定 psql 执行一个查询字符串 query,然后退出。这在 shell 脚本中很有用,通常与 shell 脚本中的 -q 选项配合使用。
dbname指定要连接的数据库的名称。这等效于把 dbname 指定为命令行的最后一个字段。
回显发送到后端的查询
回显 \d 及其他反斜线命令生成的实际查询
filename使用文件 filename 作为查询来源,而不是交互式地读取查询。此文件必须为客户端前端指定并可见。
separator使用 separator 作为字段分隔符。默认是 ASCII 竖线("|")。
hostname指定 postmaster 正在运行的主机的主机名。不带此选项时,通信使用本地 Unix 域套接字进行。
打开 HTML 3.0 表格输出。
列出所有可用的数据库,然后退出。其他非连接选项会被忽略。
不使用 readline 库进行输入行编辑和命令历史。
filename把所有输出放入文件 filename。该路径必须是客户端可写的。
port指定 postmaster 用于监听连接的 TCP/IP 端口,或者在省略时指定本地 Unix 域套接字文件扩展名。 Defaults to the value of the PGPORT environment variable, if set, or to 5432.
指定 psql 安静地执行它的工作。默认情况下,它会打印欢迎和退出消息并为每条查询给出提示,还打印查询返回的行数。如果使用了这个选项,以上那些就都不会输出。这与 -c 选项配合很有用。
以单步模式运行,每条查询发送到后端之前都会提示用户。
以单行模式运行,每条查询以换行符而不是分号结束。
关闭列名的打印。这在 shell 脚本中与 -c 选项配合时很有用。
table_options允许你指定要放在 HTML 3.0 表格输出的 table ... 标签内的选项。例如 border 会给你带边框的表。这必须与 -H 选项一起使用。
在连接数据库之前询问用户名和密码。如果数据库不要求密码认证,则这些会被忽略。如果未使用此选项(且未设置 PGPASSWORD 环境变量)而数据库要求密码认证,则连接将失败。 The user name is ignored anyway.
打开扩展行格式模式。启用时每行的列名打印在左、列值打印在右。这对于否则太长放不进一个屏幕行的行很有用。HTML 行输出也支持此模式。
你可以设置环境变量以避免输入上述某些选项。见下面有关环境变量的小节。
你在 psql 中输入的任何以未加引号的反斜线开始的内容都是一个 psql 元命令。其他内容都是 SQL,直接进入当前查询缓冲区(一旦你至少有了一条完整的查询,它就会被自动提交给后端)。 psql 元命令也称为斜线命令。
psql命令的格式是用反斜线后面直接跟上一个命令动词,然后是一些参数。参数与命令动词和其他参数之间用任意多个空白字符分隔开。
由于历史原因,对于单字符命令动词,实际上不需要用空格把命令动词与参数分开。不过你还是应该这么做。
定义了下列元命令:
\a打印表元素时切换字段对齐。
\C caption把 HTML3.0 表格标题设置为 caption。
\connect dbname [ username ]建立到一个新数据库的连接,如果没有指定用户名则使用默认用户名。之前的连接被关闭。
\copy table { FROM | TO } filename执行前端(客户端)复制。这是一个运行 SQL COPY 命令的操作, 但不是由后端读取或写入指定的文件(后者因此需要后端访问权限和特殊的用户权限), 而是由 psql 读取或写入该 文件并与本地文件系统来回传送数据。
这个操作不如 SQL 的 COPY 命令高效,因为所有数据都必须通过 客户端/服务器的 IP 或套接字连接。对于大量数据, 另一种技术可能更可取。
\d [ table ]列出数据库中的表,或者如果指定了 table,则列出该表中的列。 If table name is specified as an asterisk (“*”), list all tables and column information for each tables.
\da列出所有可用的聚合。
\dd object列出 pg_description 中指定对象(可以是表、表.列、类型、操作符或聚合)的描述。
并非所有对象在 pg_description 中都有描述。 这个元命令可用于快速获取对 Postgres 原生特性的描述。
\df列出函数。
\di只列出索引。
\do只列出操作符。
\ds只列出序列。
\dS列出系统表和索引。
\dt只列出非系统表。
\dT列出类型。
\e [ filename ]编辑当前查询缓冲区或文件 filename 的内容。
\E [ filename ]编辑当前查询缓冲区或文件 filename 的内容,并在编辑器退出后执行它。
\f [ separator ]设置字段分隔符。默认是单个空格。
\g [ { filename | |command } ]把当前查询输入缓冲区发送到后端,并可选地把输出保存到 filename 中,或把输出通过管道送到一个单独的 Unix shell 去执行 command。
\h [ command ]给出指定 SQL 命令的语法帮助。 如果 command 不是一个已定义的 SQL 命令 (或未在 psql 中记录),或者未指定 command, 则 psql 将列出所有可获得语法帮助的命令。
\H切换 HTML3 输出。这等效于 -H 命令行选项。
\i filename把文件 filename 中的查询读入查询输入缓冲区。
\l列出服务器中的所有数据库。
\m切换旧的类似 monitor 的表显示,包括围绕表的边框字符。 This is standard SQL output. By default, psql includes only field separators between columns.
\o [ {filename | |command} ]把以后的查询结果保存到文件 filename 中,或把以后的结果通过管道送到一个单独的 Unix shell 去执行 command。 If no arguments are specified, send query results to stdout.
\p打印当前查询缓冲区。
\q退出 psql 程序。
\r重置(清空)查询缓冲区。
\s [ filename ]把命令行历史打印或保存到 filename。 如果省略 filename,则不把后续命令保存到历史文件。只有 psql 被配置为使用 readline 时此选项才可用。
\t切换输出列名标题和行计数页脚的显示(默认为开)。
\T table_options允许你指定要放在 HTML 3.0 表格输出的 table ... 标签 内的选项。例如 border 会给你带边框的表。这必须与 \H 元命令一起使用。
\x切换扩展行格式模式。启用时每行的列名打印在左、列值打印在右。这对于否则太长放不进一个屏幕行的行很有用。HTML 行输出模式也支持此标志。
\w filename把当前查询缓冲区输出到文件 filename。
\z产生数据库中所有表及其相应 ACL(授予/撤销权限)的列表。
\! [ command ]逃逸到一个单独的 Unix shell 或执行 Unix 命令 command。
\?获取有关斜线(\)命令的帮助信息。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。