PostgreSQL 交互终端命令之psql

psql--Postgresql交互终端

用法:
psql[option...][dbname[username]]

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

参数:

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

-A
--no-align
切换为非对齐输出模式。(缺省输出模式是对齐的。)

-ccommand
--commandcommand
声明psql将执行一条查询字串,command,然后退出。这一点在shell脚本里很有用。
command必须是一条完全可以被服务器分析的查询字串(也就是说,它不包含psql特有的特性),或者是一个反斜杠命令。这样你就不会混合sql和psql元命令。要想混合使用,你可以把字串定向到psql里,象这样:echo"\x\\select*fromfoo;"|psql。
如果命令字串包含多个sql命令,那么他们在一个事务里处理,除非在字串里包含了明确的BEGIN/COMMIT命令把他们分成多个事务。这个和从psql的标准输入里给它填充相同字串不同。

-ddbname
--dbnamedbname
声明想要联接的数据库名称。等效于在命令行行上把dbname声明为第一个非选项参数。

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

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

-ffilename
--filefilename
使用filename作为命令的语句源而不是交互式读入查询。在处理完文件后,psql结束。这个选项在很多方面等效于内部命令\i。
如果filename是-(连字符),则从标准输入读取。
使用这个选项与用psql<filename有微小的区别。通常,两者都回按照你预期那样运行,但是使用-f打开了一些很好的特性,比如带行号的错误信息。而且,使用这个选项还有可能有减小启动负荷的机会。另一方面,如果你把所有内容手工输入,使用shell输入定向的方式(理论上)能保证生成和你已经得到的完全一样的输出(译注:重复运行命令)。

-Fseparator
--field-separatorseparator
使用separator作为未对齐输出的域分隔符。等效于\psetfieldsep或\f。

-hhostname
--hosthostname
声明正在运行服务器的主机名。如果主机名以斜杠开头,则它被用做到Unix域套接字的路径。

-H
--html
打开HTML格式输出。等效于\psetformathtml或\H命令。

-l
--list
列出所有可用的数据库,然后退出。其他非联接选项将被忽略。类似于内部命令\list。

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

-ofilename
--outputfilename
将所有查询输出定向到文件filename。这个选项等效于命令\o。

-pport
--portport
声明被服务器侦听的TCP端口或使用的缺省本地Unix主控套接文件句柄。缺省的是环境变量PGPORT的值,如果没有设置的话是编译是声明的端口,通常是5432。

-Passignment
--psetassignment
允许你在命令行上以\pset的风格设置打印选项。要注意的是你在这里用等号分割名称和值,而不能用空格。因此要把输出格式设置为LaTeX,你可以敲入-pformat=latex。

-q
--quiet
声明psql将安静地执行处理任务。缺省时psql将打印欢迎和许多其他输出信息。如果使用了此选项,这些都不出现。这在和-c选项一起使用时很有效。在psql里,你可以通过设置QUIET变量实现同样效果。

-Rseparator
--record-separatorseparator
使用separator做为非对齐输出的记录分隔符。等效于\psetrecordsep命令。

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

-S
--single-line
进入单行运行模式,这时每个命令都将由换行符结束,象分号那样。
注意:注意这个模式是给那些坚持要这个特性的人的,我们不鼓励你这么用。实际上,如果你在一行里混合使用sql和元命令,执行的顺序对不熟练的用户而言不总是清晰的。

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

-Ttable_options
--table-attrtable_options
允许你声明放在HTMLtable标记里的选项。参阅\pset获取细节。

-u
强制psql在和数据库联接之提示输入用户用户名和口令。
这个选项已经废弃了,因为它在概念上有漏洞。(提示输入非缺省用户名提示输入服务器要求的口令是完全两码事。)我们鼓励你用-U和-W选项取代。

-Uusername
--usernameusername
以用户username代替缺省用户数据库联接。(当然,你必须有这么做的权限。)

-vassignment
--setassignment
--variableassignment
进行一次变量分配,象内部命令\set那样。注意,如果有变量名和值的话,你必须在命令行上用等号分隔它们。要重置一个变量,去掉等号。这个分配是在启动的很早的阶段进行的,所以为内部使用保留的变量可能被再次覆盖。

-V
--version
打印psql版本然后退出。

