元命令参考
使用GaussDB数据库命令行交互工具登录数据库后,gsql提供了一些元命令。连接数据库后,可以使用\?命令,显示所有可用的元命令帮助信息。
注意事项
- 一个gsql元命令的格式是反斜杠后面紧跟一个动词,然后是任意参数。参数命令动词和其他参数以任意个空白字符间隔。
- 要在参数里面包含空白,必须用单引号把它引起来。要在这样的参数里包含单引号,可以在前面加一个反斜杠。任何包含在单引号里的内容都会被进一步进行类似C语言的替换:\n(新行)、\t(制表符)、\b(退格)、\r(回车)、\f(换页)、\digits(八进制表示的字符)、\xdigits(十六进制表示的字符)。
- 用反引号“`”包围的内容被当作一个命令行传入shell。该命令的输出(删除了结尾的新行)会替换原参数中的反引号及其包围的文本,被当作参数值。
- 如果不带引号的参数以冒号(:)开头,它会被当做一个gsql变量,并且该变量的值最终会成为真正的参数值。
- 有些命令以一个SQL标识的名称(比如一个表)为参数。这些参数遵循SQL语法关于双引号的规则:不带双引号的标识强制转换成小写,而双引号保护字母不进行大小写转换,并且允许在标识符中使用空白。在双引号中,成对的双引号在结果名称中分析成一个双引号。比如,FOO"BAR"BAZ解析成fooBARbaz;而"Aweird""name"解析成Aweird"name。
- 对参数的分析在遇到另一个不带引号的反斜杠时停止,这里会认为是一个新的元命令的开始。特殊的双反斜杠序列(\\)标识参数的结尾,并将继续分析后面的SQL语句。这样SQL和gsql命令可以在一行中混合使用。但是在任何情况下,一条元命令的参数不能延续超过行尾。
- M-Compatibility模式数据库不支持\h元命令。
命令格式及参数说明
元命令的详细说明请参见表1、表2、表3、表4、表6、表8、表9、表10和表12。
以下命令中所提到的FILE代表文件路径。此路径可以是绝对路径(如/home/gauss/file.txt),也可以是相对路径(如file.txt,file.txt会默认在用户执行gsql命令所在的路径下创建)。
| 参数 | 参数说明 | 取值范围 |
|---|---|---|
| \copyright | 显示GaussDB的版本和版权信息。 | - |
| \g [FILE] or ; | 执行查询(并将结果发送到文件或管道)。 | - |
| \h(\help) [NAME] | 给出指定SQL语句的语法帮助。 | 如果没有给出NAME,gsql将列出可获得帮助的所有命令。如果NAME是一个星号(*),则显示所有SQL语句的语法帮助。 |
| \parallel [on [num]|off] | 控制并发执行开关。
说明:
| - |
| \q | 退出gsql程序。在一个脚本文件里,只在脚本终止时执行。 | - |
| 参数 | 参数说明 |
|---|---|
| \e [FILE] [LINE] | 使用外部编辑器编辑查询缓冲区(或者文件)。 |
| \ef [FUNCNAME [LINE]] | 使用外部编辑器编辑函数定义。如果指定了LINE(即行号),则光标会指到函数体的指定行。 |
| \p | 打印当前查询缓冲区到标准输出。 |
| \r | 重置(或清空)查询缓冲区。 |
| \w FILE \w |COMMAND | 将当前查询缓冲区输出到FILE指定的文件。 将当前查询缓冲区通过管道发送给COMMAND指定的shell命令。 |
| 参数 | 参数说明 |
|---|---|
| \copy { table [ ( column_list ) ] | ( query ) } { from | to } { filename | stdin | stdout | pstdin | pstdout }[copy_parameter] [parallel integer] [NO_SPLIT_FILE][FIELD_NO_EOL] | 在任何gsql客户端登录数据库成功后可以执行导入导出数据,这是一个运行SQL COPY命令的操作,但不是读取或写入指定文件的服务器,而是读取或写入文件,并在服务器和本地文件系统之间路由数据。这意味着文件的可访问性和权限是本地用户的权限,而不是服务器的权限,并且不需要数据库初始化用户权限。 说明:
|
| \echo [STRING] | 把字符串写到标准输出。 |
| prompt [STRING] | 把字符串写到标准输出(等同于\echo)。 |
| \i FILE | 从文件FILE中读取内容,并将其当作输入,执行查询。 |
| \i+ FILE KEY | 执行加密文件中的命令。 |
| \ir FILE | 和\i类似,只是相对于存放当前脚本的路径。 |
| \ir+ FILE KEY | 和\i+类似,只是相对于存放当前脚本的路径。 |
| \o [FILE] | 把后续所有查询结果发送到FILE指定的文件里。 |
| \o [|COMMAND] | 把后续所有查询结果通过管道发送给COMMAND指定的shell命令。 |
| \qecho [STRING] | 把字符串写到查询结果输出流里。 |
| \print_copy_lines [on | off] | 切换COPY FROM STDIN命令是否打印"COPY XXX"回显,默认开启。
|
| 参数 | 参数说明 | 取值范围 | 示例 | ||
|---|---|---|---|---|---|
| \d[S+] | 列出当前search_path中模式下所有的表、视图和序列。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。 | - | 列出当前search_path中模式下所有的表、视图和序列。
| ||
| \d[S+] NAME | 列出指定表、视图和索引的结构。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。 | - | 假设存在表a,列出指定表a的结构。
| ||
| \d+ [PATTERN] | 列出所有表、视图和索引。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的表、视图和索引。 | - | 列出所有名称以f开头的表、视图和索引。
| ||
| \da[S] [PATTERN] | 列出所有可用的聚集函数,以及它们操作的数据类型和返回值类型。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的聚集函数。 | - | 列出所有名称以f开头可用的聚集函数,以及它们操作的数据类型和返回值类型。
| ||
| \db[+] [PATTERN] | 列出所有可用的表空间。如果声明了PATTERN,只显示名称匹配PATTERN的表空间。 | - | 列出所有名称以p开头的可用表空间。
| ||
| \dc[S+] [PATTERN] | 列出所有字符集之间的可用转换。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的转换。 | - | 列出所有字符集之间的可用转换。
| ||
| \dC[+] [PATTERN] | 列出所有类型转换。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的转换。 | PATTERN需要使用实际类型名,不能使用别名。 | 列出所有名称以c开头的类型转换。
| ||
| \dd[S] [PATTERN] | 显示所有可视对象。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配的对象。对象包括:聚集、函数、操作符、类型、关系(表、视图、索引、序列)、规则。 | - | 列出所有可视对象。
| ||
| \ddp [PATTERN] | 显示所有默认的使用权限。如果指定了PATTERN,只显示名称匹配PATTERN的使用权限。 | - | 列出所有默认的使用权限。
| ||
| \dD[S+] [PATTERN] | 列出所有可用域。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的域。 | - | 列出所有可用域。
| ||
| \det[+] [PATTERN] | 列出所有的外部表。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的表。 | - | 列出所有的外部表。
| ||
| \des[+] [PATTERN] | 列出所有的外部服务器。如果声明了PATTERN,只显示名称匹配PATTERN的服务器。 | - | 列出所有的外部服务器。
| ||
| \deu[+] [PATTERN] | 列出用户映射信息。如果声明了PATTERN,只显示名称匹配PATTERN的信息。 | - | 列出用户映射信息。
| ||
| \dew[+] [PATTERN] | 列出封装的外部数据。如果声明了PATTERN,只显示名称匹配PATTERN的数据。 | - | 列出封装的外部数据。
| ||
| \df[antw][S+] [PATTERN] | 列出所有可用函数,以及它们的参数和返回的数据类型。a代表聚集函数,n代表普通函数,t代表触发器,w代表窗口函数。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的函数。 | - | 列出所有可用函数,以及它们的参数和返回的数据类型。
| ||
| \dF[+] [PATTERN] | 列出所有的文本搜索配置信息。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的配置信息。 | - | 列出所有的文本搜索配置信息。
| ||
| \dFd[+] [PATTERN] | 列出所有的文本搜索字典。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的字典。 | - | 列出所有的文本搜索字典。
| ||
| \dFp[+] [PATTERN] | 列出所有的文本搜索分析器。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的分析器。 | - | 列出所有的文本搜索分析器。
| ||
| \dFt[+] [PATTERN] | 列出所有的文本搜索模板。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只显示名称匹配PATTERN的模板。 | - | 列出所有的文本搜索模板。
| ||
| \dg[+] [PATTERN] | 列出所有数据库角色。如果指定了PATTERN,只显示名称匹配PATTERN的角色。 说明: 因为用户和群组的概念被统一为角色,所以这个命令等价于\du。为了和以前兼容,所以保留两个命令。 | - | 列出名称为“j?e”所有数据库角色(“?”表示任一字符)。
| ||
| \dL[S+] [PATTERN] | 列出可用的程序语言。如果指定了PATTERN,只列出名称匹配PATTERN的语言。 | - | 列出可用的程序语言。
| ||
| \dm[S+] [PATTERN] | 列出物化视图。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果指定了PATTERN,只列出名称匹配PATTERN的物化视图。 | - | 列出物化视图。
| ||
| \dn[S+] [PATTERN] | 列出所有模式(名称空间)。如果向命令追加+,会列出每个模式相关的权限及描述。如果声明了PATTERN,只列出名称匹配PATTERN的模式名。缺省时,只列出用户创建的模式。 | - | 列出所有名称以d开头的模式以及相关信息。
| ||
| \do[S] [PATTERN] | 列出所有可用的操作符,以及它们的操作数和返回的数据类型。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只列出名称匹配PATTERN的操作符。缺省时,只列出用户创建的操作符。 | - | 列出所有可用的操作符,以及它们的操作数和返回的数据类型。
| ||
| \dO[S+] [PATTERN] | 列出排序规则。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果声明了PATTERN,只列出名称匹配PATTERN的规则。缺省时,只列出用户创建的规则。 | - | 列出排序规则。
| ||
| \dp [PATTERN] | 列出可用的表、视图以及相关的权限信息。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果指定了PATTERN,只列出名称匹配PATTERN的表、视图。 | - | 列出可用的表、视图以及相关的权限信息。
\dp显示结果如下: rolename=xxxx/yyyy --赋予一个角色的权限 =xxxx/yyyy --赋予public的权限 xxxx表示赋予的权限,yyyy表示授予这个权限的角色。权限的参数说明请参见表5。 | ||
| \drds [PATTERN1 [PATTERN2]] | 列出所有修改过的配置参数。这些设置可以是针对角色的、针对数据库的或者同时针对两者的。PATTERN1和PATTERN2表示要列出的角色PATTERN和数据库PATTERN。如果声明了PATTERN,只列出名称匹配PATTERN的规则。缺省或指定*时,则会列出所有设置。 | - | 列出数据库所有修改过的配置参数。
| ||
| \dT[S+] [PATTERN] | 列出所有的数据类型。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。如果指定了PATTERN,只列出名称匹配PATTERN的类型。 | - | 列出所有的数据类型。
| ||
| \du[+] [PATTERN] | 列出所有数据库角色。如果指定了PATTERN,则只列出名称匹配PATTERN的角色。 说明: 因为用户和群组的概念被统一为角色,所以这个命令等价于\dg。为了和以前兼容,所以保留两个命令。 | - | 列出所有数据库角色。
| ||
| \dE[S+] [PATTERN] \di[S+] [PATTERN] \ds[S+] [PATTERN] \dt[S+] [PATTERN] \dv[S+] [PATTERN] | 这一组命令,字母E、i、s、t和v分别代表着外部表、索引、序列、表和视图。可以以任意顺序指定其中一个或者它们的组合来列出这些对象。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。例如:\dit列出所有的索引和表。如果指定了PATTERN,只列出名称匹配该PATTERN的对象。默认情况下只会显示用户创建的对象。通过PATTERN或者S修饰符可以把系统对象包括在内。 | - | 列出所有的索引和视图。
| ||
| \dx[+] [PATTERN] | 列出安装数据库的扩展信息。如果指定了PATTERN,则只列出名称匹配PATTERN的扩展信息。 | - | 列出安装数据库的扩展信息。
| ||
| \l[+] | 列出服务器上所有数据库的名称、所有者、字符集编码以及使用权限。 | - | 列出服务器上所有数据库的名称、所有者、字符集编码以及使用权限。
| ||
| \sf[+] FUNCNAME | 显示函数的定义。 说明:
| - | 假设存在函数function_a和函数名带圆括号的函数func()name,列出函数的定义。
| ||
| \z [PATTERN] | 列出数据库中所有表、视图和序列,以及它们相关的访问特权。如果给出任何PATTERN,则被当成一个正则表达式,只显示匹配的表、视图、序列。 | - | 列出数据库中所有表、视图和序列,以及它们相关的访问特权。
|
- 表4中的选项S表示显示系统对象,+表示显示对象附加的描述信息。
- PATTERN用来指定要被显示的对象名称。关于PATTERN的注意事项如下:
- 在最简单的情况下,PATTERN是该对象的准确名称。在PATTERN中的字符通常会被变成小写形式(和在SQL名称中相同),例如\dt FOO将会显示名为foo的表。和在SQL名称中相同,把PATTERN放在双引号中可以阻止它被转换成小写形式。如果需要在一个PATTERN中包括一个真正的双引号字符,则需要把它写成两个相邻的双引号,这同样是符合SQL引用标识符的规则。例如,\dt "FOO""BAR"将显示名为FOO"BAR(不是foo"bar)的表。和普通的SQL名称规则不同,不能只在PATTERN的一部分周围放上双引号,例如\dt FOO"FOO"BAR将会显示名为fooFOObar的表。
- 不使用PATTERN参数时,\d命令会显示当前schema搜索路径中可见的全部对象——这等价于用*作为PATTERN。所谓对象可见是指可以直接用名称引用该对象,而不需要用schema来进行限定。要查看数据库中所有的对象而不管它们的可见性,可以把*.*用作PATTERN。
- 如果放在一个PATTERN中,*将匹配任意字符序列(包括空序列),而?会匹配任意的单个字符(和Unix shell的文件名PATTERN相同)。例如,\dt int*会显示名称以int开始的表。但是如果被放在双引号内,*和?就会失去这些特殊含义而变成普通的字符。
- 包含一个点号(.)的PATTERN被解释为一个schema名称模式后面跟上一个对象名称模式。例如,\dt foo*.*bar*会显示名称以foo开始的schema中所有名称包括bar的表。如果没有出现点号,那么模式将只匹配当前schema搜索路径中可见的对象。同样,双引号内的点号会失去其特殊含义并且变成普通的字符。
- 高级用户可以使用字符类等正则表达式记法,如[0-9]可以匹配任意数字。所有的正则表达式特殊字符都按照POSIX正则表达式使用。以下字符除外:
- .会按照上文所述作为一种分隔符。
- *会被翻译成正则表达式记号.*。
- ?会被翻译成.。
- $则按字面意思匹配。
- 根据需要,可以通过书写?、(R+|)、(R|)和R?来分别模拟PATTERN字符.、R*和R?。$不需要作为一个正则表达式字符,因为PATTERN必须匹配整个名称,而不是按照正则表达式的常规用法解释(换句话说,$会被自动地追加到PATTERN上)。如果不希望该PATTERN的匹配位置被固定,可以在开头或者结尾写上*。注意在双引号内,所有的正则表达式特殊字符会失去其特殊含义并且按照其字面意思进行匹配。另外,在操作符名称PATTERN中(即\do的PATTERN参数),正则表达式特殊字符也按照字面意思进行匹配。
| 参数 | 参数说明 |
|---|---|
| r | SELECT:允许对指定的表、视图读取数据。 |
| w | UPDATE:允许对指定表更新字段。 |
| a | INSERT:允许对指定表插入数据。 |
| d | DELETE:允许删除指定表中的数据。 |
| D | TRUNCATE:允许清理指定表中的数据。 |
| x | REFERENCES:允许创建外键约束,分布式场景暂不支持。 |
| t | TRIGGER:允许在指定表上创建触发器。 |
| X | EXECUTE:允许使用指定的函数,以及利用这些函数实现的操作符。 |
| U | USAGE:
|
| C | CREATE:
|
| c | CONNECT:允许用户连接到指定的数据库。 |
| T | TEMPORARY:允许创建临时表。 |
| A | ALTER:允许用户修改指定对象的属性。 |
| P | DROP:允许用户删除指定的对象。 |
| m | COMMENT:允许用户定义或修改指定对象的注释。 |
| i | INDEX:允许用户在指定表上创建索引。 |
| v | VACUUM:允许用户对指定的表执行ANALYZE和VACUUM操作。 |
| * | 授权以上权限。 |
| 参数 | 参数说明 | 取值范围 |
|---|---|---|
| \a | 对齐模式和非对齐模式之间的切换。 | - |
| \C [STRING] | 为表输出设置标题,或者取消标题(如果没有参数)。 | 任意字符串或空。 |
| \f [STRING] | 指定在非对齐输出模式下,用于分隔字段的字符或字符串。 | 任意字符串。 |
| \H | 标准输出和HTML表格格式输出之间的切换。 | - |
| \pset NAME [VALUE] | 设置影响查询结果表输出的选项。 | NAME的取值见表7。 |
| \t [on | off] | 切换输出的表格格式。 |
|
| \T [STRING] | 指定在使用HTML输出格式时放在table标签里的属性。如果参数为空,表示不设置。 | - |
| \x [on | off | auto] | 切换扩展行显示模式。 |
|
| 选项 | 选项说明 | 取值范围 |
|---|---|---|
| border | 用于控制表格输出时的边框样式。 |
|
| expanded (或x) | 在正常和扩展格式之间切换。 |
|
| fieldsep | 用于控制在非对齐输出模式下,各个字段之间的分隔符。 | 可以设置为任意字符串。常见的取值包括“,”、“\t”、“|”等,如果不设置该选项,默认使用空格作为字段分隔符。 |
| fieldsep_zero | 用于设置未对齐输出模式下的字段分隔符为ASCII NUL字符。 | - |
| footer | 用于设置查询结果的页脚。 |
|
| format | 控制查询结果的输出格式。 |
|
| null | 用于设置NULL值的显示方式。 | 任意字符串。如果不设置该选项,默认使用空白字符来代替NULL值。 |
| numericlocale | 用于控制数字输出格式时是否使用当前系统的区域设置。 |
|
| pager | 控制查询和gsql帮助输出的分页器。如果设置了环境变量PAGER,输出将被指向到指定程序,否则使用系统缺省。 |
|
| recordsep | 用于设置未对齐输出模式下的记录分隔符。 | 可以设置为任意字符串。常见的取值包括换行符\n、回车符\r、回车换行符\r\n等。如果不设置该选项,默认使用换行符\n作为记录分隔符。 |
| recordsep_zero | 用于设置未对齐输出模式下的记录分隔符为ASCII NUL字符。 | - |
| tableattr(或T) | 声明放在HTML输出格式中HTML table标签的属性(例如:cellpadding或bgcolor)。注意:如果已经使用\pset border命令,这里无需再设置border。 | 例如bgcolor=#FFFFFF等。如果没有给出value,则表示不设置表的属性。 |
| title | 用于设置查询结果的标题。 | 可以设置为任意字符串,如果不设置该选项,查询结果将不会显示任何标题。 |
| tuples_only(或t) | 在完全显示和只显示实际的表数据之间切换。完全显示将输出像列头、标题、各种脚注等信息。在tuples_only模式下,只显示实际的表数据。 | - |
| feedback | 切换是否输出结果行数。 | - |
| 参数 | 参数说明 | 取值范围 |
|---|---|---|
| \c[onnect] [DBNAME|- USER|- HOST|- PORT|-] | 连接到一个新的数据库。当数据库名称长度超过63个字节时,默认前63个字节有效,连接到前63个字节对应的数据库,但是gsql的命令提示符中显示的数据库对象名仍为截断前的名称。 说明: 重新建立连接时,如果切换数据库登录用户,可能会出现交互式输入,要求输入新用户的连接密码。该密码最大长度为999字节,受限于GUC参数password_max_length的最大值。 | - |
| \encoding [ENCODING] | 设置客户端字符编码格式。 | 不带参数时,显示当前的编码格式。 |
| \conninfo | 输出当前连接的数据库的信息。 | - |
| 参数 | 参数说明 | 取值范围 |
|---|---|---|
| \cd [DIR] | 切换当前的工作目录。 | 绝对路径或相对路径,且满足操作系统路径命名规则。 |
| \setenv NAME [VALUE] | 设置环境变量NAME为VALUE,如果没有给出VALUE值,则不设置环境变量。 | - |
| \timing [on | off] | 以毫秒为单位显示每条SQL语句的执行时间(不包括屏显打印时间)。 |
|
| \! [COMMAND] | 用于执行操作系统的命令。如果不跟任何参数,\!会直接打开一个独立的shell供用户交互。 | - |
| 参数 | 参数说明 |
|---|---|
| \prompt [TEXT] NAME | 用于提示用户输入一个值,并将其存储在一个gsql变量中。TEXT表示提示用户输入的文本,NAME表示要将输入值存储的gsql变量。示例如下: gaussdb=# \prompt 'Enter area name: ' area Enter area name: Asia gaussdb=# SELECT * FROM HR.areaS WHERE area_name = :'area'; area_id | area_name ---------+----------- 3 | Asia (1 row) |
| \set [NAME [VALUE]] | 设置内部变量NAME为VALUE,如果给出了多于一个值,变量取值为所有值的连接结果。如果没有给出第二个参数,只设置变量不设置值。 有一些常用变量被gsql特殊对待,它们是一些选项设置,通常所有特殊对待的变量都是由大写字母组成(可能还有数字和下划线)。 表11是所有被特殊对待的变量列表。 |
| \unset NAME | 不设置(或删除)gsql变量名。 |
| 名称 | 命令说明 | 取值范围 |
|---|---|---|
| \set VERBOSITY value | 该选项用于控制错误报告的冗余行。 |
|
| \set ON_ERROR_STOP value | 如果设置了这个变量,脚本处理将马上停止。如果该脚本是从另外一个脚本调用的,另外一个脚本也会按同样的方式停止。如果最外层的脚本不是从一次交互的gsql会话中调用的而是用-f选项调用的,gsql将返回错误代码3,以示这个情况与致命错误条件的区别(错误代码为1)。 |
|
| \set AUTOCOMMIT [on | off] | 控制当前gsql连接的自动提交行为。默认情况下,gsql连接处于自动提交模式,每个单独的语句都被隐式提交。如果基于性能或者其他方面考虑,关闭自动提交时,需要用户自己显式发出COMMIT命令来保证事务的提交。例如,在指定的业务SQL执行完之后发送COMMIT语句显式提交,特别是gsql客户端退出之前务必保证所有的事务已经提交。 说明: gsql默认使用自动提交模式,若关闭自动提交,将会导致后面执行的语句都被隐式事务包裹,数据库中不支持在事务中执行的语句不能在此模式下执行。 |
|
| 参数 | 参数说明 |
|---|---|
| \send_token | 全密态功能,传输密钥到服务端缓存,在开启内存解密逃生通道的情况下使用。 |
| \st | 全密态功能,传输密钥到服务端缓存,在开启内存解密逃生通道的情况下使用。 |
| \clear_token | 全密态功能,销毁服务端缓存的密钥,在开启内存解密逃生通道的情况下使用。 |
| \ct | 全密态功能,销毁服务端缓存的密钥,在开启内存解密逃生通道的情况下使用。 |
| \key_info KEY_INFO | 在全密态数据库特性中,设置访问外部密钥管理者的参数。 |
- 分布式暂不支持全密态内存解密逃生通道。
- M-Compatibility模式暂不支持全密态数据库。
| 简易运维命令 | 参数解释 | 实际执行的SQL |
|---|---|---|
| \view stmt_track {unique_sql_id} | stmt_track:记录指定SQL的L2级别的FULLSQL信息。 unique_sql_id:需要记录的SQL的unique_sql_id。 | SELECT * FROM pg_catalog.dynamic_func_control('LOCAL', 'STMT', 'TRACK', '{"{unique_sql_id}", "L2"}'); |
| \view stmt_untrack {unique_sql_id} | stmt_untrack:取消记录指定SQL的L2级别的FULLSQL信息。 unique_sql_id:需要取消记录的SQL的unique_sql_id。 | SELECT * FROM pg_catalog.dynamic_func_control('LOCAL', 'STMT', 'UNTRACK', '{"{unique_sql_id}"}'); |
| \view stmt_list | stmt_list:查询记录列表。 | SELECT * FROM pg_catalog.dynamic_func_control('LOCAL', 'STMT', 'LIST', '{}'); |
| \view stmt_clean | stmt_clean:清理记录列表。 | SELECT * FROM pg_catalog.dynamic_func_control('LOCAL', 'STMT', 'CLEAN', '{}'); |
| \view explain_and_stack {pid} | explain_and_stack:查询指定会话的运行时计划及堆栈。 pid:指定会话的pid。 | SELECT pg_catalog.gs_get_explain(pid), pg_catalog.gs_stack(pid) FROM pg_catalog.pgxc_stat_activity WHERE pid = {pid}; |
| \view slow_sql {top_n} | slow_sql:查询实时慢SQL情况。 top_n:查询的行数。 | SELECT pid, sessionid, pg_catalog.SUBSTRING(query, 0, 100), state, usename, pg_catalog.NOW() - query_start AS elp FROM pg_catalog.pgxc_stat_activity WHERE state != 'idle' AND usename NOT IN ('rdsAdmin', 'rdsMetric', 'rdsBackup', 'rdsRepl', 'dbmind_monitor_agent', 'dbmind_monitor') ORDER BY elp DESC LIMIT {top_n}; |
| \view slow_trans {top_n} | slow_trans:查询实时长事务情况。 top_n:查询的行数。 | SELECT pid, sessionid, pg_catalog.SUBSTRING(query, 0, 100), state, usename, pg_catalog.NOW() - xact_start AS elp FROM pg_catalog.pgxc_stat_activity WHERE state != 'idle' AND usename NOT IN ('rdsAdmin', 'rdsMetric', 'rdsBackup', 'rdsRepl', 'dbmind_monitor_agent', 'dbmind_monitor') ORDER BY elp DESC LIMIT {top_n}; |
| \view wait_event | wait_event(不带参数):查询当前语句和等待事件。 | SELECT a.pid, a.sessionid, a.datname, a.usename, a.client_addr, a.xact_start, a.query_start, (pg_catalog.NOW() - a.query_start)::text "query_runtime", w.wait_status, w.wait_event, w.locktag, w.lockmode, w.block_sessionid, a.query FROM pg_catalog.pgxc_stat_activity a JOIN pg_catalog.pgxc_thread_wait_status w ON a.sessionid = w.sessionid WHERE a.pid <> pg_catalog.pg_backend_pid() AND a.state = 'active' AND a.client_addr IS NOT NULL ORDER BY query_runtime DESC; |
| \view wait_event {unique_sql_id} {start_time} {end_time} | wait_event(带有三个参数):查询指定慢SQL的历史等待事件。 unique_sql_id:要查询的慢SQL的unique_sql_id。 start_time:开始时间。如'2025-01-01 00:00'。 end_time:结束时间。如'2025-01-01 00:00'。 | SELECT *, pg_catalog.statement_detail_decode(details, 'plaintext', true) FROM dbe_perf.statement_history WHERE unique_query_id = {unique_sql_id} AND start_time > {start_time} AND start_time < {end_time} ORDER BY db_time DESC; |
| \view thr_wait_event | thr_wait_event(不带参数):查询实时整体等待事件。 | SELECT wait_status, wait_event, pg_catalog.COUNT(*) FROM pg_catalog.pgxc_thread_wait_status GROUP BY 1, 2 ORDER BY 3 DESC; |
| \view thr_wait_event {sessionid} | thr_wait_event(带有一个参数):查询指定语句的等待事件。 sessionid:指定的sessionid。 | SELECT * FROM pg_catalog.pgxc_thread_wait_status WHERE sessionid = {sessionid}; |
| \view gs_asp {start_time} {end_time} | gs_asp:查询指定时间段的整体等待事件 start_time:开始时间。如'2025-01-01 00:00'。 end_time:结束时间。如'2025-12-31 23:59'。 | SELECT wait_status, event, pg_catalog.COUNT(*) FROM pg_catalog.gs_asp WHERE sample_time BETWEEN {start_time} AND {end_time} GROUP BY 1, 2 ORDER BY 3 DESC; |
| \view pg_stats {table_name} {att_name} | pg_stats:查询指定表的统计信息分布。 table_name:表名。 att_name:列名。 | SELECT * FROM pg_catalog.pg_stats WHERE tablename = '{table_name}' AND attname = '{att_name}'; |
| \view autovac {table_name} | autovac:查询统计信息更新阈值。 table_name:表名。 | SELECT * FROM pg_catalog.pg_autovac_status('{table_name}'::regclass); |
| \view thr_pool | thr_pool:查询线程池使用情况。 | SELECT node_name, worker_info FROM dbe_perf.global_threadpool_status; |
| \view failed_proc {proc_name} | failed_proc:查询失效的视图或存储过程。 proc_name:失效的函数。 | SELECT re.ev_class, cl.relname FROM pg_catalog.pg_rewrite re, pg_catalog.pg_class cl WHERE re.ev_action LIKE '%{proc_name}%' AND cl.oid = re.ev_class; |
| \view failed_proc_pkg | failed_proc_pkg:查询失效存储过程对应的package。 | SELECT DISTINCT object_type, pg_catalog.pg_get_userbyid(creator) AS owner, CASE object_type WHEN 'P' THEN ( SELECT DISTINCT pg_catalog.UPPER(pkgname) FROM pg_catalog.gs_package WHERE oid = ( SELECT propackageid FROM pg_catalog.pg_proc WHERE oid = object_oid ) ) WHEN 'B' THEN ( SELECT DISTINCT pg_catalog.UPPER(pkgname) FROM pg_catalog.gs_package WHERE oid = object_oid ) WHEN 'S' THEN ( SELECT DISTINCT pg_catalog.UPPER(pkgname) FROM pg_catalog.gs_package WHERE oid = object_oid ) END package_name FROM pg_catalog.pg_object WHERE valid = 'f' AND object_type IN ('P', 'B', 'S'); |
| \view failed_index | failed_index:查询不可用的索引。 | SELECT a.schemaname, a.relname, a.indexrelname, b.indisusable FROM pg_catalog.pg_stat_user_indexes a, pg_catalog.pg_index b WHERE a.indexrelid = b.indexrelid AND b.indisusable = 'f'; |
| \view table_size | table_size:查询当前库下所有表的大小,按降序输出。 | SELECT schemaname, relname, pg_catalog.pg_total_relation_size(pg_catalog.CONCAT(schemaname, '.', relname)) / 1024 / 1024 / 1024 "GB" FROM pg_catalog.pg_stat_user_tables ORDER BY 3 DESC; |
| \view dead_tup {top_n} | dead_tup:查询死元组的数量。 top_n:查询的行数。 | SELECT relname, n_live_tup, n_dead_tup, (n_dead_tup / (n_live_tup + 1)) AS rating, last_vacuum, last_autovacuum, last_analyze, last_autoanalyze FROM pg_catalog.pg_stat_user_tables ORDER BY rating DESC, n_dead_tup DESC LIMIT {top_n}; |
| \view table_size {table_name} | table_size:查询指定表的大小。 table_name:表名。 | SELECT * FROM pg_catalog.pg_size_pretty(pg_catalog.pg_total_relation_size('{table_name}'::regclass)); |
| \view login {start_time} {end_time} {ip} {port} | login:查询指定IP和端口的登录登出信息。 start_time:开始时间。如'2024-01-01 00:00:00'。 end_time:结束时间。如'2025-12-31 23:59:59'。 ip:IP地址。 port:端口。 | SELECT *, pg_catalog.SUBSTRING( client_conninfo::varchar, pg_catalog.POSITION(client_conninfo::varchar, '@'::varchar) + 1, 15 ) AS ip FROM pg_catalog.pg_query_audit({start_time}, {end_time}) WHERE ip = '{ip}' AND remote_port = '{port}'; |
| \view mem | mem:查询当前内存使用信息。 | SELECT * FROM pg_catalog.pg_total_memory_detail; |
| \view thr_mem {top_n} | thr_mem(带有一个参数):查询数据库所有线程的内存上下文使用情况。 top_n:查询的行数。 | SELECT contextname, pg_catalog.SUM(totalsize) / 1024 / 1024 "totalsize", pg_catalog.SUM(freesize) / 1024 / 1024 "freesize", pg_catalog.COUNT(*) "sum" FROM pg_catalog.pv_thread_memory_context GROUP BY contextname ORDER BY sum DESC LIMIT {top_n}; |
| \view thr_mem {context_name} {top_n} | thr_mem(带有两个参数):查询使用内存最多的线程的线程id。 context_name:内存上下文的名称。 top_n:查询的行数。 | SELECT * FROM pg_catalog.pv_thread_memory_detail() WHERE contextname = '{context_name}' ORDER BY totalsize DESC LIMIT {top_n}; |
| \view sess_mem {top_n} | sess_mem:查询数据库所有session的内存上下文使用情况。 top_n:查询的行数。 | SELECT contextname, pg_catalog.SUM(totalsize) / 1024 / 1024 "totalsize", pg_catalog.SUM(freesize) / 1024 / 1024 "freesize", pg_catalog.COUNT(*) "sum" FROM pg_catalog.pv_session_memory_context GROUP BY contextname ORDER BY sum DESC LIMIT {top_n}; |
| \view thr_mem_detail {tid} {context_name} | thr_mem_detail:查询指定线程的内存使用情况。 tid:线程id。 context_name:内存上下文的名称。 | SELECT * FROM pg_catalog.gs_get_thread_memctx_detail({tid}, '{context_name}'); |
| \view sess_mem_tp {context_name} | sess_mem_tp:查询指定内存上下文的内存使用情况。 context_name:内存上下文的名称。 | SELECT * FROM pg_catalog.gs_get_session_memctx_detail('{context_name}'); |
| \view shared_mem {top_n} | shared_mem:查询数据库全局共享内存上下文的使用情况。 top_n:查询的行数。 | SELECT contextname, pg_catalog.SUM(totalsize) / 1024 / 1024 "totalsize MB", pg_catalog.SUM(freesize) / 1024 / 1024 "freesize MB", pg_catalog.COUNT(*) "sum" FROM pg_catalog.pg_shared_memory_detail GROUP BY contextname ORDER BY sum DESC LIMIT {top_n}; |
| \view sess_mem_detail {top_n} | sess_mem_detail:查询session级内存上下文的使用情况。 top_n:查询的行数。 | SELECT contextname, pg_catalog.SUM(totalsize) / 1024 / 1024 "totalsize MB", pg_catalog.COUNT(1) "count" FROM pg_catalog.pv_session_memory_detail() GROUP BY contextname ORDER BY 2 DESC LIMIT {top_n}; |
| \view sess_mem_detail_tp {top_n} | sess_mem_detail_tp:查询session级内存上下文的使用情况(仅在线程池模式开启时生效)。 top_n:查询的行数。 | SELECT sessid, pg_catalog.SUM(totalsize) / 1024 / 1024 "totalsize MB", pg_catalog.COUNT(1) "count" FROM pg_catalog.pv_session_memory_context GROUP BY sessid ORDER BY 2 DESC LIMIT {top_n}; |
| \view thr_mem_pv {top_n} | thr_mem_pv:查询线程级内存上下文的使用情况。 top_n:查询的行数。 | SELECT contextname, pg_catalog.SUM(totalsize) / 1024 / 1024 "totalsize", pg_catalog.SUM(freesize) / 1024 / 1024 "freesize", pg_catalog.COUNT(1) "count" FROM pg_catalog.pv_thread_memory_detail() GROUP BY 1 ORDER BY 2 DESC LIMIT {top_n}; |
| \view total_mem {top_n} | total_mem:查询当前数据库节点的内存使用情况。 top_n:查询的行数。 | SELECT * FROM pg_catalog.pg_total_memory_detail LIMIT {top_n}; |
| \view avg_cpu {top_n} | avg_cpu:查询SQL语句的平均CPU时间,按降序输出。 top_n:查询的行数。 | SELECT unique_sql_id, cpu_time / (n_calls) "average_cpu_time" FROM dbe_perf.statement WHERE n_calls != 0 ORDER BY 2 DESC LIMIT {top_n}; |
| \om create_abort_sql_patch {patch_name} {unique_sql_id} | create_abort_sql_patch:创建避险SQL PATCH。 patch_name:SQL PATCH名。 unique_sql_id:指定SQL的unique_sql_id。 | SELECT * FROM dbe_sql_util.create_abort_sql_patch('{patch_name}', {unique_sql_id}); |
| \om kill_sess_thr {username} {database} {context_name} | kill_sess_thr:根据线程内存占用查杀内存占用高的SQL语句。 username:用户名。 database:数据库名。 context_name:内存上下文的名称。 | EXECUTE DIRECT ON COORDINATORS 'SELECT pg_catalog.pg_terminate_session(pid, sessionid), pid, sessionid FROM pg_catalog.pgxc_stat_activity WHERE usename = ''{username}'' AND datname != ''postgres'' AND datname = ''{database}'' AND pid IN ( SELECT tid FROM pg_catalog.pv_thread_memory_context WHERE contextname = ''{context_name}'' ) AND state = ''idle'';'; |
| \om kill_sess_sess {username} {database} {context_name} | kill_sess_sess:根据session内存占用查杀内存占用高的SQL语句。 username:用户名。 database:数据库名。 context_name:内存上下文的名称。 | EXECUTE DIRECT ON COORDINATORS 'SELECT pg_catalog.pg_terminate_session(pid, sessionid), pid, sessionid FROM pg_catalog.pgxc_stat_activity WHERE usename = ''{usename}'' AND datname != ''postgres'' AND datname = ''{database}'' AND pid IN ( SELECT threadid FROM pg_catalog.pv_session_memory_context WHERE contextname = ''{context_name}'' );'; |
示例
示例一
获取帮助信息。
--连接数据库。(根据实际需要替换数据库名字和端口号) gsql -d postgres -p 8000 gsql ((GaussDB Kernel XXX.X.XXX build f521c606) compiled at 2021-09-16 14:55:22 last mr 6385 release) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. --查看GaussDB支持的所有SQL语句。 gaussdb=# \h Available help: ABORT ALTER AGGREGATE ... ... --查看DROP TABLE语法的参数。 gaussdb=# \h DROP TABLE Command: DROP TABLE Description: remove a table Syntax: DROP TABLE [ IF EXISTS ] { [schema.]table_name } [, ...] [ CASCADE | RESTRICT ] [ PURGE ]; --查看gsql支持的元命令。 gaussdb=# \? General \copyright show GaussDB Kernel usage and distribution terms \g [FILE] or ; execute query (and send results to file or |pipe) ... ...
示例二
使用元命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | --连接数据库。(根据实际需要替换数据库名字和端口号) gsql -d postgres -p 8000 gsql ((GaussDB Kernel XXX.X.XXX build f521c606) compiled at 2021-09-16 14:55:22 last mr 6385 release) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. --创建表。 gaussdb=# CREATE SCHEMA HR; CREATE SCHEMA gaussdb=# CREATE TABLE HR.areaS(area_ID NUMBER,area_NAME VARCHAR2(25)); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'area_id' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --查看表的定义。 gaussdb=# \d HR.areaS Table "hr.areas" Column | Type | Modifiers -----------+-----------------------+----------- area_id | numeric | area_name | character varying(25) | --向HR.areaS表插入四行数据。 gaussdb=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (1, 'Europe'); INSERT 0 1 gaussdb=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (2, 'Americas'); INSERT 0 1 gaussdb=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (3, 'Asia'); INSERT 0 1 gaussdb=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (4, 'Middle East and Africa'); INSERT 0 1 --查看表。 gaussdb=# SELECT * FROM HR.areaS; area_id | area_name ---------+------------------------ 4 | Middle East and Africa 1 | Europe 2 | Americas 3 | Asia (4 rows) --用\pset命令以不同的方式显示表。 gaussdb=# \pset border 2 Border style is 2. gaussdb=# SELECT * FROM HR.areaS; +---------+------------------------+ | area_id | area_name | +---------+------------------------+ | 4 | Middle East and Africa | | 1 | Europe | | 2 | Americas | | 3 | Asia | +---------+------------------------+ (4 rows) gaussdb=# \pset border 0 Border style is 0. gaussdb=# SELECT * FROM HR.areaS; area_id area_name ------- ---------------------- 4 Middle East and Africa 1 Europe 2 Americas 3 Asia (4 rows) --使用元命令。 gaussdb=# \a \t \x Output format is unaligned. Showing only tuples. Expanded display is on. gaussdb=# SELECT * FROM HR.areaS; area_id|4 area_name|Middle East and Africa area_id|1 area_name|Europe area_id|2 area_name|Americas area_id|3 area_name|Asia gaussdb=# \a \t \x Output format is aligned. Tuples only is off. Expanded display is off. gaussdb=# SELECT * FROM HR.areaS; area_id area_name ------- ---------------------- 4 Middle East and Africa 1 Europe 2 Americas 3 Asia (4 rows) gaussdb=# DROP TABLE HR.areaS; DROP TABLE gaussdb=# DROP SCHEMA HR; DROP SCHEMA |