psql

Name

psql --  PostgreSQL交互终端

Synopsis

psql [option...] [dbname [username]]

描述

psql是一个以终端为基础的PostgreSQL前端。它允许你交互地键入查询,然后把它们发出给PostgreSQL, 再显示查询的结果。另外,输入可以来自一个文件。还有,它提供了一些元命令和多种类似shell的特性来实现书写脚本以及对大量任务的自动化。

选项

-a
--echo-all

在读取行时向标准输出打印所有内容。这个选项在脚本处理时比交互模式时更有用。 这个选项等效于设置ECHO变量为all

-A
--no-align

切换为非对齐输出模式。缺省输出模式是对齐的。

-c command
--command command

声明psql将执行一条查询字符串command,然后退出。 Start-up files (psqlrc and ~/.psqlrc) are ignored with this option.

command必须是一条完全可以被服务器分析的字符串(也就是不包含psql特有的特性), 或者是一个反斜杠命令。这样你就不会混合SQLpsql元命令。要想混合使用, 你可以把字符串重定向到psql里, 像这样:echo '\x \\ SELECT * FROM foo;' | psql(\\用于隔开元命令)。

如果命令字符串包含多个SQL命令,那么他们将在一个事务里处理, 除非在字符串里包含了明确的BEGIN/COMMIT命令把他们分成多个事务。 这个和从psql的标准输入里给它填充相同字符串不同。

-d dbname
--dbname dbname

指定要连接的数据库的名称。这等价于指定dbname 作为命令行中的第一个非选项参数。

若该参数包含一个=符号,它会被当做conninfo字符串。 请参阅Section 31.1获取详细信息。

-e
--echo-queries

把所有发送给服务器的查询同时也回显到标准输出。等效于把变量ECHO设置为 queries

-E
--echo-hidden

回显由\d和其它反斜杠命令生成的实际查询。你可以使用这个命令学习 psql的内部操作。 这等效于在psql里设置变量ECHO_HIDDEN

-f filename
--file filename

使用filename作为命令的语句源而不是交互式读入查询。 psql将在处理完文件后结束。这个选项在很多方面等效于内部命令 \i

如果filename-(连字符),则从标准输入读取。

使用这个选项与使用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

-L filename
--log-file filename

除了正常的输出源之外,把所有查询输出记录到文件filename

-n
--no-readline

不要使用readline来做行编辑并且不要使用history。这有助于在剪切和粘贴时关闭标签扩展。

-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选项一起使用时很有效。 在psql里可以通过设置QUIET变量实现同样效果。

-R separator
--record-separator separator

使用separator做为非对齐输出的记录分隔符。 等效于\pset recordsep命令。

-s
--single-step

单步模式运行。意味着每个查询在发往服务器之前都要提示用户,用这个选项也可以取消执行。 此选项主要用于调试脚本。

-S
--single-line

单行运行模式,这时每个命令都将由换行符结束,像分号那样。

Note: 这个模式是给那些坚持要使用这个特性的人保留的, 不鼓励你这么用。实际上,如果你在一行里混合使用SQL和元命令, 执行的顺序对不熟练的用户而言并不总是清晰的。

-t
--tuples-only

关闭打印列名称和结果行计数脚注等信息。等效于\t命令。

-T table_options
--table-attr table_options

声明放在HTML table标签里的选项。参阅\pset获取细节。

-U username
--username username

以用户username代替缺省用户与数据库连接。当然,你必须有这么做的权限。

-v assignment
--set assignment
--variable assignment

像内部命令\set那样进行一次变量分配。注意,如果有变量名和值的话, 你必须在命令行上用等号分隔它们。去掉等号则重置变量。 要设置一个没有值的变量,可以保留等号但是不指定值。 这个分配是在启动之初进行的,所以为内部使用而保留的变量可能被再次覆盖。

-V
--version

打印psql版本信息然后退出。

-w
--no-password

从不提示密码。如果服务器请求密码身份认证并且一个密码不能通过其他方式(如.pgpass 文件)来获得,该链接尝试就会失败。该选项在没有用户可以输入密码时对批量作业和脚本中是有效的。

请注意该选项将仍然为整个会话设置,所以会影响元命令 \connect的使用,以及初始连接尝试的使用。

-W
--password

强制psql在与一个数据库连接前提示输入口令。

该选项从来不是至关重要的,因为若服务器请求密码身份认证psql 将会自动提示一个密码。然而,psql将浪费一个连接尝试发现 服务器需要一个密码。在一些情况下,值得输入-W来避免额外的连接尝试。

请注意该选项将仍然为整个会话设置,所以会影响元命令 \connect,以及初始连接尝试的使用。

-x
--expanded

打开扩展表格式模式。等效于\x 命令。

-X,
--no-psqlrc

不读取启动文件(系统范围的psqlrc或者你自己的~/.psqlrc都不读取)。

-1
--single-transaction

psql使用-f选项执行脚本时,使用这个选项将导致在脚本的开头和结尾分别加上BEGIN/COMMIT来把整个脚本当作一个事务执行。 这将保证该脚本要么完全执行成功,要么不产生任何影响。

如果在脚本中已经使用了BEGINCOMMITROLLBACK, 那么该选项将不会得到期望的效果。同样, 如果脚本中包含任何不能在事务块内部使用的命令, 使用这个选项将导致这样的命令执行失败,当然整个事务亦将失败。

-?
--help

显示关于psql命令行参数的帮助然后退出。

退出状态

如果正常结束,那么psql向shell返回0,如果自身发生致命错误, 则返回1(例如,内存用尽,未找到文件等),如果和数据库的连接失效而且会话不再活跃则返回2, 如果脚本中发生错误并且设置了ON_ERROR_STOP则返回3。

用法

连接一个数据库

