Greenplum交互式命令行psql

0    41    2

Tags:

👉 本文共约26554个字,系统预计阅读时间或需100分钟。

psql

Greenplum数据库的交互式命令行接口

概要

描述

psql是Greenplum数据库的基于终端的前端。 它使您能够以交互方式键入查询,将其发布到Greenplum数据库,并查看查询结果。 或者,输入可以来自文件。 此外,它提供了许多元命令和各种类似于shell的功能,以帮助编写脚本和自动化各种任务。

选项

-a | —echo-all

读取时将所有非空输入行打印到标准输出。 (这不适用于以交互方式读取的行。) 这等效于将变量ECHO设置为all。

-A | —no-align

切换到不对齐输出模式。 (默认输出模式已对齐。)

-c ‘command’ | —command=’command’

指定psql将执行指定的命令字符串,然后退出。 这在shell脚本中很有用。 command必须是服务器可以完全解析的命令字符串,也可以是单个反斜杠命令。 因此,您不能将SQL和psql元命令与此选项混合使用。 为此,您可以将字符串通过管道传递到psql中,如下所示:

(\是分隔符元命令。)

如果命令字符串包含多个SQL命令,则它们将在单个事务中进行处理, 除非字符串中包含明确的BEGIN/COMMIT命令以将其分为多个事务。 这与将相同的字符串提供给psql的标准输入时的行为不同。 此外,仅返回最后一个SQL命令的结果。

-d dbname | —dbname=dbname

指定要连接的数据库的名称。这等效于在命令行上将dbname指定为第一个非选项参数。

