元命令是在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命令。但是,在任何情况下,一个元命令的参数都不能延续超过行尾。
常用的元命令如下。
\h(\help) [NAME]:表示给出指定SQL语句的语法帮助。如果没有给出参数NAME,则gsql会列出可获得帮助的所有命令。如果参数NAME是一个星号(*),则显示所有SQL语句的语法帮助。例如,查询创建物化视图的语法命令如下:
test=> \h create material view
Command: create materialized view
Description: define a new materialized view
Syntax:
create [ incremental ] materialized view table_name
[ (column_name [, ...] ) ]
[ tablespace tablespace_name ]
AS query
\c [DBNAME]:表示切换数据库。
\q:表示退出gsql程序。在一个脚本文件中,该命令只在脚本终止时执行。
\echo [STRING]:表示把字符串写到标准输出。例如下面的命令:
test=> \echo who r u ?
who r u ?
\w FILE:表示将当前查询缓冲区输出到文件。
\i FILE:表示从文件FILE中读取内容,并将其当作输入,执行查询。
例如,在服务器目录openGauss下编辑命令文件aaa.txt,输入查询命令“select version();”,然后保存。通过元命令调用aaa.txt中的命令:
test=> \i /openGauss/aaa.txt
version
----------------------------------------------------------
(openGauss-lite 5.0.0 build a07d57c3) compiled at 2023-03-29 03:49:47 commit 0 last mr release
(1 row)
\o [FILE]:表示把所有的查询结果发送到文件中。使用该命令后,后面的所有查询结果都将不再输出到屏幕,而是全部输出到文件中。如果想恢复输出到屏幕,只须执行\o命令即可。
\copy:表示将数据从文件导入表,或将数据从表导出到文件中。
例如,将表b的内容导出到文件b.txt中的命令如下:
test=> select * from b;
id | demo
----+---------
1 | a
2 | b
(2 rows)
test=> \copy b to '/home/omm/b.txt';
查看导出的文件的命令如下:
[omm@localhost ~]$ cat b.txt
1 a
2 b
导入过程与此类似,具体命令如下:
test=> \copy b from '/home/omm/b.txt';
test=> select * from b;
id | demo
----+---------
1 | a
2 | b
1 | a
2 | b
(4 rows)
导出时可以对数据进行筛选,也可以指定分隔符,具体命令如下:
\copy (select * from b where id=1) to '/home/omm/bb.txt' delimiter ',';
查看导出文件的命令如下:
[omm@localhost ~]$ cat bb.txt
1,a
1,a
也可以指定导出成csv文件,具体命令如下:
test=> \copy (select * from b where id=1) to '/home/omm/b.csv' with csv header;
[omm@localhost ~]$ cat b.csv
id,demo
1,a
1,a
\d[S+]:表示列出当前search_path模式下所有的表、视图和序列。其中,参数S表示列出系统对象。
search_path为用户能看到的schema,通常为"$user", public,即用户默认模式(与用户名相同的模式)和public模式。
\d[S+] NAME:表示列出指定表、视图和索引的结构。例如下面的命令:
test=> \d t1
Table "test.t1"
Column | Type | Modifiers
--------+--------------------------------+-----------
id | integer |
sj | timestamp(0) without time zone |
demo | character varying(200) |
demo2 | text |
\d[+] [PATTERN]:表示列出所有的表、视图和索引。其中,参数+表示列出更多的信息。
例如,列出所有t开头的表的命令如下:
\d t*
\da[S] [PATTERN]:表示列出所有可用的聚集函数,以及它们操作的数据类型和返回值类型。
\db[+] [PATTERN]:表示列出所有可用的表空间。
\ddp [PATTERN]:表示显示所有默认的使用权限。
\dg[+] [PATTERN](功能同\du命令):表示列出所有的数据库角色。
\dn[S+] [PATTERN]:表示列出所有模式(名称空间)。如果向命令中追加参数+,则会列出与每个模式相关的权限及其描述。
\do[S] [PATTERN]:表示列出所有可用的操作符,以及它们的操作数和返回的数据类型。
\dT[S+] [PATTERN]:表示列出所有的数据类型。
\du[+] [PATTERN]:表示列出所有的数据库角色。
\df[+] [PATTERN]:表示列出所有的存储过程和函数。
\l[+]:表示列出服务器上所有数据库的名称、所有者、字符集编码以及使用权限。
\sf [PATTERN]:该命令后面接函数名后可查看函数的定义。
\z [PATTERN]:表示列出数据库中所有的表、视图和序列,以及它们相关的访问特权。
\?:表示列出所有的元命令以及这些元命令的说明及用法。具体命令如下:
test=> \?