-W
--password
强制psql在与一个数据库联接前提示输入口令。
如果服务器要求口令认证,psql自动提出一个口令提示符。不过,目前是否需要输入口令的判断并不完全可靠,因此用这个选项强制一个提示符。如果没有发出口令提示符而服务器要求口令认证,那么联接企图将失败。
这个选项将在整个会话过程中有效,即使你用元命令\connect改变了所联接的数据库。

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

-X,--no-psqlrc
不读取启动文件(系统的psqlrc或者你的~/.psqlrc都不读取)。

-?
--help
显示关于psql命令行参数的帮助然后退出退出状态

[object Object]
内部命令:

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

\cd[directory]
把当前工作目录改变到directory。没有参数是则改变到当前用户的家目录。
提示:要打印出你的当前工作目录,使用\!pwd。

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

\connect(或者\c)[dbname[username]]
与一个新的数据库建立一个联接,使用/不用一个用户名。前面的联接将关闭。如果dbname是-,那么就假设是当前数据库名称。
如果省略username,则假设是当前用户名。
作为一条特殊规则,不带任何参数运行\connect将以缺省用户身份与缺省数据库连接(正如你不带任何参数运行psql一样。)
如果联接失败(用户名错,访问拒绝等),那么将保留前面的联接--当且仅当在psql处于交互模式下如此。如果运行的是非交互的脚本,处理会马上停止,并返回一个错误。选择这样的区别是一方面为用户使用方便考虑,另一方面为保证脚本不会碰巧操作了错误数据库的安全机制考虑的。

\copytable[(column_list)]{from|to}{filename|stdin|stdout|pstdin|pstdout}[with][oids][delimiter[as]'character'][null[as]'string'][csv[quote[as]'character'][escape[as]'character'][forcequotecolumn_list][forcenotnullcolumn_list]]
执行前端(客户端)拷贝。这是一个运行sqlcopY命令的操作,不同的是sqlcopY是服务器在读写指明的文件,而psql读写文件并作为本地的文件系统和服务器之间的路由取出或写入数据。这意味着文件访问性和权限都是本地用户的,而不是服务器的,因此不需要sql超级用户权限。
这条命令的语法是模拟sqlcopY命令的。要注意的是由此而来,有一些特殊的分析规则应用于\copy命令。尤其是变量替换规则和反斜杠代换规则不起作用。
\copytablefromstdin|stdout分别基于命令输入和输出读/写。所有行都从发出命令的同一个源读取,直到读到了\.或者流达到EOF。输出发送到和命令输出相同的位置。要从psql的标准输入或者输出读/写,使用pstdin或者pstdout。这个选项用于把和sql脚本嵌在一起的文件填充表很有用。
提示:此操作不象sqlcopY命令这样高效,因为所有数据必须通过客户端/服务器联接。对于大数据量的操作,另一种方法更可行。

\copyright
显示Postgresql的版权和版本信息。

\d[pattern]
\d+[pattern]
对于每个匹配pattern的关系(表,视图,索引或者序列),显示所有列,它们的类型,表空间(如果不是缺省的)和任何特殊属性,象NOTNULL或缺省等--只要存在。如果实际上这个关系是一个表,任何已定义的索引,主键,唯一约束相关的索引,规则,约束,和触发器也同样显示出来,如果关系是一个视图,还显示视图的定义。("匹配模式"在下面定义。)
从\d+来的命令也是一样的,只不过显示更多信息:任何与表的列关联的注解也都会显示,还有就是表中出现的OID。
注意:如果如果不带任何pattern调用\d,等效于\dtvs,将显示一个所有表,视图和序列的列表。这完全是出于方便的考虑。

\da[pattern]
列出所有可用聚集函数,以及它们操作的数据类型。如果声明了pattern,那么只显示匹配(正则表达式)的聚集函数。

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

\dc[pattern]
列出所有字符集之间的可用转换。如果声明了pattern,则只列出那些匹配模式的转换。

\dC
列出所有类型转换。

\dd[pattern]
显示所有匹配pattern的描述,如果没有给出参数,显示所有可视对象。但是不管怎样,只有那些有描述内容的对象才显示出来。("对象"包括聚集,函数,操作符,类型,关系(表,视图,索引,序列,大对象),规则和触发器。)例如:
=>\ddversion
Objectdescriptions
Schema|Name|Object|Description
------------+---------+----------+---------------------------
pg_catalog|version|function|Postgresqlversionstring
(1row)
可以用COMMENTsql命令生成对对象的描述。

\dD[pattern]
列出所有可用域。如果声明了pattern,那么只显示匹配的域。