如果此参数包含\=符号或以有效的URI前缀(postgresql://或postgres://)开头,则将其视为conninfo字符串。 有关更多信息,请参见PostgreSQL文档中的连接字符串

-e | —echo-queries

将所有发送到服务器的SQL命令复制到标准输出。

-E | —echo-hidden

回显由\d和其他反斜杠命令生成的实际查询。 您可以使用它来研究psql的内部操作。 这等效于将变量ECHO_HIDDEN设置为on。

-f filename | —file=filename

使用filename作为命令源,而不是交互读取命令。 处理完文件后,psql终止。 在许多方面,这等效于元命令\i。

如果文件名是-(连字符),则将读取标准输入,直到EOF指示或\q元命令为止。 但是请注意,在这种情况下不使用Readline(就像已指定-n一样)。

使用此选项与编写psql < filename稍有不同。 通常,两者都可以达到您的期望,但是使用-f可以启用一些不错的功能,例如带有行号的错误消息。 使用此选项还可能会减少启动开销。 另一方面,使用shell的输入重定向的变体在理论上可以保证产生与您手工输入的所有内容完全相同的输出。

-F separator | —field-separator=separator

使用指定的分隔符作为未对齐输出的字段分隔符。

-H | —html

打开HTML表格输出。

-l | —list

列出所有可用的数据库,然后退出。其他非连接选项将被忽略。

-L filename | —log-file=filename

除正常输出目标外,还将所有查询输出写入指定的日志文件。

-n | —no-readline

不要将Readline用于行编辑,也不要使用命令历史记录。 剪切和粘贴时,这对于关闭选项卡扩展很有用。

-o filename | —output=filename

将所有查询输出放入指定的文件。

-P assignment | —pset=assignment

允许您在命令行上以\pset样式指定打印选项。 请注意,这里必须用等号(而不是空格)分隔名称和值。 因此,要将输出格式设置为LaTeX,可以编写-P format=latex。

-q | —quiet

指定psql应该安静地工作。 默认情况下,它打印欢迎消息和各种信息输出。 如果使用此选项,则不会发生任何情况。 这对于-c选项很有用。 这等效于将变量QUIET设置为on。

-R separator | —record-separator=separator

使用separator作为未对齐输出的记录分隔符。

-s | —single-step

以单步模式运行。 这意味着在将每个命令发送到服务器之前都会提示用户,并且还可以选择取消执行。 使用它来调试脚本。

-S | —single-line

在单行模式下运行,其中新行像分号一样终止SQL命令。

-t | —tuples-only

关闭列名和结果行计数页脚等的打印。 此命令等效于\pset tuples_only,并且为方便起见而提供。

-T table_options | —table-attr=table_options

允许您指定要放置在HTML表格标记内的选项。 有关详细信息,请参见\pset。

-v assignment | —set=assignment | —variable=assignment

执行变量分配,例如\set meta命令。 请注意,必须在命令行上用等号分隔名称和值(如果有)。 要取消设置变量,请取消等号。 要将变量设置为空值,请使用等号,但不要使用该值。 这些分配是在启动的非常早期阶段完成的,因此保留给内部使用的变量可能会在以后被覆盖。

-V | —version

打印psql版本并退出。

-x | —expanded

打开扩展表格式模式。

-X | —no-psqlrc

不要读取启动文件(系统范围内的psqlrc文件或用户的~/.psqlrc文件都不能读取)。

-z | —field-separator-zero

将未对齐输出的字段分隔符设置为零字节。

-0 | —record-separator-zero

将未对齐输出的记录分隔符设置为零字节。 这对于例如与xargs -0配合非常有用。

-1 | —single-transaction

当psql执行脚本时, 添加此选项会将BEGIN/COMMIT包装在脚本周围,以将其作为单个事务执行。 这样可以确保所有命令都成功完成,或者不应用任何更改。

如果脚本本身使用BEGIN,COMMIT或ROLLBACK,则此选项将不会达到预期的效果。 另外,如果脚本包含无法在事务块内执行的任何命令,则指定此选项将导致该命令(并因此导致整个事务)失败。

-? | —help

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

连接选项

-h host | —host=host

运行Greenplum数据库master数据库服务器的计算机的主机名。 如果未指定,则从环境变量PGHOST读取或默认为localhost。

在master主机上启动psql时,如果host值以斜杠开头,则它将用作UNIX域套接字的目录。

-p port | —port=port

Greenplum master数据库服务器正在侦听连接的TCP端口。 如果未指定,则从环境变量PGPORT读取或默认为5432。

-U username | —username=username

要用作连接的数据库角色名称。 如果未指定,则从环境变量PGUSER读取或默认为当前系统角色名称。

-W | —password

强制输入密码提示。 每当服务器请求密码验证时,psql都会自动提示输入密码。 但是,当前密码请求检测并不完全可靠,因此此选项会强制提示。 如果未发出密码提示,并且服务器要求密码验证,则连接尝试将失败。

-w —no-password

不发出密码提示。 如果服务器要求密码验证,而其他方式(例如.pgpass文件)无法使用密码,则连接尝试将失败。 此选项在没有用户输入密码的批处理作业和脚本中很有用。

注意:此选项在整个会话中保持设置状态,因此会影响元命令\connect的使用以及初始连接尝试。

退出状态

如果psql正常完成,它将返回0到shell程序; 如果发生自身的致命错误(内存不足,找不到文件),则返回1; 如果与服务器的连接断开并且会话不是交互式的,则返回2; 如果脚本中发生错误,并设置了变量ON_ERROR_STOP,则返回3。

用法

连接到数据库

psql是Greenplum数据库的客户端应用程序。 为了连接到数据库,您需要知道目标数据库的名称,Greenplum主服务器的主机名和端口号以及要用作连接的数据库用户名。 可以通过命令行选项(分别为-d,-h,-p和-U)告知psql这些参数。 如果找到的参数不属于任何选项,它将被解释为数据库名称(或用户名,如果已经给出数据库名称)。 并非所有这些选项都是必需的;有一些可用的默认值。 如果省略主机名,则psql将通过UNIX域套接字连接到本地主机上的master服务器,或者通过TCP/IP连接到没有UNIX域套接字的计算机上的localhost。 默认的master端口号是5432。 如果为master使用其他端口,则必须指定端口。 默认数据库用户名是您的操作系统用户名,默认数据库名也是如此。 请注意,您不能仅以任何用户名连接到任何数据库。 您的数据库管理员应已将您的访问权限告知您。

当默认值不合适时,可以通过将任何或所有环境变量PGAPPNAME, PGDATABASE,PGHOST,PGPORT和PGUSER设置为适当的值来节省键入时间。

拥有~/.pgpass文件也很方便,可以避免定期输入密码。 该文件应位于您的主目录中,并包含以下格式的行:

.pgpass的权限必须禁止任何其他用户或组的访问(例如:chmod 0600 ~/.pgpass)。 如果权限不严格于此权限,则文件将被忽略。 (但是,当前未在Microsoft Windows客户端上检查文件权限。)

指定连接参数的另一种方法是在conninfo字符串或URI中,而不是使用数据库名称。 这种机制使您可以非常广泛地控制连接。 例如:

这样,您还可以按照PostgreSQL文档中的LDAP查找连接参数中所述使用LDAP进行连接参数查找。 有关所有可用连接选项的更多信息,请参见PostgreSQL文档中的参数关键字

如果由于某种原因(权限不足,服务器未运行等)而无法建立连接,则psql将返回错误并终止。

如果标准输入或标准输出中至少有一个是终端,则psql会将客户端编码设置为auto, 它将从语言环境设置(Unix系统上的LC_CTYPE环境变量)中检测适当的客户端编码。 如果无法按预期进行,则可以使用环境变量PGCLIENTENCODING覆盖客户端编码。

输入SQL命令

在正常操作中,psql会提示您输入当前已连接psql的数据库的名称, 后跟字符串\=>(对于常规用户)或\=#(对于超级用户)。 例如:

在提示符下,用户可以键入SQL命令。 通常,当到达命令终止分号时,会将输入行发送到服务器。 行尾不会终止命令。 因此,为了清楚起见,命令可以分布在几行上。 如果命令已正确发送和执行,则命令的结果将显示在屏幕上。

如果不受信任的用户可以访问未采用安全模式使用模式的数据库, 请通过从search_path中删除可公开写入的模式来开始会话。 您可以在连接字符串中添加options=-csearch_path=或在其他SQL命令之前发出SELECT pg_catalog.set_config(‘search_path’, ‘’, false)。 此注意事项并非特定于psql;它适用于执行任意SQL命令的每个接口。

元命令

在psql中输入的任何以不带引号反斜杠开头的内容都是psql元命令,该命令由psql本身处理。 这些命令有助于使psql对管理或脚本化更加有用。 元命令通常被称为斜杠或反斜杠命令。

psql命令的格式为反斜杠,后跟命令动词,然后是参数。 参数与命令动词之间用任意数量的空格字符分隔。

要将空格包含在参数中,可以用单引号将其引起来。 要将单引号包含在这样的参数中,请在单引号文本中写两个单引号。 此外,单引号中包含的所有内容都会用类似C的方式替换\n(换行),\t(制表符),\b(退格键), \r(回车),\f(换页),\digits( 八进制)和\xdigits(十六进制)。 在单引号包围的文本中,反斜杠前导任何其他字符, 都表示是该单个字符,不管它是什么。

在一个参数中,加上反勾号(`)的文本被看做是一个命令行,传递给shell。 该命令的输出(删除结尾的新行)替换了加上反勾号的文本。

如果一个未加引号的冒号(:)后面跟着一个psql变量名, 出现在一个参数中,那么它会被变量的值取代,就像SQL代换中描述的那样。

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

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

下面是已定义的元命令:

\a

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

\c | \connect [dbname [username] [host] [port]] | conninfo

与一个PostgreSQL服务器建立一个新的连接。 要使用的连接参数通过位置语法或者使用conninfo连接字符串(在libpq连接字符串描述)指定。

如果该命令省略了数据库名称,用户,主机或端口,则新连接可以重用先前连接中的值。 默认情况下,除了处理conninfo字符串时,都将重用先前连接的值。 传递-reuse-previous=on或-reuse-previous=off的第一个参数将覆盖该默认值。 当命令既未指定也不重用特定参数时,将使用libpq缺省值。 将dbname,username,host或port中的任何一个指定为-等同于省略该参数。

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

示例:

\C [title]

把正在打印的表的标题设置为一个查询的结果或者取消这样的设置。 这条命令等效于\pset title。

\cd [directory]

把当前工作目录改变到directory。 没有参数则是改变到当前用户的家目录。 使用!pwd打印出当前工作目录。

\conninfo

显示有关当前连接的信息,包括数据库名称,用户名,连接类型(UNIX域套接字,TCP/IP等),主机和端口。

\copy {table [(column_list)] | (query)} {from | to} {‘filename’ | program ‘command’ | stdin | stdout | pstdin | pstdout} [with] (option [, …]) ]

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

当指定了program时,command是通过psql执行的, 并且来自或到达command的数据在服务器和客户端之间传送。 再次,文件访问性和权限都是本地用户的,而不是服务器的,因此不需要SQL超级用户权限。

\copy … from stdin | to stdout分别基于命令输入和输出进行读/写。 从发出命令的同一源读取所有行,直到.为止或流到达EOF。 输出被发送到与命令输出相同的位置。 要从psql的标准输入或输出读取/写入,请使用pstdin或pstdout。 此选项对于在SQL脚本文件中内联填充表很有用。

该命令的语法与SQL COPY命令的语法相似,并且option必须指示SQL COPY命令的选项之一。 请注意,因此,特殊的解析规则适用于\copy命令。 特别是,变量替换规则和反斜杠转义不适用。

此操作不如SQL COPY命令有效,因为所有数据都必须通过客户端/服务器连接传递。

\copyright

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
Greenplum交互式命令行psql后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部