元命令参考
介绍使用openGauss数据库命令行交互工具登录数据库后,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命令所在的路径下创建)。
表 1 一般的元命令
表 2 查询缓存区元命令
表 3 输入/输出元命令
表 4 显示信息元命令
列出当前search_path中模式下所有的表、视图和序列。当search_path中不同模式存在同名对象时,只显示search_path中位置靠前模式下的同名对象。 | 列出当前search_path中模式下所有的表、视图和序列。 openGauss=# \d | ||
openGauss=# \dtable+ a | |||
openGauss=# \d+ f* | |||
列出所有名称以f开头可用的聚集函数,以及它们操作的数据类型和返回值类型。 openGauss=# \da f* | |||
openGauss=# \db p* | |||
openGauss=# \dc * | |||
openGauss=# \dC c* | |||
如果没有给出参数,则显示所有可视对象。“对象”包括:聚集、函数、操作符、类型、关系(表、视图、索引、序列、大对象)、规则。 | openGauss=# \dd | ||
openGauss=# \ddp | |||
openGauss=# \dD | |||
openGauss=# \ded | |||
openGauss=# \det | |||
openGauss=# \des | |||
openGauss=#\deu | |||
openGauss=# \dew | |||
openGauss=# \df | |||
openGauss=# \dF+ | |||
openGauss=# \dFd | |||
openGauss=# \dFp | |||
openGauss=# \dFt | |||
openGauss=# \dg j?e | |||
openGauss=# \dl | |||
openGauss=# \dL | |||
openGauss=# \dm | |||
openGauss=# \dn+ d* | |||
openGauss=# \do | |||
openGauss=# \dO | |||
rolename=xxxx/yyyy --赋予一个角色的权限 =xxxx/yyyy --赋予public的权限 xxxx表示赋予的权限,yyyy表示授予这个权限的角色。权限的参数说明请参见表5。 | openGauss=# \dp | ||
列出所有修改过的配置参数。这些设置可以是针对角色的、针对数据库的或者同时针对两者的。PATTERN1和PATTERN2表示要列出的角色PATTERN和数据库PATTERN。 | openGauss=# \drds *openGausss | ||
openGauss=# \dT | |||
openGauss=# \du | |||
这一组命令,字母E,i,s,t和v分别代表着外部表,索引,序列,表和视图。可以以任意顺序指定其中一个或者它们的组合来列出这些对象。例如:\dit列出所有的索引和表。在命令名称后面追加+,则每一个对象的物理尺寸以及相关的描述也会被列出。 | 如果指定了PATTERN,只列出名称匹配该PATTERN的对象。默认情况下只会显示用户创建的对象。通过PATTERN或者S修饰符可以把系统对象包括在内。 | openGauss=# \div | |
openGauss=# \dx | |||
列出服务器上所有数据库的名称、所有者、字符集编码以及使用权限。 openGauss=# \l | |||
假设存在函数function_a和函数名带圆括号的函数func()name,列出函数的定义。 openGauss=# \sf function_a openGauss=# \sf "func()name"(argtype1, argtype2) | |||
openGauss=# \z |
表 5 权限的参数说明
| |
| |
表 6 格式化元命令
| |
设置影响查询结果表输出的选项。NAME的取值见表7。 | |
表 7 可调节的打印选项
表 8 连接元命令
连接到一个新的数据库(当前数据库为postgres)。当数据库名称长度超过63个字节时,默认前63个字节有效,连接到前63个字节对应的数据库,但是gsql的命令提示符中显示的数据库对象名仍为截断前的名称。 | ||
表 9 操作系统元命令
| ||
表 10 变量元命令
设置内部变量NAME为VALUE或者如果给出了多于一个值,设置为所有这些值的连接结果。如果没有给出第二个参数,只设变量不设值。 有一些常用变量被gsql特殊对待,它们是一些选项设置,通常所有特殊对待的变量都是由大写字母组成(可能还有数字和下划线)。 表11是一个所有特殊对待的变量列表。 | |
表 11 \set常用命令
表 12 大对象元命令
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参数),正则表达式特殊字符也按照字面意思进行匹配。
DELIMITER
更改SQL语句之间分隔符命令,分隔符默认值为“;”。
DELIMITER命令为为客户端设置一个分隔符。当用户设置分隔符后,gsql客户端识别到分隔符时,会立即将SQL语句发送到服务端执行,但是服务端仍然将“;”看做SQL语句分隔符,并相应的处理SQL语句。
注意事项:
- delimiter符号目前不是自由设定的,结束符范围有限制,目前接受大小写字母组合或特殊字符组合(~/!/@/#/^/&/`/?/+/-/*//(除号)/%/</>/=),其中常见的用法是”//"。
- 符号组合中尽量使用无歧义符号组合,特殊符号组合(注释符:”\*"、”--“等)目前不支持用于delimiter命名。
- delimiter长度范围:0~15。
- 设置的结束符的级别是会话级别的,当切换数据库时delimiter_name会设置为默认值‘;’。
- 用户如果想使用其他字符组合例如"adbc $$",可以使用引号包含,例如delimiter “adbc $$",但使用时也需要使用引号包含,例如:select 1"adbc $$"。
- delimiter分隔符只有sql_compatibility = 'B'时支持。