\df[pattern]
\df+[pattern]
列出所有可用函数,以及它们的参数和返回的数据类型。如果声明了pattern,那么只显示匹配(正则表达式)的函数。如果使用了\df+的形式,每个函数的附加信息,包括语言和描述也会显示出来。
注意:要查找接受或者返回特定类型的函数,使用你的分页器的搜索功能来滚动\df的输出。
为了减少混乱,\df并不显示数据类型的I/O函数。这样是通过忽略那些接受或者返回类型cstring的函数实现的。

\dg[pattern]
列出所有数据库组。如果声明了pattern,只显示那些匹配模式的名字。

\distvS[pattern]
这不是实际的命令名称:字母i,s,t,v,S分别代表索引(index),序列(sequence),表(table),视图(view)和系统表(systemtable)。你可以以任意顺序声明任意或者所有这些字母获得这些对象的一个列表。字幕S把列表限制于系统对象;如果没有S,则只显示非系统对象。如果在命令名上附加了+,那么还会列出和每个对象相关联的描述,如果有的话。
如果声明了pattern,那么只列出匹配模式的对象。

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

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

\do[pattern]
列出所有可用操作符,以及它们的操作数和返回的数据类型。如果声明了pattern,那么只显示匹配模式的操作符。

\dp[pattern]
生成一列可用的表和它们相关的权限。如果声明了pattern,那么只列出名字可以匹配模式的表。
命令GRANT和REVOKE用于设置访问权限。参阅GRANT获取更多信息。

\dT[pattern]
\dT+[pattern]
列出所有数据类型或只显示那些匹配pattern的。这条命令的\dT+形式显示更多信息。

\du[pattern]
列出所有已配置用户或者只列出那些匹配pattern的用户。

\edit(or\e)[filename]
如果声明了filename,则编辑此文件并且在编辑器退出后将其内容拷贝回查询缓冲区。如果没有给出参数,则把当前查询缓冲区内容拷贝到一个临时文件然后以相同方式编辑。
然后根据一般的psql规则重新分析查询缓冲区,这时整个缓冲区当作一个单行。(因此你无法用这个方法制作“脚本”,用\i做脚本。)这还意味着如果该查询以分号结尾(或者包含分号),它就会马上被执行。否则它只是在查询缓冲区里等待。
提示:psql搜索环境变量Psql_EDITOR,EDITOR和VISUAL(以此顺序)查找要用到哪个编辑器。如果上面的都没有设置,那么在Unix系统上使用vi,在Windows系统上用notepad.exe。

\echotext[...]
向标准输出打印参数,用一个空格分隔并且最后跟着一个新行。这个特性在显示脚本的输出时会有用。例如:
=>\echo`date`
TueOct2621:40:57CEST1999
果第一个参数是一个无引号的-n,那么不会写出结尾的新行。
提示:如果你使用\o命令重定向你的查询输出,你可能会用\qecho取代这条命令。

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

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

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

\help(或者\h)[command]
给出指定sql命令的语法帮助。如果没有给出command,那么psql将列出可获得语法帮助的所有命令。如果command是一个星号("*"),则显示所有sql命令的语法帮助。
注意:为简化敲击,包含多个单字的命令不需要引起。因此键入\helpaltertable是正确的。

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

\ifilename
从文件filename中读取并把其内容当作从键盘输入的那样执行查询。
注意:如果你想在屏幕上看到读入的行,你必须对所有行设置变量ECHO为all。

\l(或\list)
\l+(或\list+)
列出服务器上所有数据库的名字和它们的所有者以及字符集编码。在命令名称后面加一个"+"还可以看到对数据库的描述。

\lo_exportloidfilename
从数据库里读取OID为loid的大对象并把她写到filename里。注意这个功能与服务器函数lo_export有些微小的区别,lo_export运行时带着运行数据库服务器的用户权限,而且是在服务器的文件系统上。
提示:使用\lo_list查看大对象的OID。

\lo_importfilename[comment]
把文件存储为一个Postgresql大对象。可以带着一个该对象的注解选项。例如:
foo=>\lo_import'/home/peter/pictures/photo.xcf''apictureofme'
lo_import152801
响应表明此大对象得到一个对象标识152801,如果你还想访问该对象,就应该把这个对象标识记住。因此,我们建议总是给每个对象关联一个人类可读的注解。那样就可以用\lo_list命令看到这些注解。
注意这条命令与服务器端的lo_import有一些区别,因为这条命令是本地用户在本地文件系统上操作,而不是以服务器用户在服务器文件系统上操作。

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