psql是一个普通的PostgreSQL客户端应用。为了与一个数据库连接, 你需要知道目标数据库、服务器的主机名和端口号、以及你希望以哪个用户的身份进行连接等信息。 可以通过命令行参数-d-h-p-U告诉psql这些信息。如果某个参数不属于任何选项, 那么它会被解释成数据库名或者是用户名(如果数据库名称已经给出了)。不是所有这些选项都是必须的, 有的缺省就存在。如果你省略主机名,psql将通过Unix域套接字与本地主机的服务器相联, 或者在没有Unix域套接字的机器上,通过TCP/IP与localhost连接。缺省的端口号是编译时确定的。 因为数据库服务器使用同样的缺省值,所以在大多数设置下,你可能不需要声明端口号。缺省的用户名是你的Unix用户名, 与数据库同名。要注意的是你不能用任意用户名与任何数据库相联。你的数据库管理员应该告诉你有哪些访问权限。

如果缺省不太正确,那么你可以通过设置几个环境变量PGDATABASEPGHOSTPGPORT和/或者PGUSER, 的方法节约几次敲击。其它环境变量的信息,参阅Section 31.13。另外, 用一个~/.pgpass文件来避免输入密码也是很方便的。参阅Section 31.14获取更多信息。

声明连接参数的另一种方法是在一个conninfo字符串中, 这是用来代替一个数据库名称。这一机制给您在连接上的非常广泛的控制。例如:

$ psql "service=myservice sslmode=require"

Section 31.16中描述的一样,您也可以使用LDP来做连接参数查找。 请参阅Section 31.1获取关于所有可获得的连接选项的信息。

如果因为任何原因而无法与数据库相联(权限不够、服务器没有运行等), psql将返回一个错误并退出。

输入SQL命令

通常状况下,psql提供一个带有正在与之连接的接数据库名的, 后缀=>的提示符。例如:

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

testdb=>

用户可以在这个提示符下键入SQL命令。通常, 输入的行将在命令终止分号出现时送到服务器。 一行的终止并不表示命令的结束。因此命令可以为了清晰起见跨越好几行。 如果命令发送出去而且执行没有错误,命令结果会显示在屏幕上。

当命令正在进行时,psql同样还轮询由 LISTENNOTIFY生成的异步通知信号。

元命令

你在psql里输入的任何以不带引号的反斜杠开头的东西都是psql元命令, 这些命令是将由psql自己处理的。这些命令也是使得psql更便于管理或书写脚本的原因。 元命令更常见的叫法是斜杠或反斜杠命令。

一个psql命令的格式是反斜杠后面紧跟一个命令动词,然后是任意参数。参数与命令动词和其它参数以任意个空白字符间隔。

要在参数里面包含空白,你必须用单引号把它包围起来。要在这样的参数里包含单引号, 可以在前面加一个反斜杠。任何包含在单引号里的东西都会被进一步进 行类C的替换:\n(新行)、\t(制表符)、 \digits(八进制表示的字符)、\xdigits(十六进制表示的字符)。

如果一个不带引号的参数以冒号(:)开头, 它会被当作一个psql变量,并且该变量的值会最终成为真正的参数值。 如果变量名使用单引号引起来的(例如::'var'),它将转义成一个 SQL文本并且结果将被用作这个参数。如果变量名用双引号引,它将会被转义成一个SQL标示符 并且结果将会用作参数。

