ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 输入 psql 接受许多命令行参数,一套丰富的后期命令(meta-commands)集,以及完整的 Postgres 所支持的 SQL 语言.最常用的命令行参数是:*dbname*要访问的数据库名称.*dbname* 缺省时是 USER 环境变量的值或(如果没有设置环境变量)当前用户的 Unix 帐户名.-c *query*要运行的单个查询.psql 将在结束时退出.命令行参数和后期命令(meta-commands)的全集将在下面的章节中介绍. 有一些环境变量可以用于取代命令行参数.另外,psql 应用使用的Postgres 前端库还寻找其他的一些变量用于配置,例如,日期/时间格式和本地时区.请参考 *PostgreSQL 程序员手册*里的有关 libpq 的章节获取更多信息. 你可以通过设置下面任何一个环境变量来避免使用命令行选项: PGHOST数据库服务器的 DNS 主机名.将 PGHOST 设置成一个非零长的字符串将导致 TCP/IP 通讯的使用,而不是使用本地的 Unix 主控套接字.PGPORTPostgres 服务器正在侦听的端口号.缺省是5432.PGTTY从客户端支持库中用于显示信息的目的控制台.不是必须的.PGOPTION如果声明了 PGOPTION ,则其包含的选项将在任何命令行选项 *之前* 分析.PGREALMPGREALM 只是在使用了Kerberos 认证的时候使用.如果设置了这个环境变量,Postgres将试图与服务器在此范围内进行认证,并且将使用各自的识别文件(ticket files)来避免与本地识别文件冲突.请参考 *PostgreSQL 管理员手册*获取关于Kerberos 的附加的信息. ### 输出 psql 在成功完成所有查询后向 shell 中返回0,错误时返回 1,与后端的联接中断时返回 2.缺省的 TAB 分隔符将被使用.不管任何原因psql 与后端的数据库联接失败后都将返回 1. ### 描述 psql 是一个字符界面的 Postgres 前端.它允许你交互的输入查询,将它们提交给 Postgres, 然后阅读查询结果. psql 是一个 Postgres 客户端应用.因此,在 psql 运行之前必须有一个 postmaster 进程在数据库服务器上运行.另外,必须象下面描述的那样声明数据库服务器的正确标识参数,比如 postmaster 主机名等. 当psql 启动时,它先后从 /etc/psqlrc 和 $(HOME)/.psqlrc 中读取SQL 命令,这样就允许使用 SQL 象 **SET** 这样的命令在每个会话开始的时候来设置日期风格. ### 与一个数据库联接 psql 试图与在命令行上声明了的主机和端口号上运行的数据库相联.如果因任何原因导致联接失败 (比如,权限不够,postmaster 没有在服务器上运行等).psql 将返回一条信息如下 ~~~ Connection to database failed. ~~~ 联接失败的原因没有说明. ### 输入查询 通常状况下,psql 提供一个带有 psql 正在与之联接的接数据库名的,后缀 "=>" 的提示符.例如. ~~~ $ psql testdbWelcome to the POSTGRESQL interactive sql monitor:  Please read the file COPYRIGHT for copyright terms of POSTGRESQL   type \e? for help on slash commands   type \eq to quit   type \eg or terminate with semicolon to execute query You are currently connected to the database: testdbtestdb=> ~~~ 用户可以在这个提示符下键入 SQL 查询.除非设置了 -S 选项,输入的行将在查询终止分号出现时送到后端. 当查询正在进行时,psql 同样还轮询由 **LISTEN** 和 **NOTIFY**生成的异步通知信号**.** psql 可以在管道序列里面使用,并且将自动检测何时它没有与一个真的控制台侦听或交谈. ### 命令行选项 psql 可接受下面的命令行选项:-A当打印输出表元素时关闭填充对齐.-c *query*声明 psql 将执行一条查询字串,*query,*然后退出.这一点对shell 脚本很有用,尤其是在 shell 脚本里与-q 选项相联时.-d *dbname*声明要联接的数据库名.等效于将 *dbname* 作为命令行最后一个域输出.-e回现送给后端的查询-f *filename*使用 *filename* 作为查询的语句源而不是交互式读入查询,该文件必须为客户前端可见.-F *separator*使用 *separator* 作为域分隔符.缺省是一个 ASCII 竖直条 ("|").-h *hostname*声明正在运行 postmaster 的主机名.如果没有此选项,将使用本地的Unix主控套接字进行通讯.-H打开 HTML 3.0 格式输出.-l列出所有可用的数据库,然后退出.其他非连接选项将被忽略.-n不使用用于输入行编辑和命令历史的行输入库.-o *filename*将所有输出定向到文件 *filename.*路径必须是客户端可写的.-p *port*声明被 postmaster 用于侦听的 TCP/IP 端口或使用的缺省本地Unix主控套接字文件句柄.缺省的是环境变量 PGPORT 的值(如果存在的话)或者是5432.-q声明 psql 将"安静地"执行处理任务.缺省时psql将打印欢迎和退出信息,并且提示输入每个查询和打印输出查询返回的行数.如果使用了此选项,这些都不出现.这在和 -c选项一起使用时很有效.-s进入单步模式运行,这时每个查询在发往后端之前都要提示用户.-S进入单行运行模式,这时每个查询都将由换行符结束,而不是分号.-t关闭打印列/字段名.这在shell脚本中与 -c 选项一起使用时有用.-T *table_options*允许你使用 HTML 3.0 格式输出时声明放在表 table ... 中的标记选项.例如,border将给你的表边框.这个选项必须与 -H 选项一起使用.-u在和数据库联接之前询问用户的用户名和口令.如果数据库不需要口令认证则这些将被忽略.如果此选项没有使用(而且没有设置 PGPASSWORD 环境变量)而数据库又需要口令认证,则联接失败.用户名将被忽略.-x打开扩展行格式模式.当此选项有效时每一行都将把列/字段名打印在左边而把列/字段值放在右边.这对于那些难以在一行输出的超长行特别有用.HTML 行输出也支持此模式.你可以通过设置环境变量来避免在命令行上键入这些参数,参阅下面环境变量的部分. ### psql 后期命令 你在 psql 里输入的任何以脱字符反斜杠('\')开头的东西都是psql后期命令.其他的都是 SQL 并且只是简单的进入当前的查询缓冲 (并且一旦你已经有了一个完整的查询,该查询将自动提交给后端).psql 后期命令也叫斜杠命令. 一个 psql 命令的格式是反斜杠后面紧跟一个命令动词,然后是任意参数.参数与命令动词和其他参数以任意个空白字符间隔. 由于历史原因,对于单字符的命令动词,你实际上不需要用空白字符将命令动词和参数分隔开.不过你最好还是加上空白字符. 下列后期命令是已定义的. \a在打印表元素时切换字段对齐模式(开或关).\C *caption*将 HTML3.0 表标题设为 “*caption*”.\connect *dbname* [ *username* ]与一个新的数据库建立一个联接,如果没有声明 *username* 则使用缺省值.前面的联接将关闭.\copy *dbname* { FROM | TO } *filename*执行前端(客户端)拷贝.这是一个运行 SQL COPY 命令的操作,不同的是 SQL COPY 是后端在读写声明的文件,并且对应的需要后端访问和特殊的用户权限,而在此命令中 psql 读写文件并将数据从后端中取出或写入.将使用缺省的分隔符. >   > **小技巧:**此操作不象 SQL **COPY** 命令这样高效,因为所有数据必须通过(客户/服务器))client/server IP 或套接字联接.对于大数据量的操作,另一种方法(SQL COPY)更可行. \d [ *table* ]列出数据库中的表,或(如果声明了)表 *table* 的列/字段.如果表名是用统配符 (“*”)声明的,列出所有表和表的列/字段信息.\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将列出可获得帮助的所有命令的列表.如果命令 *command* 是一个通配符(“*”),则给出所有 SQL 命令的语法帮助.\H切换 HTML3 输出.等效于 -H 命令行选项.\i *filename*从文件 *filename* 中读取查询到输入缓冲.\l列出服务器上所有数据库.\m切换老式监视器样的表输出,这时表周围有边界字符包围着.这是标准 SQL 输出.缺省时,psql 只包括列/字段间的分隔符.\o [ { *filename* | |*command* } ]将后面的查询结果输出到文件 *filename* 或通过管道将后面结果输出到一个独立的Unix shell 里执行 *command.*如果没有声明参数,将查询结果输出到 stdout.\p打印当前查询缓冲区.\q退出 psql 程序.\r重置(清空)查询缓冲区.\s [ *filename* ]将命令行历史打印出或是存放到 *filename.*如果省略 *filename* ,将不会把后继的命令存放到历史文件中.此选项只有在 psql 配置成使用输入行时才有效.\t切换输出的列/字段名的信息头和行记数脚注(缺省是开).\T *table_options*允许你在使用HTML 3.0 格式输出时声明放在表 table ... 中的标记选项.例如,border 将给你的表以边框.这必须和 **\H** 后期命令一起使用.\x切换扩展行格式.当打开时,每一行将在左边打印列/字段名而在右边打印列/字段值.这对于那些不能在一行输出的超长行是很有用的.HTML 行输出模式也支持这个标记.\w *filename*将当前查询缓冲区输出到文件 *filename.*\z生成一个带有正确 ACL(赋予/禁止 权限)的数据库中所有表的输出列表.\! [ *command* ]回到一个独立的Unix shell或执行一个Unix 命令 *command.*\?获得关于反斜杠 (“\”) 命令的帮助.