\lo_unlinkloid
从数据库删除OID为loid的大对象。
提示:使用\lo_list查找大对象的OID。

\o[{filename||command}]
把后面的查询结果保存到文件filename里或者把后面的查询结果定向到一个独立的Unixshell执行command。如果没有声明参数,查询输出重置为标准输出。
"查询结果"包括所有表,命令响应和从数据库服务器来的提示,同样还有各种各样查询数据库的反斜杠命令的输出(如\d),但是没有错误信息。
提示:要用文本分散查询结果之间的输出,用\qecho。

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

\psetparameter[value]
这条命令设置影响查询结果表输出的选项。parameter描述要设置的选项是哪一个。value的语意也取决于它。

打印选项有:

format
设置输出格式为unaligned,aligned,html,latex或troff-ms之一。允许使用唯一的缩写。(这也意味着一个字母就够了。)
"Unaligned"(不对齐)把一条记录的所有字段都输出到一行,用当前有效的域分隔符分隔。这主要用于生成那些要被其他程序读取的输出(tab分隔,逗号分隔)。"Aligned"(对齐)模式是标准的,人类可读的,格式化好了的文本输出,也是缺省。"HTML"和"LaTeX"模式把表输出为可用于文档里的对应标记语言。它们还不是完整的文档!(可能对于HTML变化还不是太大,但是在LaTeX里,你必须有一个完整的文档包装器。)

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

expanded)(或者x)
在正常和扩展格式之间切换。当打开扩展格式时,查询结果用两列显示,字段名称在左,数据在右。这个选项只影响正常查询结果的显示方式;psql元命令的输出总是使用正常的格式。这个模式在数据无法放进通常的"水平"模式的屏幕时很有用。
所有四种输出模式都支持扩展格式。

null
第二个参数是一个字串,用以代表字段的值为null时的打印输出。缺省是什么都不打,这样很容易和类似一个空字串混淆。因此,我们可能选择\psetnull'(null)'。

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

footer
切换缺省脚注(xrows)。

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

tuples_only(或者t)
在完全显示和只显示记录之间切换。完全显示显示象列头,标题和各种脚注等信息。在这个模式下,只显示记录模式将只显示实际的表数据。

title[text]
为任何随后打印的表设置标题。这个参数可以用于给你的输出一个描述性标记。如果不带参数,重置标题。
tableattr(或者T)[text]
允许你声明放在HTMLtable标记里的任何属性。例如,可以是cellpadding或bgcolor。注意你可能不需要在这里声明border,因为已经在\psetborder里用过了。
pager
控制查询和psql帮助输出分页器。如果设置了环境变量PAGER,输出被定向到指定程序,否则使用系统缺省(比如more)。
如果关闭分页器,则不使用它,如果打开了,程序只在需要的时候使用分页器,也就是说,输出是到终端,而且那个表很可能无法与屏幕匹配。(psql在决定何时分页时不是很完美。)\psetpager开关分页器。我们也可以把分页器设置为always,导致我们在任何情况下都使用分页器。
可以在例子节看到这些不同格式输出的示例。
提示:有很多用于\pset的快速命令。参阅\a,\C,\H,\t,\T,和\x。
注意:无参数运行\pset是错误的。以后这样调用显示当前打印选项状态。

\q
退出psql程序。

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

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

\s[filename]
将命令行历史打印出或是存放到filename。如果省略filename,历史将输出到标准输出。这个选项只有在psql配置成使用GNUReadline库后才生效。
注意:在当前版本里,这个(GNU历史库)不再是必须的了,实际上,在程序结束时自动保存命令行历史。每次psql启动都会装载命令行历史。

\set[name[value[...]]]
设置内部变量name为value或着如果给出了多于一个值,设置为所有这些值的联接结果。如果没有给出第二个参数,只设变量不设值。要重置一个变量,使用\unset命令。
有效的变量名可以包含字符,数字和下划线。参阅下面的变量获取细节。
尽管你可以设置任何变量为任意值,psql对一些变量特殊对待。它们在关于变量的节里面有文档。
注意:这条命令是完全和sql命令SET不一样的。

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

\Ttable_options
允许你在使用HTML输出模式时声明放在table标记里的属性。这条命令等效于\psettableattrtable_options。