用反勾号(`)包围的内容被当作一个命令行传入shell。该命令的输出(删除了结尾的新行)被当作参数值。 上面描述的逃逸(字符)序列在反勾号里也生效。

有些命令以一个SQL标识的名称(比如一个表名)为参数。 这些参数遵循SQL语法关于双引号的规则:不带双引号的标识强制成小写, 而双引号保护字母不进行大小写转换,并且允许在标识符中使用空白。 在双引号中,成对的双引号在结果名字中分析成一个双引号。 比如,FOO"BAR"BAZ解析成fooBARbaz ; 而"A weird"" name"解析成A weird" name

、 对参数的分析在line的最后或者碰到另一个不带引号的反斜杠时停止。 不带引号的反斜杠会认为是一个新的元命令的开始。 特殊的双反斜杠序列(\\)标识参数的结尾并将继续分析后面的SQL命令(如果存在的话)。 这样SQLpsql命令可以自由的在一行里面混合。 但是在任何情况下,一条元命令的参数不能延续超过行尾。

下面是已定义的元命令:

\a

如果目前的表输出格式是不对齐的,则切换成对齐的。如果是对齐的,则切换成不对齐。这条命令是为了向后兼容。 参阅\pset获取一个更通用的解决方法。

\cd [ directory ]

把当前工作目录改变到directory。没有参数则是改变到当前用户的家目录。

Tip: 使用\! pwd打印出当前工作目录。

\C [ title ]

把正在打印的表的标题设置为一个查询的结果或者取消这样的设置。 这条命令等效于\pset title title。这条命令的名称源于"caption", 因为以前只是用于在一个HTML表格里面设置标题。

\connect (或\c) [ dbname [ username ] [ host ] [ port ] ]

与一个新的数据库建立一个连接,使用/不用一个用户名。 前面的连接将关闭。如果dbnameusernamehostport被省略或是-, 那么就使用上次连接里面的值。 如果之前没有链接则使用libpq的缺省值。

如果连接失败(用户名错、访问被拒绝等), 那么当psql处于交互模式时将保留前面的连接。 如果运行的是非交互的脚本,处理会马上停止并返回一个错误。 设置这样的区别一方面是为用户使用方便考虑, 另一方面也为了保证脚本不会碰巧操作了错误的数据库的安全机制考虑。

\copy { table [ ( column_list ) ] | ( query ) } { from | to } { filename | stdin | stdout | pstdin | pstdout } [ with ] [ binary ] [ oids ] [ delimiter [ as ] 'character' ] [ null [ as ] 'string' ] [ csv [ header ] [ quote [ as ] 'character' ] [ escape [ as ] 'character' ] [ force quote column_list | * ] [ force not null column_list ] ]

执行前端(客户端)拷贝。这是一个运行SQL COPY命令的操作,不同的是服务器在读写指明的文件, 而psql读写文件并作为本地的文件系统和服务器之间的跳板取出或写入数据。 这意味着文件访问性和权限都是本地用户的,而不是服务器的, 因此不需要SQL超级用户权限。

这条命令的语法是模拟SQL COPY命令的。 要注意的是因此带来一些应用于\copy命令的特殊分 析规则(尤其是变量替换规则和反斜杠代换规则)将不起作用。

\copy ... from stdin | to stdout分别基于命令输入和输出进行读/写。 所有行都从发出命令的同一个源读取,直到读到了\.或者流达到EOF。 输出发送到和命令输出相同的位置。要从psql的标准输入或者输出读/写, 可以使用pstdinpstdout。这个选项用于把和SQL脚本嵌 在一起的文件填充表很有用。

Tip: 此操作不像SQL COPY命令这样高效,因为所有数据必须通过客户端/服务器连接。 对于大数据量的操作,SQL命令的方法更可行。

\copyright

显示PostgreSQL的版权和版本信息。

\d[S+] [ pattern ]

对于每个匹配pattern的关系(表、视图、索引、序列), 显示所有列、它们的类型、表空间(如果不是缺省的)和任何特 殊属性(诸如NOT NULL或缺省等,只要存在)。 唯一约束相关的索引、规则、约束、触发器也同样显示出来。 如果关系是一个视图,还显示视图的定义。 "匹配模式"在下面定义Patterns

\d+来的命令也是一样的,只不过显示更多信息: 任何与表的列关联的注释也都会显示, 还有就是表中出现的 OID,and the view definition if the relation is a view.

缺省时,仅显示用户创建的对象;提供一个模式或者S修饰符 来包括系统对象。

Note: 如果如果不带任何pattern 调用\d,那么等效于\dtvs, 将显示一个所有表,视图和序列的列表。这完全是出于方便的考虑。

\da[S] [ pattern ]

列出聚合函数,连同其返回类型机及其操作的数据类型。如果pattern已声明,只有名称匹配模式的聚集 会显示。缺省时,仅显示用户创建的对象;提供一个模式或者S 修饰符来包括对象。

\db[+] [ pattern ]

列出所有可用的表空间。如果声明了pattern, 那么只显示那些匹配模式的表空间。如果在命令名上附加了+, 那么每个对象都和与之相关的权限一起列出。

\dc[S] [ pattern ]

列出所有字符集之间的可用转换。 如果声明了pattern, 则只列出那些匹配模式的转换。 缺省时,仅显示用户创建的对象;提供一个模式或者S 修饰符来包括对象。

\dC [ pattern ]

如果指定pattern, 只有资源或者目标类型匹配模式的投射会列出。

\dd[S] [ pattern ]

显示所有匹配pattern的描述,如果没有给出参数,显示所有可视对象。 但是不管怎样,只有那些有描述内容的对象才显示出来。 By default, only user-created objects are shown; supply a pattern or the S modifier to include system objects. "对象"包括:聚集,函数,操作符, 类型,关系(表,视图,索引,序列,大对象), 规则,触发器。例如:

=> \dd version
                     Object descriptions
   Schema   |  Name   |  Object  |        Description
------------+---------+----------+---------------------------
 pg_catalog | version | function | PostgreSQL version string
(1 row)

可以用COMMENTSQL命令生成对象的描述。

\ddp [ pattern ]

列出默认访问权限设置。一个条目显示每个角色(以及模式,若适用),多这些角色来说 默认权限设置已经从内置缺省情况发生了改变。如果指定了 pattern,只有角色名或者模式名匹配 模式的条目被列出。

ALTER DEFAULT PRIVILEGES命令是用于设置默认访问权限的。 权限显示的意义在GRANT下有解释。

\dD[S] [ pattern ]

它列出域名。若声明pattern, 只有名称匹配模式的域名会显示。缺省时,仅显示用户创建的对象; 提供一个模式或者S修饰符来包括系统对象。

\des[+] [ pattern ]

它列出外服务器(助记符:"external servers")。 若指定pattern,只有名称匹配 模式的服务器会列出。如果使用\des+形式,会显示每个服务器的 一个完整描述,包括服务器的ACL、类型、版本和选项。

\deu[+] [ pattern ]

它列出用户映射(助记符:"external users")。 若指定pattern,只有名称匹配 模式的映射会列出。如果使用\deu+形式,会显示关于映射的 额外信息。

Caution

\deu+也会显示用户名和远程用户密码,所以应该小心以免披露了这些信息。

\dew[+] [ pattern ]

它列出外部数据封装器(助记符:"external wrappers")。 若指定pattern,只有名称匹配 模式的外部数据封装器会列出。如果使用\dew+形式,会显示 外部数据封装器的ACL和选项。

\df[antwS+] [ pattern ]

列出函数及其参数、返回类型和函数类型,它们被分为"agg" (聚集), "normal", "trigger",或者"window"。仅显示特定类型的 函数,添加相应字母到a,n, t或者w 到命令。若指定pattern,仅显示名称匹 配模式的函数。若使用\df+格式,关于每个函数的额外信息,包括 包括易变性、语言、源码和描述,都会显示。缺省时,仅显示用户创建的对象; 提供一个模式或者S来包括系统对象。

Tip: 为了查找有特定类型的参数或者返回值的函数,使用您的页面调度程序的搜索能力来 滚动\df输出。

\dF[+] [ pattern ]

它列出文本搜索配置。若指定pattern,只有名称匹配 模式的配置会显示。如果使用\dF+形式,会显示每个配置的完整描述, 包括底层的文本搜索解析器和每个解析器token类型的字典列表。

\dFd[+] [ pattern ]

它列出文本搜索字典。若指定pattern,只有名称匹配 模式的字典会显示。如果使用\dFd+形式,会显示每个被选中的字典的额外信息, 包括包括底层文本搜索模板和选项值。

\dFp[+] [ pattern ]

它列出文本搜索解析器。若指定pattern,只有名称匹配 模式的解析器会显示。如果使用\dFp+形式,会显示每个解析器的完整描述, 包括包括底层函数和公认的token类型。

\dFt[+] [ pattern ]

它列出文本搜索模板。若指定pattern,只有名称匹配 模式的模板会显示。如果使用\dFt+形式,会显示关于每个模板的附加信息, 包括包括底层函数名称。

\dg[+] [ pattern ]

列出数据库角色。 如果声明了pattern, 那么只显示那些匹配模式的名字。这条命令实际上等于\du。 如果格式\dg+被使用,会显示关于每个角色的附加信息, 包括每个角色的注释。

\di[S+] [ pattern ]
\ds[S+] [ pattern ]
\dt[S+] [ pattern ]
\dv[S+] [ pattern ]

在这组命令中,字母 i, s, tv分别代表索引、序列、表和视图。 您可以按任意顺序声明任何或全部的这些字母,来获得一个这些类型的对象的清单。 例如,\dit列出索引和表。如果+附加到命令名, 若存在,每个对象会按它在磁盘上的实际大小以及其相关描述来描述。 如果声明了pattern,那么只列出匹配模式的对象。 缺省时,仅显示用户创建的对象;提供一个模式或者S修饰符来包括系统对象。

\dl

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

\dn[+] [ pattern ]

列出所有可用模式(名字空间)。如果声明了pattern, 那么只列出匹配模式的模式名。不显示非本地的临时模式。 如果在命令名上附加了+,那 么每个对象都和与之相关的权限和注释一起列出(如果有的话)。

\do[S] [ pattern ]

列出所有可用操作符,以及它们的操作数和返回的数据类型。 如果声明了pattern, 那么只显示匹配模式的操作符。 缺省时仅显示用户创建的对象;提供一个模式或者S修饰符来包含系统 对象。

\dp [ pattern ]

一列表,视图,序列和它们相关的权限。 如果声明了pattern, 那么只列出名字匹配模式的表。

GRANTREVOKE命令用于设置访问权限。 权限显示的意义在GRANT下有解释。

\drds [ role-pattern [ database-pattern ] ]

列出定义的配置设置。这些设置可以是特定角色、特定数据库或者两者都是。 role-patterndatabase-pattern 通常用于选择特定角色和数据库分别列出来。如果省略,或者如果指定*, 所有的设置都会列出来,分别包括那些不是特定角色或者特定数据库的。

ALTER ROLEALTER DATABASE命令式用来定义 每角色和每数据库配置设置。

\dT[S+] [ pattern ]

列出数据类型。如果声明了pattern, 那么只显示匹配模式的类型。如果+被添加到命令名称上,每个类型 按其内部名称和大小列出,以及其允许的数值(若是enum类型)。 缺省时仅显示用户创建的对象;提供一个模式或者S修饰符来包含系统 对象。

\du[+] [ pattern ]

列出数据角色。如果声明了pattern, 那么只名称显示匹配模式的角色名。如果使用\du+格式, 会显示关于每个角色的附加信息,包括对每个角色的注释。

\edit (或\e) [ filename ]

如果声明了filename, 则编辑此文件并且在编辑器退出后将其内容拷贝回查询缓冲区。 如果没有给出此参数, 则把当前查询缓冲区内容拷贝到一个临时文件然后以相同方式编辑。

然后根据一般的psql规则重新分析查询缓冲区, 这时整个缓冲区当作一个单行, 因此你无法用这个方法制作脚本(用\i)。 这还意味着如果该查询以分号结尾(或者包含分号), 它就会马上被执行。否则它只是在查询缓冲区里等待。

Tip: psqlPSQL_EDITOREDITORVISUAL顺序搜索环境变量查找要用到哪个编辑器。 如果上面的都没有设置,那么在Unix系统上使用vi, 而在Windows系统上用notepad.exe

\ef [ function_description ]

该命令提取并编辑命名的函数的定义,以一个CREATE OR REPLACE FUNCTION 命令的形式。以对\e相同的方式编辑。退出编辑器后,更新命令会在 查询缓冲区等待;类型分号或者要发送它的\g ,或者用来取消的\r

目标函数可以仅通过名称来声明,或者通过名称和参数来声明,例如foo(integer, text)。 必须给定参数类型,如果有超过一个同名的函数。

如果没有指定函数,一个空的CREATE FUNCTION模板那是用来编辑的。

\echo text [ ... ]

向标准输出打印参数,用一个空格分隔并且最后跟着一个新行。 这个特性在显示脚本的输出时会有用。例如:

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

如果第一个参数是一个无引号的-n,那么不会写出结尾的新行。

Tip: 如果使用\o命令重定向查询的输出, 你可能会用\qecho取代这条命令。

\encoding [ encoding ]

设置客户端字符编码方式。不带参数时,这条命令显示当前的编码方式。

\f [ string ]

为不对齐的查询输出设置域分隔符。 缺省时是竖条(|)。 参阅\pset获取设置输出选项的通用方法。

\g [ { filename | |command } ]

把当前的查询输入缓冲区的内容发送给服务器并且把查询的输出存储到可选的filename或 者把输出重定向到一个独立的执行command的Unix shell。 单独一个\g实际上等效于一个分号。 一个带有参数的\g"一次 性"\o命令的代用品。

\help (or \h) [ command ]

给出指定SQL命令的语法帮助。 如果没有给出command, 那么psql将列出可获得语法帮助的所有命令。 如果command是一个星号(*) , 则显示所有SQL命令的语法帮助。

Note: 为简化击键,包含多个单字的命令不需要引起。因此键入\help alter table是正确的。

\H

打开HTML查询输出格式。如果HTML格式已经打开, 则切换回缺省的对齐的文本格式。 这个命令是为了兼容和方便,参阅\pset获取设置其它输出选项的内容。

\i filename

从文件filename中读取并把其内容当作从键盘输入的那样执行查询。

Note: 如果你想在屏幕上看到读入的行,就必须对所有行将变量ECHO 设置为all

\l (or \list)
\l+ (or \list+)

列出服务器中所有数据库的名称、所有者、字符集编码以及访问权限。 如果添加+到命令名称、数据库大小、默认表空间,并且也会显示描述。 (大小信息仅对当前用户可连接的数据库是有效的。)

\lo_export loid filename

从数据库里读取OIDloid的大对象并把它写到filename里。 注意这个功能与服务器函数lo_export有些微小的区别, 后者运行时带着运行数据库服务器的用户权限,而且是在服务器的文件系统上。

Tip: 使用\lo_list 查看大对象的 OID

\lo_import filename [ comment ]

把文件存储为一个PostgreSQL大对象。可以带着一个该对象的注解选项。例如:

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

表明大型对象收到对象ID152801的响应,可以用来访问将来新创建的大对象。 为了可读性,建议总是把一个人类可读的评论与每一个对象联系。OIDs和注释 可以通过\lo_list来查看。

注意这条命令与服务器端的lo_import有一些区别,因为这条命令 是本地用户在本地文件系统上操作, 而不是以服务器用户在服务器文件系统上操作。

\lo_list

显示一个目前存储在该数据库里的所有PostgreSQL大对象和 它们的所有者的列表。

\lo_unlink loid

从数据库里删除OIDloid 的大对象。

Tip: 使用\lo_list查找大对象的OID

\o [ {filename | |command} ]

把后面的查询结果保存到文件filename里或者把后面的查询结果重定向到一个独立执行command的Unix shell。如果没有声明参数,查询输出 将被重置为标准输出。

"查询结果"包括所有表,命令响应和从数据库服务器来的提示, 同样还有各种各样查询数据库的反斜杠命令的输出(如\d),但是没有错误信息。

Tip: 要用文本分散查询结果之间的输出,用\qecho

\p

打印当前查询缓冲区到标准输出。

\password [ username ]

更改指定用户的口令,缺省为当前用户。该命令将提示口令输入, 然后将加密过的口令使用ALTER ROLE之类的命令发送给服务器。 这可以保证新口令不会以明文形式出现在命令历史、服务器日志、或其他什么地方。

\prompt [ text ] name

提示用户设置变量name。一个可选提示, text,是可以指定的。(对于多字提示, 用单引号。)

缺省时,\prompt使用终端输入和输出。然而,如果-f命令行 开关被使用,\prompt使用标准输入和标准输出。

\pset option [ value ]

这个命令的输出设置选项影响查询结果表。option 表明那个选项应该被设置。value的语义根据选定的 选项发生变化。对于一些选项,省略value会导致 选项toggled或者复原,正如特定选项中描述的一样。如果没有提及此类表现,那么省略 value仅会使得当前设置显示出来。

可调节的打印选项有:

format

设置输出格式为unalignedalignedwrappedhtmllatex,或者troff-ms之一。 允许使用唯一缩写,这也意味着一个字母就够了。

Unaligned(不对齐)模式把一条记录的所有字段都输出到一行, 用当前有效的域分隔符分隔。 这主要用于生成那些要被其它程序读取的输出(比如,制表符分隔或者逗号分隔)。

Aligned(对齐)模式是标准的,人类可读的,格式化好了的文本输出;这是缺省。

wrapped格式就像aligned,但是跨线包装宽的数据值 使得输出匹配目标列宽。目标宽会按columns选项描述的来决定。 请注意psql不会试图包装列标题;因此,wrappedaligned表现的相同,如果列标题所需的总宽度超过目标。

The html, latex,和troff-ms HTMLLaTeX模式把表输 出为可用于文档里的对应标记语言。它们还不是完整 的文档!可能对于HTML变化还不是太大, 但是在LaTeX里,你必须有一个完整的文档包装器。

columns

wrapped格式设置目标宽度,以及宽读限制来决定输出的宽度是否足够请求 页面调动程序。0(缺省值)会导致目标宽度被环境变量COLUMNS控制, 若未设置COLUMNS或者回事检测到的屏幕宽度。另外,如果 columns为0,那么wrapped格式仅影响屏幕输出。如果 columns是非零的那么文件和管输出也会包装为那个宽度。

border

value必须是一个数字。 通常,数字越大,表就有越宽的边界和越多的线,但是这个参数取决于实际的格式。 在HTML模式里,这个参数会直接翻译成border=...属性, 在其它的模式里,只有值0(无边界)、1(内部分隔线)、2(表框架)有意义。

linestyle

设置边界线条格式为ascii, old-ascii 或者unicode中的一种。允许唯一缩略词。 (那意味着一个字母就足够了。)缺省设置为ascii。 该选项仅影响alignedwrapped的输出格式。

ascii格式使用纯ASCII字符。数据中的 换行符通过使用右侧空白中的一个+来显示。当 wrapped格式从一行中封装数据到下一行而没有换行符, 一个点(.) 会显示在首行的右侧空白中,并且会再次出现在接下来一行 的事务左侧空白处。

old-ascii格式使用纯ASCII字符,通过使用 在PostgreSQL8.4以及更早期版本中使用的格式风格。 数据中的换行符通过使用一个:符号来显示而不是左边栏的分隔符。 当数据从一行被封装到下一行而没有一个换行符,一个;符号 是用来代替左边的列分隔符。

unicode格式使用Unicode盒绘图字符。在数据中的换行符通过使用 左侧空白中的回车符号来显示。当数据被从一个行封装到下一个而没有一个换行符, 一个省略符会显示在首行的左侧空白中,并且会再次在以下行的左侧空白中。

border设置比0大时,该选项也决定用来画边界线的字符。 纯ASCII字符到处适用,但是Unicode字符在能识别它 们的显示中看起来更好。

expanded (or x)

如果value已被指定, 那它必须是on或者off, 这将启用或者禁用扩展模式。如果value 被略去了常规和扩展模式之间的切换命令。当启用扩展模式,查询结果会在两列中显示, 列名称会在左边列显示而数据会在右边一列显示。若数据不匹配常规"horizontal" 模式下的屏幕,该模式是有效的。

null

设置字符串在一个空值的地方打印。默认是什么都不打印,这很容易被误认为是一个空 字符串。例如:有人可能会更喜欢\pset null '(null)'

fieldsep

声明在非对齐模式时的域分隔符。这样就可以创建其它程序希望的制表符或逗号 分隔的输出。要设置制表符域分隔符, 键入\pset fieldsep'\t'。缺省域分隔符是'|'(竖条符)。

footer

如果指定value,那么必须是 on或者off,这将启用或者关闭表脚码 的显示((n rows)也算)。如果 value省略切换页脚显示打开或关闭 的命令。

numericlocale

如果指定value,那么必须是 on或者off,这将启用或者关闭表脚码 的显示((n rows)也算)。如果 value省略定期和特定于地区 的数字输出之间的命令切换。

recordsep

声明在非对齐模式时的记录分隔符。缺省是换行符。

tuples_only (or t)

如果指定value,那么必须是 on或者off,这将启用或禁用只有元组的模式。 如果value省略定期和仅元组输出之间的命令。 常规的输出包括额外的信息,如列标题、标题和各种页脚。在仅元组模式中,仅显示实际表数据。

title

为任何随后打印的表设置标题。这个参数可以用于给你的输出一个描述性标记。 如果不带value,重置标题。

tableattr (or T)

声明放在HTML table标签里的任何属性 (例如cellpaddingbgcolor)。注意, 你可能不需要在这里声明border, 因为已经在\pset border里用过了。 如果没有给定value,表属性会被复原。

pager

控制查询和psql帮助输出的分页器。 如果设置了环境变量PAGER, 那么输出被定向到指定程序,否则使用系统缺省(比如more)。

pager选项是off,分页器不会被使用。 当pager选项是on,分页器在适当的时候使用,如: 当输出是一个终端并且不适合屏幕时。pager选项也可以被设置为 always,这会使得分页器用于所有的终端而不管是否是适合屏幕的。 没有一个value\pset pager 切换分页器启动和关闭。

可以在例子例子小节看到这些不同格式输出的示例。

Tip: 有很多用于\pset的快速命令。参阅\a\C\H\t\T\x

Note: 无参数运行\pset是错误的。以后这样调用将显示当前打印选项状态。

\q

退出psql程序。

\qecho text [ ... ]

这条命令等效于\echo, 区别是所有输出将写入由\o设置的输出通道。

\r

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

\s [ filename ]

将命令行历史打印出或是存放到filename。 如果省略则输出到标准输出。这个选项只有在psql 配置成使用GNU Readline库后才生效。

\set [ name [ value [ ... ] ] ]

设置内部变量namevalue或者如果给出了多于一个值, 设置为所有这些值的连接结果。如果没有给出第二个参数, 那么只设变量不设值。要重置一个变量,使用\unset命令。

有效的变量名可以包含字符,数字和下划线。参阅下面的变量变量 获取细节。

尽管你可以设置任何变量为任意值,psql对一些变量特殊对待。 它们在关于变量的小节里面有文档。

Note: 这条命令和SQL命令SET是完全不一样的。

\t

切换输出的字段名的信息头和行记数脚注。 这条命令等效于\pset tuples_only,提供它主要为了方便。

\T table_options

在使用HTML输出 模式时声明放在table标记里的属性。 这条命令等效于\pset tableattr table_options

\timing [ on | off ]

没有参数,切换每个SQL语句需要时间的显示,以毫秒为单位。通过参数设置名称。

\w filename
\w |command

将当前查询缓冲区输出到文件filename或者重定向到Unix 命令command

\x

切换扩展行格式。等效于\pset expanded

\z [ pattern ]

通过相关访问权限列出表、视图和序列。如果指定 pattern, 则仅列出名称匹配模式的表、视图和序列。

这是\dp("显示权限")的别名。

\! [ command ]

返回到一个单独的Unix shell或者 执行Unix命令command。 参数不会被进一步解释;shell将看到全部参数。

\?

获得关于反斜杠命令的帮助信息。

Patterns

各种\d命令都接受一个pattern参数, 声明要显示的对象名字。最简单的情况下pattern正好等于对象的名字。 pattern中的字符通常会被自动转换成小写,就像SQL名字一样。 例如\dt FOO将显示名为foo的表。 与在SQL名字中相同的是双 引号界定的pattern将保持原样(不做大小写转换)。 如果需要在双引号界定的pattern中使用双引号字符, 你可以写两个并列的双引号,这与 SQL 的引号规则相同。 例如,\dt "FOO""BAR"将会显示名为FOO"BAR的表, 但是不会显示foo"bar。与一般的SQL名字规则不同的是, 你可以仅用双引号界定名字的一部分,例如\dt FOO"FOO"BAR将显示 名为fooFOObar的表。

每当pattern完全省略时,\d命令 显示所有在当前模式搜索路径下可见的对象;这相当于使用*作为模式。(一个对象会 认为是visible,如果其包含模式在搜索路径下并且没有相同的类型和名称的对象会 在搜索路径中出现地更早。这等效于声明这个对象可以通过名称引用而没有显式的模式的条件。) 为了看数据库中的所有对象而不关闭可见性,使用*.*作为模式。

Pattern中的*表示任何字符序列, 包括没有字符,而?表示"任何单个字符"。 这个表示法和Unix的shell文件名模式兼容。 比如\dt int*显示所有名字以int开头的表。 但是在双引号内部的*?不具有匹配的功能, 它们只代表自身。

包含点(.)的pattern将被解释成模式名pattern后面跟一 个对象名 pattern 。例如,\dt foo*.*bar*显 示所有名字包括foo 的模式中的所有名字以bar开头的表。如果没有出现句点, 那么这个模式只匹配在当前模式搜索路径中可见的对象。 同样,在双引号内的点没有这个含义,它只代表其自身。

还可以使用正则表达式语法,比如字符类等等。例如用[0-9]匹配所有数字。 除.之外的所有正则表达式中的特殊字符都按照Section 9.7.3里面描述的规则进行解析, 此外,*将被理解成.*,同时?将被理解成.,and $ which is matched literally。这样一来, 你就可以用?代替.、用(R+|)代替 R*、 用(R|) 代替R?$不需要作为一个正则表达式,因为模式必须匹配整个名称,与正则表达式的常规解释不通 (换句话说,$会自动加到您的模式中)。在开头和/或末尾写*,如果您 不希望该模式被固定。 需要注意的是在双引号内部的所有正则表达式特殊字符都将失去其特殊含义。 同样,在对操作符(也就是作为\do参数的时候)进行匹配时正则表达式特殊字符也将失去其特殊 含义。

高级特性

变量

psql提供类似通常Unix命令shell那样的变量替换特性。 变量只是简单的名称/值对,这里的值可以是任何长度的任何值。 可以使用psql元命令\set设置一个变量:

testdb=> \set foo bar

把变量foo的值设置为bar。要检索变量的内容, 在变量名前面放上冒号然后把它用在任意斜杠命令里:

testdb=> \echo :foo
bar

Note: \set的参数服从和其它命令一样的替换规则。因此你可以构造有趣的引用, 像\set :foo 'something'这样,获得分别像PerlPHP那样 有名的"软连接""变量变量"。不幸(或者万幸?)的是, 用这些构造不能做任何有用的事情。 另一方面,\set bar :foo是一个非常有效的拷贝变量的方法。

如果你不带第二个参数调用\set, 那么只是设置这个变量而没有值。 要重置(或删除)一个变量,使用\unset命令。

psql的内部变量可以 包括任意顺序和数量的字母、数字、下划线。 有一些常用变量被psql特殊相待。它们是一些选项设置, 这些选项在运行时可以通过改变变量的值或者改变一些应用的表现状态而改变。 尽管你可以把这些变量用于其它用途,但是不鼓励这么做, 因为程序的特性可能会变得非常奇怪。通常, 所有特殊对待的变量都是由大写字母组成(可能还有数字和下划线)。 为了保证和未来的最大限度的兼容性,请避免使用这样的变量。 下面是一个所有特殊对待的变量列表。

AUTOCOMMIT

如果是on(缺省),那么每个SQL命令都在成功完成后自动提交。 要推迟这种模式下的提交,你必须输入一个BEGINSTART TRANSACTION命令。 如果是off或者未设置,SQL命令不会提交, 直到你明确地发出COMMITEND。 关闭自动提交的模式是通过为你明确发出一个BEGIN实现的, 它是放在任何尚未在一个事务块中并且自己不是 BEGIN或其它事务控制命令 也不是那些不能在事务块里执行的命令(比如VACUUM)的前面。

Note: 在关闭自动提交的模式下,你必须明确放弃任何失败的事务, 方法是执行ABORTROLLBACK。还要注意, 如果你不提交就退出会话,所做的工作会丢失。

Note: 打开自动提交是PostgreSQL的传统行为, 但是关闭自动提交更接近SQL规范。 你可以在系统范围的psqlrc~/.psqlrc文件中关闭自动提交。

DBNAME

正在连接着的数据库名称。每次与一个数 据库联结都会设置这个值(包括程序启动), 但是可以删除。

ECHO

如果设为all,那么来自键盘或脚本的所有输入行在分 析或执行前都回显到标准输出。使用-a选项声明 在程序启动时就默认这样做。如果设置为queries, 那么psql只是在查询发送给服务器之前打印出来。 实现这个功能的命令行选项是-e

ECHO_HIDDEN

当设置了这个变量并且一个反斜杠命令查询数据库时, 首先显示查询。这样你可以学习 PostgreSQL 内部的 东西并且在你自己的程序里提供类似功能。 要在程序一起动的时候就启用这个行为, 可以使用-E选项。如果你设置该 变量的值为noexec, 那么查询只是显示出来但是实际上不发送到服务器去执行。

ENCODING

当前的客户端字符集编码。

FETCH_COUNT

如果该变量的值大于零, SELECT查询的结果将按此值分批返回和显示, 而不是缺省的一次取出和显示所有结果。 这样就可以无论结果集有多大都只使用很少量的内存。 一般来说,设为100到1000之间的值比较合理。 需要注意的是,使用此特性后,一个查询可能在显示了一部分结果之后遭遇失败。

Tip: 虽然该特性可以用于所有输出格式。 但是并不适合在缺省的aligned格式上使用这个特性, 因为每一批结果会被单独的分开格式化,这样一来每一批输出结果的列宽就可能各不相等。 不过对于其他格式这个特性工作的很好。

HISTCONTROL

如果将这个变量设为ignorespace, 那么以空格开始的行将不会进入历史列表。如果设置为ignoredups, 那么与以前历史记录里匹配的行也不会进入历史记录。 值ignoredups是上面 两个的结合。如果删除此变量或者其值为任何与上面的值不同的东西, 所有交互模式读入的行都被保存入历史列表。

Note: 这个特性是从Bash偷学来的。

HISTFILE

此文件将用于存储历史列表。缺省值是~/.psql_history。 比如,在 ~/.psqlrc里使用:

\set HISTFILE ~/.psql_history- :DBNAME

将使得psql为每个数据库维护一个独立的历史。

Note: 这个特性是从Bash偷学来的。

HISTSIZE

保存在命令历史里的命令的个数。缺省值是500。

Note: 这个特性是从 Bash 偷学来的。

HOST

当前你正连接的数据库服务器主机。 这是在每次你与数据库连接时(包括程序启动)设置的,但是可以删除。

IGNOREEOF

如果删除此变量,向一个交互的psql会话发送 一个EOF(通常是 Control+D)将终止应用。 如果设置为一个数字值,那么在应用终止前该 数值的EOF字符将被忽略。如果设置了此变量但是没有数字值,缺省是10。

Note: 这个特性是从 Bash 偷学来的。

LASTOID

最后影响的OID值,即为从一条INSERT\lo_import命令返回的值。 此变量只保证在下一条SQL命令的结果显示之前有效。

ON_ERROR_ROLLBACK

如果是on,那么当一个事务块里的语句产生错误的时候, 这个错误将被忽略而事务将继续。如果是interactive, 那么这样的错误只是在交互的会话里忽略,而不是在从读取脚本文件的时候。 如果是off(缺省),事务块里一个语句生 成的错误将会回滚整个事务。 on_error_rollback-on的模式是通过 在一个事务块的每个命令前为你隐含地发出一个SAVEPOINT的方 式工作的,在发生错误的时候回滚到该事务块。

ON_ERROR_STOP

缺省时,如果非交互的脚本碰到一个错误 (比如一条错误的SQL命令或者内部元命令), 处理会继续进行。这是psql的传统特性,但 是有时候不太希望这样。如果设置了这个变量,脚本处理将马上停止。 如果该脚本是从另外一个脚本调用的,那个脚本也会按同样的方式停止。 如果最外层的脚本不是从一次交互的psql会话 中调用的而是用-f选项调用的, psql将返回错误代码3,以示这个 情况与致命错误条件的区别(错误代码为1)。

PORT

当前你正在连接的数据库服务器的端口。 这是在每次你与数据库连接时(包括程序启动)设置的, 但是可以删除。

PROMPT1
PROMPT2
PROMPT3

这些指明psql显示的提示符看上去像什么。参阅下面的提示符提示符

QUIET

这个变量等效于命令行选项-q。可能在交互模式下没有什么用。

SINGLELINE

这个变量等效于命令行选项 -S

SINGLESTEP

这个变量等效于命令行选项 -s

USER

当前你正用于连接的数据库用户。 这是在每次你与数据库连接时(包括程序启动)设置的, 但是可以被删除。

VERBOSITY

这个选项可以设置为值defaultverboseterse之一以控制错误报告的冗余行。 of error reports.

SQL代换

psql变量的一个额外的有用的特性是你可以替代 ("interpolate")它们为常规的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字符实体。

该原理的一个可能的应用是将一个文件的内容复制到一个表列中。首先加载文件到一个变量 人后按照以上执行:

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

(请注意这仍将无法工作,若my_file.txt包含NUL字节。 psql不支持在变量值中内嵌NUL字节。)

尽管冒号可以合法地出现在SQL命令中,插入时的一个明显意图(如:name, :'name', or :"name") 是不能更改的除非命名的变量 是当前设置的。在任何情况下,您都可以通过加上一个反斜杠来转义一个冒号来阻止其替换。 (变量的冒号语法是面向嵌入式查询语言的标准SQL,如ECPG。) 面向数组切片和类型映射的冒号语法是PostgreSQL扩展, 因此冲突。转义一个变量的值为SQL文本或者标示符的冒号语法是一个psql 扩展。)

提示符

psql使用的提示符可以根据你的喜好自定义。 三个变量PROMPT1PROMPT2PROMPT3包含描述提示符 的外观的字符串和特殊逃逸序列。PROMPT1psql请求一 个新命令时使用的正常提示符。PROMPT2是在一个命令输入期待 更多输入时(因为查询没有用一个分号结束或者引号没有关闭)显示的提 示符。PROMPT3在你运行一个SQL COPY 命令和等待你在终端上键入记录时使用。

相应的提示符变量的值是按字面打印的, 除非碰到一个百分号(%)。 这时某些其它的文本被替换, 替换为何物取决于下一个字符。已定义的替换是:

%M

数据库服务器全程主机名(带着域名),如果连接是通过Unix域套接字 进行的就是[local], 或者如果Unix域套接字不是编译的缺省位置, 就是[local:/dir/name]

%m

数据库服务器的主机名删去第一个点后面的部分剩下的东西。 或者如果是通过Unix域套接字连接,就是[local]

%>

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

%n

数据库会话的用户名。这个值的扩展可能在一个数 据库会话过程中因为SET SESSION AUTHORIZATION命令而改变。

%/

当前数据库名称。

%~

类似%/,但如果数据库是你的缺省数据库输出是波浪线~

%#

如果会话用户是数据库超级用户, 使用#,否则用>。这个值的扩展可能在一个数据库会 话过程中因为SET SESSION AUTHORIZATION命令而改变。

%R

对于PROMPT1通常是=,但是如果是单行模式则是^, 而如果会话与数据库断开(如果\connect失败可能发生)则是!。 对于PROMPT2该序列被-*,一个单引号/双引号/美 元符(取决于psql是否等待更多的输入:查询没有终止、 正在一个/* ... */注 释里、正在引号或者美元符扩展里)代替。 对于PROMPT3该序列不解释成任何东西。

%x

事务状态:如果不在事务块里则是一个空字符串, 如果在事务块里则是*, 如果在一个失败的事务块里则是!,或者无 法判断事务状态时为?(比如没有连接)。

%digits

指定字节值的字符将被替换到该位置。

%:name:

psql变量name的值。参阅变量变量小节获取细节。

%`command`

command的输出类似于通常的 "back-tick"替换。

%[ ... %]

提示可以包含终端控制字符,这些字符可以改变颜色、背景、提示文本 的风格、终端窗口的标题。为了让Readline的行编辑特性正确运行, 这些不可打印的控制字符必须设计成不可见的,方法是用%[%]包 围它们。在提示符里可能出现这些东西的多个配对。例如:

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

的结果是在VT100兼容的可显示彩色的终端上的一个宽体(1;)黑 底黄字(33;40)。

键入%%可以在提示符里插入百分号。缺省提 示符为'%/%R%# '用于第一二个提 示符,'>> '用于第三个提示符。

Note: 这个特性是从tcsh偷学来的。

命令行编辑

psql为了编辑和检索命令行的方便 支持Readline和历史库。 命令历史在psql退出的时候自动保存, 在psql启动的时候加载。还支持Tab补齐,尽管该补齐 逻辑并不是一个SQL分析器必备的。如果因某些 原因你不喜欢tab补齐,可以把下面几行放在你的家目录 下的.inputrc文件里关闭这个特性:

$if psql
set disable-completion on
$endif

(这不是psql而是 Readline的特性,参考它的文档获取更多细节。)

环境变量

COLUMNS

如果\pset columns为0,为wrapped格式控制宽度并且若广泛的 说不出需要分页器时为决定控制宽度。

PAGER

如果查询结果不能一屏显示出来,那么将通过该命令管道传递这些结果。 典型值更大或者更小的。默认是基于 平台的。分页器的使用可以通过使用\pset命令来关闭。

PGDATABASE
PGHOST
PGPORT
PGUSER

缺省的连接参数(请参阅Section 31.13)。

PSQL_EDITOR
EDITOR
VISUAL

\e命令使用的编辑器。这些变量是按照上面的顺序检查的;设置最早的最先使用。

SHELL

\!命令执行的命令。

TMPDIR

存储临时文件的目录。缺省是 /tmp.

该实用程序,跟大部分PostgreSQL实用程序一样,也使用libpq 所支持的环境变量(请参阅Section 31.13)。

文件

注意

Windows用户需要注意的地方

psql是以一种"控制台应用"的方式制作的。 因为Windows控制台窗口和系统其它部分使用不同 的编码,所以在psql里使用8位字符的时候 必须采取特殊的注意措施。如果psql检测到一个有 问题的控制台代码页,那么它在启动的时候会警告你。 要修改控制台代码页,有两件事是必须做的:

例子

第一个例子演示了如何把一个查询分成多个行进行输入。注意提示符的变化:

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

现在再看看表定义:

testdb=> \d my_table
             Table "my_table"
 Attribute |  Type   |      Modifier
-----------+---------+--------------------
 first     | integer | not null default 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