GSQL是GaussDB数据库的客户端连接工具,默认仅支持从服务器本地连接数据库,连接到远程数据库需要在服务端进行配置。
gsql支持交互式输入和执行SQL,也可以执行SQL脚本。gsql还内置可以方便查看数据库对象信息的元命令。
连接数据库
使用gsql连接数据库时,gsql必须与数据库版本配套。
gsql连接数据库命令:
gsql -h 数据库IP -p 数据库端口 -d 数据库名 -U 连接用户 -W 连接用户口令
gsql连接数据库示例:
gsql -h192.168.66.8 -p8000 -d gaussdb -U tony
# 集中式部署时,可指定所有DN节点,gsql会尝试连接所有节点直到找到主DN节点
gsql -h192.168.66.8,192.168.66.9,192.168.66.10 -p8000 -d gaussdb -U tony
# 未指定参数选项时,会优先被解释为数据库名,然后是用户名
gsql gaussdb omm -p8000 #相当于 gsql -d gaussdb -U omm -p8000
# 未指定连接用户时,默认以操作系统用户连接
gsql -d gaussdb -p8000 #相当于 gsql -d gaussdb -U omm -p8000
获取gsql命令帮助:
gsql --help
获取gsql元命令帮助(需连接数据库):
Type "help" for help.
tpcc=> help
You are using gsql, the command-line interface to gaussdb.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with gsql commands
\g or terminate with semicolon to execute query
\q to quit
变量与提示符
设置变量
gsql支持通过类似Shell的方式设置和查看变量。
语法:
\set --查看所有变量
\set myvar1 12345 --设置变量myvar1,值为12345
\echo :myvar1 --查看变量myvar1的值
\unset myvar1 --撤销变量myvar1
示例:
tpcc=> \set
AUTOCOMMIT = 'on'
PROMPT1 = '%o%R%# '
PROMPT2 = '%o%R%# '
PROMPT3 = '>> '
VERBOSITY = 'default'
VERSION = '(GaussDB Kernel 503.1.0 build f53b4ed8) compiled at 2023...'
DBNAME = 'tpcc'
USER = 'root'
HOST = '/data/cluster/temp'
PORT = '8000'
ENCODING = 'UTF8'
tpcc=> \set myvar1 12345
tpcc=> \echo :myvar1
12345
tpcc=> \unset myvar1
tpcc=> \echo :myvar1
:myvar1
特殊变量
gsql预定义了一些特殊变量。所有特殊变量名都以大写字母、数字和下划线组成。
特殊变量 | 设置方法 | 含义 |
---|---|---|
DBNAME | \set DBNAME xxx | 当前连接的数据库名 |
HOST | \set HOST xxx | 已连接数据库主机名 |
PORT | \set PORT port | 已连接数据库的端口 |
USER | \set USER xxx | 已连接的数据库用户 |
ECHO | \set ECHO all|query | all相当于gsql -a,query相当于gsql -e |
ECHO_HIDDEN | \set ECHO_HIDDEN on|off|noexec | on同时显示gsql元命令实际调用的SQL和查询结果,off只显示查询结果,noexec只显示调用的SQL |
ENCODING | \set ENCODING xxx | 当前客户端的字符编码 |
FETCH_COUNT | \set FETCH_COUNT n | 为正整数n时,表示执行SELECT时每次从结果集中取n行到缓存并输出;为其他值时,一次性输出结果集中所有行 |
HISTCONTROL | \set HISTCONTROL ignorespace|ignoredups|ignoreboth|none | ignorespace以空格开始的行不会被记录到历史命令,ignoredups历史命令中已有的行不会被重复记录 |
HISTFILE | \set HISTFILE xxx | 存储历史命令的文件,缺省为.bash_history |
HISTSIZE | \set HISTSIZE n | 保存的历史命令个数 |
IGNOREEOF | \set IGNOREEOF n | 忽略gsql中输入的前n个EOF(通常是Ctrl+C) |
LASTOID | \set LASTOID oid | 最后影响的OID,即为从INSERT或lo_import命令返回的值 |
ON_ERROR_ROLLBACK | \set ON_ERROR_ROLLBACK on|interactive|off | 当一个事务块里的语句出错时,on表示忽略错误而事务继续,interactive只在交互的会话里忽略错误,off表示出错时回滚整个事务 |
ON_ERROR_STOP | \set ON_ERROR_STOP on|off | on表示命令执行出错时立即停止,返回已执行命令的结果;off表示跳过错误继续执行 |
VERBOSITY | \set VERBOSITY terse|default|verbose | 用于控制错误信息的输出详尽程度。terse信息最简略,verbose信息最详细 |
注:经测试,部分特殊变量可能不会按官方文档的描述起作用。
示例:
tpcc=> \echo :DBNAME
tpcc
tpcc=> \echo :USER
root
tpcc=> \echo :ENCODING
UTF8
提示符变量
控制gsql提示符的三个特殊变量。
提示符变量 | 作用 |
---|---|
PROMPT1 | gsql请求一个新命令时使用的提示符 |
PROMPT2 | 在一个命令期待更多输入时(SQL没有以分号结束但是换行、或者引号不完整)显示的提示符 |
PROMPT3 | 执行COPY命令时期望在终端输入数据时显示的提示符 |
查看当前的提示符变量:
tpcc=> \echo :PROMPT1
%o%R%#
tpcc=> \echo :PROMPT2
%o%R%#
tpcc=> \echo :PROMPT3
>>
提示符变量支持的符号:
符号 | 含义 |
---|---|
%M | 主机的全名(包含域名) |
%> | 正在侦听的端口号 |
%n | 数据库会话的用户名 |
%# | 如果当前用户是数据库管理员,使用#,否则使用> |
%/ | 当前的数据库名 |
%R | 对于PROMPT1通常是等号=,对于PROMPT2可能是-、*、$、单引号或者双引号 |
%:name | gsql变量name的值 |
%[…%] | 包含终端控制符,用于控制颜色、背景、提示符的文本风格等 |
修改提示符变量:
tpcc=>\echo :PROMPT1
%o%R%#
tpcc=>\set PROMPT1 %n@%/%R%#
root@tpcc=>
root@tpcc=>\set PROMPT1 %n@%/@%m%R%#
root@tpcc@local=>
root@tpcc@local=>\set PROMPT1 %n@%/@%M%R%#
root@tpcc@local:/data/cluster/temp=>
元命令
查看支持的gsql元命令:
tpcc=> \?
General
\copyright show GaussDB Kernel usage and distribution terms
\g [FILE] or ; execute query (and send results to file or |pipe)
\h(\help) [NAME] help on syntax of SQL commands, * for all commands
\parallel [on [num]|off] toggle status of execute (currently off)
\q quit gsql
Query Buffer
\e [FILE] [LINE] edit the query buffer (or file) with external editor
\ef [FUNCNAME [LINE]] edit function definition with external editor
\p show the contents of the query buffer
\r reset (clear) the query buffer
\w FILE write query buffer to file
Input/Output
\copy ... perform SQL COPY with data stream to the client host
\echo [STRING] write string to standard output
\i FILE execute commands from file
\i+ FILE KEY execute commands from encrypted file
\ir FILE as \i, but relative to location of current script
\ir+ FILE KEY as \i+, but relative to location of current script
\o [FILE] send all query results to file or |pipe
\qecho [STRING] write string to query output stream (see \o)
Informational
(options: S = show system objects, + = additional detail)
\d[S+] list tables, views, and sequences
\d[S+] NAME describe table, view, sequence, or index
\da[S] [PATTERN] list aggregates
\db[+] [PATTERN] list tablespaces
\dc[S+] [PATTERN] list conversions
\dC[+] [PATTERN] list casts
\dd[S] [PATTERN] show object descriptions not displayed elsewhere
\ddp [PATTERN] list default privileges
\dD[S+] [PATTERN] list domains
\ded[+] [PATTERN] list data sources
\det[+] [PATTERN] list foreign tables
\des[+] [PATTERN] list foreign servers
\deu[+] [PATTERN] list user mappings
\dew[+] [PATTERN] list foreign-data wrappers
\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions
\dF[+] [PATTERN] list text search configurations
\dFd[+] [PATTERN] list text search dictionaries
\dFp[+] [PATTERN] list text search parsers
\dFt[+] [PATTERN] list text search templates
\dg[+] [PATTERN] list roles
\di[S+] [PATTERN] list indexes
\dl list large objects, same as \lo_list
\dL[S+] [PATTERN] list procedural languages
\dm[S+] [PATTERN] list materialized views
\dn[S+] [PATTERN] list schemas
\do[S] [PATTERN] list operators
\dO[S+] [PATTERN] list collations
\dp [PATTERN] list table, view, and sequence access privileges
\drds [PATRN1 [PATRN2]] list per-database role settings
\ds[S+] [PATTERN] list sequences
\dt[S+] [PATTERN] list tables
\dT[S+] [PATTERN] list data types
\du[+] [PATTERN] list roles
\dv[S+] [PATTERN] list views
\dE[S+] [PATTERN] list foreign tables
\dx[+] [PATTERN] list extensions
\l[+] list all databases
\sf[+] FUNCNAME show a function's definition
\z [PATTERN] same as \dp
Formatting
\a toggle between unaligned and aligned output mode
\C [STRING] set table title, or unset if none
\f [STRING] show or set field separator for unaligned query output
\H toggle HTML output mode (currently off)
\pset NAME [VALUE] set table output option
(NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|
numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|
feedback})
\t [on|off] show only rows (currently off)
\T [STRING] set HTML <table> tag attributes, or unset if none
\x [on|off|auto] toggle expanded output (currently off)
Connection
\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]
connect to new database (currently "tpcc")
\encoding [ENCODING] show or set client encoding
\conninfo display information about current connection
Operating System
\cd [DIR] change the current working directory
\setenv NAME [VALUE] set or unset environment variable
\timing [on|off] toggle timing of commands (currently off)
\! [COMMAND] execute command in shell or start interactive shell
Variables
\prompt [TEXT] NAME prompt user to set internal variable
\set [NAME [VALUE]] set internal variable, or list all if no parameters
\unset NAME unset (delete) internal variable
Large Objects
\lo_export LOBOID FILE
\lo_import FILE [COMMENT]
\lo_list
\lo_unlink LOBOID large object operations
Full encryption
\st send token
\send_token send token
\ct clear token
\clear_token clear token
常用的元命令:
--从本地文件导入小批量数据
\copy table_name from '/home/omm/data.csv';
\copy table_name from '/home/omm/data.csv' with(format 'csv',delimiter '|');
--导出小批量数据到本地文件
\copy table_name to '/home/omm/data.csv';
\copy table_name to '/home/omm/data.csv' with(format 'csv',delimiter '|');
--执行SQL脚本
\i script.sql
--将SQL查询结果写入文件
\o data.txt
References
【1】https://support.huaweicloud.com/dws_faq/dws_03_0073.html