\w{filename||command}
将当前查询缓冲区输出文件filename或者定向到Unix命令command。

\x
切换扩展行格式。等效于\psetexpanded。

\z[pattern]
生成一个带有访问权限列表的数据库中所有表,视图和序列的列表。如果给出任何pattern,则被当成一个规则表达式,只显示匹配的表,视图和序列。
命令GRANT和REVOKE用于设置访问权限。参阅GRANT获取更多信息。
这是\dp("显示权限")的别名。

\![command]
返回到一个独立的Unixshell或者执行Unix命令command。参数不会被进一步解释,shell将看到全部参数。

\?
获得关于反斜杠命令的帮助信息。
各种\d命令都接受一个pattern参数,声明要显示的对象名字。*表示"任何字符序列",而?表示"任何单个字符"。(这个表示法和Unix的shell文件名模式兼容。)高级用户也可以使用正则表达式表示法,比如字符表,[0-9]这样的东西来匹配"任意数字"。要让任何这些模式匹配字符可以安字面方式解析,那就应该用双引号包围它们。
一个包含(无引号的)句点的模式会被解析承一个模式名的模式后面跟着一个对象名的模式。比如,\dtfoo*.bar*显示所有以foo开头的模式里的以bar开头的表名字。如果没有出现句点,那么这个模式只匹配在当前模式搜索路径中可见的对象。
[object Object]高级特性

变量

psql提供类似通常Unix命令shell那样的变量替换特性。变量只是简单的名称/数值对,这里的值可以是任何长度的任何值。要设置一个变量,使用psql元命令\set:
testdb=>\setfoobar
把变量"foo"设置为值"bar"。要检索变量的内容,在变量名前面放上冒号然后把它用在任意斜杠命令里:
testdb=>\echo:foo
bar
注意:\set的参数服从和其他命令一样的替换规则。因此你可以构造有趣的引用,象\set:foo'something'这样,获得分别象Perl或PHP那样有名的"软连接(softlinks)"或"变量变量"。不幸的是(或者万幸的?),用这些构造不能做任何有用的事情。另一方面,\setbar:foo是一个非常有效的拷贝变量的方法。

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

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

AUTOCOMMIT
如果是on(缺省),那么每个sql命令都在成功完成后自动提交。要推迟这种模式下的提交,你必须输入一个BEGIN或者STARTTRANSACTIONsql命令。如果是off或者未设置,sql命令不会提交,知道你明确地发出COMMIT或者END。关闭自动提交的模式是通过为你明确发出一个BEGIN实现的,它是放在任何尚未在一个事务块中并且自己不是BEGIN或者其它事务控制命令也不是那些不能在事务块里执行的命令(比如VACUUM)的前面。
注意:在关闭自动提交的模式下,你必须明确放弃任何失败的事务,方法是执行ABORT或者ROLLBACK。还要注意如果你不提交就退出会话,你的工作会丢失。
注意:自动提交打开方式是Postgresql传统的行为,但是关闭自动提交更接近sql规范。如果你喜欢关闭自动提交,你应该在你的.psqlrc文件里设置它。

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

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

ECHO_HIDDEN
当设置了这个变量并且一个反斜杠命令查询数据库时,首先显示查询。这样你可以学习Postgresql内部的东西并且在你自己的程序里提供类似功能。如果你设置该变量的值为"noexec",查询只是显示出来但是实际上不发送到服务器和执行。

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

HISTCONTROL
如果这个变量设置为ignorespace,以空格开始的行将不会进入历史列表。如果设置为变量ignoredups,与以前历史记录里匹配的行也不会进入历史记录。值ignoreboth是上面两个的结合。如果删除此变量或者其值为任何与上面的值不同的东西,所有交互模式读入的行都被保存入历史列表。
注意:这个特性是无耻地从Bash里剽窃来的。

HISTFILE
此文件将用于存储历史列表。缺省值是~/.psql_history。比如,在~/.psqlrc里使用:
\setHISTFILE~/.psql_history-:dbnAME
将令psql为每个数据库维护一个独立的历史。
注意:这个特性是从Bash里偷学来的。

HISTSIZE
存在命令历史里的命令的个数。缺省值是500。
Note:这个特性是无耻地从Bash里剽窃来的。

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

IGnorEEOF
如果删除此变量,向一个交互的psql会话发送一个EOF(通常是Control-D)将终止应用。如果设置为一个数字值,那么在应用终止前该数值的EOF字符将被忽略。如果设置了此变量但是没有数字值,缺省是10。
注意:这个特性是无耻地从Bash里剽窃来的。

