元命令参考
介绍使用GaussDB数据库命令行交互工具登录数据库后,gsql所提供的元命令。所谓元命令就是在gsql里输入的任何以不带引号的反斜杠开头的命令。
注意事项
- 一个gsql元命令的格式是反斜杠后面紧跟一个动词,然后是任意参数。参数命令动词和其他参数以任意个空白字符间隔。
- 要在参数里面包含空白,必须用单引号把它引起来。要在这样的参数里包含单引号,可以在前面加一个反斜杠。任何包含在单引号里的内容都会被进一步进行类似C语言的替换:\n(新行)、\t(制表符)、\b(退格)、\r(回车)、\f(换页)、\digits(八进制表示的字符)、\xdigits(十六进制表示的字符)。
- 用""包围的内容被当做一个命令行传入shell。该命令的输出(删除了结尾的新行)被当做参数值。
- 如果不带引号的参数以冒号(:)开头,它会被当做一个gsql变量,并且该变量的值最终会成为真正的参数值。
- 有些命令以一个SQL标识的名称(比如一个表)为参数。这些参数遵循SQL语法关于双引号的规则:不带双引号的标识强制转换成小写,而双引号保护字母不进行大小写转换,并且允许在标识符中使用空白。在双引号中,成对的双引号在结果名称中分析成一个双引号。比如,FOO"BAR"BAZ解析成fooBARbaz;而"Aweird""name"解析成A weird"name。
- 对参数的分析在遇到另一个不带引号的反斜杠时停止。这里会认为是一个新的元命令的开始。特殊的双反斜杠序列(\\)标识参数的结尾并将继续分析后面的SQL语句(如果存在)。这样SQL和gsql命令可以自由地在一行里面混合。但是在任何情况下,一条元命令的参数不能延续超过行尾。
元命令
元命令的详细说明请参见表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] |
控制并发执行开关。
说明:
|
num的默认值:1024。
须知:
|
\q |
退出gsql程序。在一个脚本文件里,只在脚本终止的时候执行。 |
- |
参数 |
参数说明 |
---|---|
\e [FILE] [LINE] |
使用外部编辑器编辑查询缓冲区(或者文件)。 |
\ef [FUNCNAME [LINE]] |
使用外部编辑器编辑函数定义。如果指定了LINE(即行号),则光标会指到函数体的指定行。 |
\p |
打印当前查询缓冲区到标准输出。 |
\r |
重置(或清空)查询缓冲区。 |
\w FILE |
将当前查询缓冲区输出到文件。 |
参数 |
参数说明 |
---|---|
\copy { table [ ( column_list ) ] | ( query ) } { from | to } { filename | stdin | stdout | pstdin | pstdout } [ with ] [ binary ] [ oids ] [ delimiter [ as ] 'character' ] [ useeof ] [ null [ as ] 'string' ] [ csv [ header ] [ quote [ as ] 'character' ] [ escape [ as ] 'character' ] [ force quote column_list | * ] [ force not null column_list ] ] [parallel integer] |
在任何gsql客户端登录数据库成功后可以执行导入导出数据,这是一个运行SQL COPY命令的操作,但不是读取或写入指定文件的服务器,而是读取或写入文件,并在服务器和本地文件系统之间路由数据。这意味着文件的可访问性和权限是本地用户的权限,而不是服务器的权限,并且不需要数据库初始化用户权限。
说明:
\COPY只适合小批量,格式良好的数据导入,不会对非法字符进行预处理,也无容错能力。导入数据应优先选择GDS或COPY。 \COPY 可以指定数据导入时的客户端数量,从而实现数据文件的并行导入,目前并发数范围为[1, 8]。 \COPY并行导入目前存在以下约束:临时表的并行导入不支持、在事务内的并行导入不支持、对二进制文件的并行导入不支持、数据导入支持AES128加密时不支持以及COPY选项中存在EOL。在这些情况下,即使指定了parallel参数,仍然会走非并行流程。 |
\echo [STRING] |
把字符串写到标准输出。 |
\i FILE |
从文件FILE中读取内容,并将其当作输入,执行查询。 |
\i+ FILE KEY |
执行加密文件中的命令。 |
\ir FILE |
和\i类似,只是相对于存放当前脚本的路径。 |
\ir+ FILE KEY |
和\i+类似,只是相对于存放当前脚本的路径。 |
\o [FILE] |
把所有的查询结果发送到文件里。 |
\qecho [STRING] |
把字符串写到查询结果输出流里。 |
参数 |
参数说明 |
取值范围 |
示例 |
||
---|---|---|---|---|---|
\d[S+] |
列出当前search_path中模式下所有的表、视图和序列。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。 |
- |
列出当前search_path中模式下所有的表、视图和序列。
|
||
\d[S+] NAME |
列出指定表、视图和索引的结构。 |
- |
假设存在表a,列出指定表a的结构。
|
||
\d+ [PATTERN] |
列出所有表、视图和索引。 |
如果声明了PATTERN,只显示名称匹配PATTERN的表、视图和索引。 |
列出所有名称以f开头的表、视图和索引。
|
||
\da[S] [PATTERN] |
列出所有可用的聚集函数,以及它们操作的数据类型和返回值类型。 |
如果声明了PATTERN,只显示名称匹配PATTERN的聚集函数。 |
列出所有名称以f开头可用的聚集函数,以及它们操作的数据类型和返回值类型。
|
||
\db[+] [PATTERN] |
列出所有可用的表空间。 |
如果声明了PATTERN,只显示名称匹配PATTERN的表空间。 |
列出所有名称以p开头的可用表空间。
|
||
\dc[S+] [PATTERN] |
列出所有字符集之间的可用转换。 |
如果声明了PATTERN,只显示名称匹配PATTERN的转换。 |
列出所有字符集之间的可用转换。
|
||
\dC[+] [PATTERN] |
列出所有类型转换。 PATTERN需要使用实际类型名,不能使用别名。 |
如果声明了PATTERN,只显示名称匹配PATTERN的转换。 |
列出所有名称以c开头的类型转换。
|
||
\dd[S] [PATTERN] |
显示所有匹配PATTERN的描述。 |
如果没有给出参数,则显示所有可视对象。“对象”包括:聚集、函数、操作符、类型、关系(表、视图、索引、序列、大对象)、规则。 |
列出所有可视对象。
|
||
\ddp [PATTERN] |
显示所有默认的使用权限。 |
如果指定了PATTERN,只显示名称匹配PATTERN的使用权限。 |
列出所有默认的使用权限。
|
||
\dD[S+] [PATTERN] |
列出所有可用域。 |
如果声明了PATTERN,只显示名称匹配PATTERN的域。 |
列出所有可用域。
|
||
\det[+] [PATTERN] |
列出所有的外部表。 |
如果声明了PATTERN,只显示名称匹配PATTERN的表。 |
列出所有的外部表。
|
||
\des[+] [PATTERN] |
列出所有的外部服务器。 |
如果声明了PATTERN,只显示名称匹配PATTERN的服务器。 |
列出所有的外部服务器。
|
||
\deu[+] [PATTERN] |
列出用户映射信息。 |
如果声明了PATTERN,只显示名称匹配PATTERN的信息。 |
列出用户映射信息。
|
||
\dew[+] [PATTERN] |
列出封装的外部数据。 |
如果声明了PATTERN,只显示名称匹配PATTERN的数据。 |
列出封装的外部数据。
|
||
\df[antw][S+] [PATTERN] |
列出所有可用函数,以及它们的参数和返回的数据类型。a代表聚集函数,n代表普通函数,t代表触发器,w代表窗口函数。 |
如果声明了PATTERN,只显示名称匹配PATTERN的函数。 |
列出所有可用函数,以及它们的参数和返回的数据类型。
|
||
\dF[+] [PATTERN] |
列出所有的文本搜索配置信息。 |
如果声明了PATTERN,只显示名称匹配PATTERN的配置信息。 |
列出所有的文本搜索配置信息。
|
||
\dFd[+] [PATTERN] |
列出所有的文本搜索字典。 |
如果声明了PATTERN,只显示名称匹配PATTERN的字典。 |
列出所有的文本搜索字典。
|
||
\dFp[+] [PATTERN] |
列出所有的文本搜索分析器。 |
如果声明了PATTERN,只显示名称匹配PATTERN的分析器。 |
列出所有的文本搜索分析器。
|
||
\dFt[+] [PATTERN] |
列出所有的文本搜索模板。 |
如果声明了PATTERN,只显示名称匹配PATTERN的模板。 |
列出所有的文本搜索模板。
|
||
\dg[+] [PATTERN] |
列出所有数据库角色。
说明:
因为用户和群组的概念被统一为角色,所以这个命令等价于\du。为了和以前兼容,所以保留两个命令。 |
如果指定了PATTERN,只显示名称匹配PATTERN的角色。 |
列出名称为“j?e”所有数据库角色(“?”表示任一字符)。
|
||
\dl |
\lo_list的别名,显示一个大对象的列表。 |
- |
列出所有的大对象。
|
||
\dL[S+] [PATTERN] |
列出可用的程序语言。 |
如果指定了PATTERN,只列出名称匹配PATTERN的语言。 |
列出可用的程序语言。
|
||
\dm[S+] [PATTERN] |
列出物化视图。 |
如果指定了PATTERN,只列出名称匹配PATTERN的物化视图。 |
列出物化视图。
|
||
\dn[S+] [PATTERN] |
列出所有模式(名称空间)。如果向命令追加+,会列出每个模式相关的权限及描述。 |
如果声明了PATTERN,只列出名称匹配PATTERN的模式名。缺省时,只列出用户创建的模式。 |
列出所有名称以d开头的模式以及相关信息。
|
||
\do[S] [PATTERN] |
列出所有可用的操作符,以及它们的操作数和返回的数据类型。 |
如果声明了PATTERN,只列出名称匹配PATTERN的操作符。缺省时,只列出用户创建的操作符。 |
列出所有可用的操作符,以及它们的操作数和返回的数据类型。
|
||
\dO[S+] [PATTERN] |
列出排序规则。 |
如果声明了PATTERN,只列出名称匹配PATTERN的规则。缺省时,只列出用户创建的规则。 |
列出排序规则。
|
||
\dp [PATTERN] |
列出一列可用的表、视图以及相关的权限信息。 \dp显示结果如下: rolename=xxxx/yyyy --赋予一个角色的权限 =xxxx/yyyy --赋予public的权限 xxxx表示赋予的权限,yyyy表示授予这个权限的角色。权限的参数说明请参见表5。 |
如果指定了PATTERN,只列出名称匹配PATTERN的表、视图。 |
列出一列可用的表、视图以及相关的权限信息。
|
||
\drds [PATTERN1 [PATTERN2]] |
列出所有修改过的配置参数。这些设置可以是针对角色的、针对数据库的或者同时针对两者的。PATTERN1和PATTERN2表示要列出的角色PATTERN和数据库PATTERN。 |
如果声明了PATTERN,只列出名称匹配PATTERN的规则。缺省或指定*时,则会列出所有设置。 |
列出数据库所有修改过的配置参数。
|
||
\dT[S+] [PATTERN] |
列出所有的数据类型。 |
如果指定了PATTERN,只列出名称匹配PATTERN的类型。 |
列出所有的数据类型。
|
||
\du[+] [PATTERN] |
列出所有数据库角色。
说明:
因为用户和群组的概念被统一为角色,所以这个命令等价于\dg。为了和以前兼容,所以保留两个命令。 |
如果指定了PATTERN,则只列出名称匹配PATTERN的角色。 |
列出所有数据库角色。
|
||
\dE[S+] [PATTERN] \di[S+] [PATTERN] \ds[S+] [PATTERN] \dt[S+] [PATTERN] \dv[S+] [PATTERN] |
这一组命令,字母E,i,s,t和v分别代表着外部表,索引,序列,表和视图。可以以任意顺序指定其中一个或者它们的组合来列出这些对象。例如:\dit列出所有的索引和表。在命令名称后面追加+,则每一个对象的物理尺寸以及相关的描述也会被列出。 |
如果指定了PATTERN,只列出名称匹配该PATTERN的对象。默认情况下只会显示用户创建的对象。通过PATTERN或者S修饰符可以把系统对象包括在内。 |
列出所有的索引和视图。
|
||
\dx[+] [PATTERN] |
列出安装数据库的扩展信息。 |
如果指定了PATTERN,则只列出名称匹配PATTERN的扩展信息。 |
列出安装数据库的扩展信息。
|
||
\l[+] |
列出服务器上所有数据库的名称、所有者、字符集编码以及使用权限。 |
- |
列出服务器上所有数据库的名称、所有者、字符集编码以及使用权限。
|
||
\sf[+] FUNCNAME |
显示函数的定义。
说明:
对于带圆括号的函数名,需要在函数名两端添加双引号,并且在双引号后面加上参数类型列表。参数类型列表两端添加圆括号。 |
- |
假设存在函数function_a和函数名带圆括号的函数func()name,列出函数的定义。
|
||
\z [PATTERN] |
列出数据库中所有表、视图和序列,以及它们相关的访问特权。 |
如果给出任何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 |
|
\pset NAME [VALUE] |
设置影响查询结果表输出的选项。NAME的取值见表7。 |
\t [on|off] |
切换输出的字段名的信息和行计数脚注。 |
\T [STRING] |
指定在使用HTML输出格式时放在table标签里的属性。如果参数为空,不设置。 |
\x [on|off|auto] |
切换扩展行格式。 |
选项 |
选项说明 |
取值范围 |
---|---|---|
border |
value必须是一个数字。通常这个数字越大,表的边界就越宽线就越多,但是这个取决于特定的格式。 |
|
expanded (或x) |
在正常和扩展格式之间切换。 |
|
fieldsep |
声明域分隔符来实现非对齐输出。这样就可以创建其他程序希望的制表符或逗号分隔的输出。要设置制表符域分隔符,键入\pset fieldsep '\t'。缺省域分隔符是 '|' (竖条符)。 |
- |
fieldsep_zero |
声明域分隔符来实现非对齐输出到零字节。 |
- |
footer |
用来切换脚注。 |
- |
format |
设置输出格式。允许使用唯一缩写(这意味着一个字母就够了)。 |
取值范围:
|
null |
打印一个字符串,用来代替一个null值。 |
缺省是什么都不打印,这样很容易和空字符串混淆。 |
numericlocale |
切换分隔小数点左边的数值的区域相关的分组符号。 |
忽略此参数,显示默认的分隔符。 |
pager |
控制查询和gsql帮助输出的分页器。如果设置了环境变量PAGER,输出将被指向到指定程序,否则使用系统缺省。 |
|
recordsep |
声明在非对齐输出格式时的记录分隔符。 |
- |
recordsep_zero |
声明在非对齐输出到零字节时的记录分隔符。 |
- |
tableattr(或T) |
声明放在html输出格式中HTML table标签的属性(例如:cellpadding或bgcolor)。注意:这里可能不需要声明border,因为已经在\pset border里用过了。如果没有给出value,则不设置表的属性。 |
- |
title |
为随后打印的表设置标题。这个可以用于给输出一个描述性标签。如果没有给出value,不设置标题。 |
- |
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] |
返回到一个单独的UNIX shell或者执行UNIX命令COMMAND。 |
- |
参数 |
参数说明 |
---|---|
\prompt [TEXT] NAME |
提示用户用文本格式来指定变量名称。 |
\set [NAME [VALUE]] |
设置内部变量NAME为VALUE或者如果给出了多于一个值,设置为所有这些值的连接结果。如果没有给出第二个参数,只设变量不设值。 有一些常用变量被gsql特殊对待,它们是一些选项设置,通常所有特殊对待的变量都是由大写字母组成(可能还有数字和下划线)。 表11是一个所有特殊对待的变量列表。 |
\unset NAME |
不设置(或删除)gsql变量名。 |
名称 |
命令说明 |
取值范围 |
---|---|---|
\set VERBOSITY value |
这个选项可以设置为值default,verbose,terse之一以控制错误报告的冗余行。 |
value取值范围:default, verbose,terse |
\set ON_ERROR_STOP value |
如果设置了这个变量,脚本处理将马上停止。如果该脚本是从另外一个脚本调用的,那个脚本也会按同样的方式停止。如果最外层的脚本不是从一次交互的gsql会话中调用的而是用-f选项调用的,gsql将返回错误代码3,以示这个情况与致命错误条件的区别(错误代码为1)。 |
value取值范围为:on/off,true/false,yes/no,1/0 |
\set AUTOCOMMIT [on|off] |
设置当前gsql连接的自动提交行为,on为打开自动提交,off为关闭自动提交。默认情况下,gsql连接处于自动提交模式,每个单独的语句都被隐式提交。如果基于性能或者其它方面考虑,需要关闭自动提交时,需要用户自己显示地发出COMMIT命令来保证事务的提交。例如,在指定的业务SQL执行完之后发送COMMIT语句显式提交,特别是gsql客户端退出之前务必保证所有的事务已经提交。
说明:
gsql默认使用自动提交模式,若关闭自动提交,将会导致后面执行的语句都受到隐式事务包裹,数据库中不支持在事务中执行的语句不能在此模式下执行。 |
|
PATTERN
很多\d命令都可以用一个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参数),正则表达式特殊字符也按照字面意思进行匹配。