LASTOID
最后影响的oid值,即为从一条INSERT或lo_insert命令返回的值。此变量只保证在下一条sql命令的结果显示之前有效。

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

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

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

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

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

SINGLELINE
这个变量等效于设置命令行选项-S。你可以在运行时删除或设置它。

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

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

VERBOSITY
这个选项可以设置为值default,verbose,或者terse以控制错误报告的冗余行。
[object Object]
sql代换

一个附加的psql变量的有用特性是你可以把它们替换("代换")成正规的sql语句。这样做的语法同样还是变量名前面加一个冒号(:)。

testdb=>\setfoo'my_table'
testdb=>SELECT*FROM:foo;

将会查询表my_table。变量的值是逐字拷贝的,所以它甚至可以包含不对称的引号或反斜杠命令。你必须保证你输入的东西是有意义的。变量替换将不会在引号引起来的sql语句里面发生。

利用这个功能一个时髦的应用是通过使用一个随后的语句中最后插入的OID建立一个外键仿真场景。另一个可能用到这个机制的地方是把一个文件内容拷贝到一个字段里面去。首先把文件装载到一个变量然后象上面那样处理。

testdb=>\setcontent'\''`catmy_file.txt`'\''
testdb=>INSERTINTOmy_tableVALUES(:content);

这样处理的一个可能问题是my_file.txt可能包含单引号。这些需要被逃逸以免在处理第三行时不会导致语法错误。可以使用程序sed来做这个处理:

testdb=>\setcontent'\''`sed-e"s/'/\\\\\\'/g"<my_file.txt`'\''

观察正确数量的反斜杠(6)!你可以这样解释它:在psql分析完这行后,它把sed-e"s/'/\\\'/g"<my_file.txt传递给shell。shell将对双引号里的东西做其处理然后用参数-e和s/'/\\'/g执行sed。当sed分析这些时,它将把双反斜杠替换为单个反斜杠然后进行替换。可能有时候你认为所有Unix命令使用同一个逃逸字符是个好事。但具有讽刺意味的事实是你可能不得不逃逸所有反斜杠,因为sql文本常量同样也惨遭这种解释。这种情况下你可能最好在外部准备文件。

因为冒号也可以合法的出现在sql命令里,便有下面规则的应用:如果没有设置变量,字符序列"冒号+名称"不会被改变。在任何情况下你都可以用反斜杠逃逸冒号以保护它免于被解释。(变量的冒号语法是sql用于嵌入查询语言的标准,如ECPG。用于数组片段和类型转换的冒号语法是Postgresql扩展,因此有冲突。)
提示符

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

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

%M

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

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

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

数据库会话的用户名。(这个值的扩展可能在一个数据库会话过程中因为SETSESSIONAUTHORIZATION命令而改变。)
%/

当前数据库名称。
%~

类似%/,但如果数据库是你的缺省数据库输出是"~"(波浪线(tilde))。
%#

如果会话用户数据库超级用户,使用"#",否则用">"。(这个值的扩展可能在一个数据库会话过程中因为SETSESSIONAUTHORIZATION命令而改变。)
%r

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

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

指定字节值的字符被替换到该位置。
%:name:

psql变量name的值。参阅变量节获取细节。
%`command`

command的输出,类似于通常的"反勾号(back-tick)"替换。
%[...%]

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

testdb=>\setPROMPT1'%[%033[1;33;40m%]%n@%/%r%[%033[0m%#%]'

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

要在提示符里插入百分号,键入%%。缺省提示符等效于'%/%r%#'用于prompts1和2,以及'>>'用于prompt3。

注意:这个特性是无耻地从tcsh里剽窃来的。

[object Object]
命令行编辑

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

$ifpsql
setdisable-completionon
$endif
(这不是psql的特性,是Readline的。参考它的文档获取更多细节。)

环境

PAGER
如果查询结果在一页里放不下,那么它们被定向到这个命令。典型的值是more或者less。缺省的是平台相关的。我们可以用\pset命令关闭分页器。

PGDATABASE
缺省数据库

PGHOST
PGPORT
PGUSER
缺省连接参数

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

SHELL
\!命令执行的命令。

TMPDIR

存储临时文件的目录。缺省是/tmp。
参考地址http://linux.51yip.com/search/psql

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...