openGauss数据库开发实战

978-7-115-64786-3
作者: 付强顾磊
译者:
编辑: 秦健

图书目录:

详情

openGauss数据库是华为公司在多年数据库领域研发经验基础上开发的数据库产品,为企业级场景需求而设计。本书由浅入深地介绍了openGauss数据库的开发过程,主要内容包括openGauss数据库的安装和配置、体系结构和主要运行机制、GUC参数、用户管理和审计、数据类型、表和索引、SQL基础、常用函数、过程化SQL程序设计,以及数据库的备份与恢复等。本书通过实战帮助读者深入理解openGauss数据库的运行机制。 本书结构清晰,案例丰富,适合数据库管理员、程序开发人员、系统架构师等阅读。

图书摘要

版权信息

书名:openGauss数据库开发实战

ISBN:978-7-115-64786-3

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    付 强  顾 磊

责任编辑 秦 健

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

openGauss数据库是华为公司在多年数据库领域研发经验基础上开发的数据库产品,为企业级场景需求而设计。本书由浅入深地介绍了openGauss数据库的开发过程,主要内容包括openGauss数据库的安装和配置、体系结构和主要运行机制、GUC参数、用户管理和审计、数据类型、表和索引、SQL基础、常用函数、过程化SQL程序设计,以及数据库的备份与恢复等。本书通过实战帮助读者深入理解openGauss数据库的运行机制。

本书结构清晰,案例丰富,适合数据库管理员、程序开发人员、系统架构师等阅读。

序  言

在数字化浪潮的推动下,数据库作为企业数据存储和处理的核心基础设施,其地位日益显著。在大数据、云计算和人工智能的背景下,数据库技术的创新与发展显得尤为关键。在这样的大环境下,华为公司推出了开源数据库——openGauss。作为一款高可用、高性能的开源数据库,openGauss数据库为众多企业和开发者提供了全新的数据存储和处理解决方案。

然而,技术的进步往往带来学习和实践中的一系列挑战。如何快速掌握openGauss数据库的核心技术、实现高效的数据库管理和开发,成为摆在众多开发者和数据库管理员面前的一大难题。为此,《openGauss数据库开发实战》一书应运而生。

这本书不仅仅是一本介绍openGauss数据库基础知识的图书,更是一份实战指南。这本书涵盖了从openGauss数据库的安装部署、基础操作到高级特性的应用,再到性能优化和安全管理等各个方面的知识。通过这本书,读者可以系统地掌握openGauss数据库的相关技术,及其在实际项目中的应用技巧。

这本书深入浅出地介绍了openGauss数据库的原理和应用方法。对于初学者,可以按照书中的步骤逐步学习,建立对openGauss数据库的全面认识;对于有一定经验的开发者,这本书提供了许多高级特性的深入剖析,有助于提升他们的技术水平和解决实际问题的能力。

此外,《openGauss数据库开发实战》按照“安装配置→基础知识→安全管理→进阶应用”的结构进行编排,可以帮助读者从基础知识入手,逐步深入学习,高效掌握openGauss数据库的核心技能。

作为一本全面介绍openGauss数据库开发实战的图书,《openGauss数据库开发实战》不仅为广大数据库爱好者提供了宝贵的学习资料和实践指导,而且将为推动openGauss数据库技术的普及和发展作出贡献。

最后,我衷心希望《openGauss数据库开发实战》能够为广大读者带来实实在在的帮助。同时,也期待更多的数据库爱好者能够加入openGauss社区的大家庭,共同推动国产数据库技术的进步与创新。

马永林

中国石化共享服务有限公司副总经理

前  言

为什么要写这本书

数据库是信息系统的核心。国内的数据库市场长期被国际产品所主导。可喜的是,经过国内广大技术人员的不懈努力,数据库技术的国产化已经取得了巨大的进步。

目前,国内数据库厂商主要采取如下两种技术路线。

自主研发。例如,达梦公司从成立以来就始终坚持自主研发的路径,并取得了令人瞩目的成绩。

基于开源数据库进行开发。这主要是基于PostgreSQL、MySQL等国际知名开源数据库进行深度定制。其中,PostgreSQL是世界知名的开源数据库,而MySQL则是目前在国内广受欢迎的开源数据库。

华为公司基于PostgreSQL 9.2.4版本开发了GaussDB数据库,并于2020年6月将其开源,命名为openGauss。经过多个版本的迭代,openGauss数据库不断完善。

与PostgreSQL相比,openGauss数据库在很多方面进行了改进和优化,这些措施极大地提高了数据库的性能。其中最引人注目的提升有如下3点。

采用流行的UNDO技术开发了USTORE存储引擎,有效解决了数据频繁更新导致的数据文件快速膨胀的问题。

新增了增量检查点功能,缓解了PostgreSQL全量刷新数据到磁盘时可能导致的系统性能波动,使系统运行更加平稳。

XID(事务ID)从32位增加到64位,从根本上解决了事务ID耗尽的问题。

此外,openGauss数据库采用木兰宽松许可证v2发布,任何人都可以免费下载和使用,由此诞生了很多基于openGauss数据库的优秀国产数据库软件,如云和恩墨的MogDB、神州通用公司的神通数据库管理系统(openGauss版)等。这些软件产品的出现极大地推动了国产数据库生态环境的健康发展。

本书旨在提供全面且深入的openGauss数据库开发指南,不仅阐述openGauss数据库的技术原理,还特别强调其与其他数据库技术的比较,以帮助读者更好地理解openGauss数据库的工作机制。

阅读本书的建议

尽管openGauss数据库是基于PostgreSQL开发的,但由于它经历了大量的修改和调整,因此在体系结构、参数设置和SQL语法等方面与PostgreSQL存在显著差异,对于有PostgreSQL使用经验的读者来说,注意它们之间的区别尤为重要。

鉴于Oracle数据库在国内的广泛应用和庞大的用户基础,为了减少学习成本,openGauss数据库在SQL语法上与Oracle数据库基本保持兼容。因此,熟悉Oracle数据库的读者在学习openGauss数据库时会更容易,但也要注意二者在某些细节上的不同。

致谢

最后,我要向openGauss社区的贡献者们致以崇高的敬意。

付强

资源与支持

资源获取

本书提供如下资源:

书中源码;

书中图片文件;

本书思维导图;

异步社区7天VIP会员。

要获得以上资源,您可以扫描右侧二维码,根据指引领取。

提交勘误信息

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,单击“发表勘误”,输入勘误信息,单击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发送给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

异步社区”是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域四十余年的发展与积淀。异步图书面向各行业的信息技术用户。

第1章 openGauss数据库的安装和配置

openGauss数据库分企业版、轻量版和极简版3种。企业版对安装环境的硬件配置要求较高,安装也较为复杂。轻量版和极简版对硬件环境要求不高,而且包含了企业版的大部分功能,安装过程也较为方便。极简版主要用于个人测试环境,不建议在生产环境中使用。所有版本的软件安装包均可以在openGauss数据库的官方网站下载。

为方便搭建学习环境,本书主要以openGauss 5.0.0轻量版单机模式为例进行讲解演示。其他版本的安装与配置,请参见官方文档。

1.1 安装

操作系统对数据库的运行影响非常大。openGauss数据库目前只支持在Linux操作系统中安装。推荐使用华为公司开发的Linux发行版openEuler操作系统。本书将以openEuler 22.03版本为学习环境。openEuler操作系统的操作方式与CentOS操作系统非常类似,使用过Linux操作系统的读者稍加学习就能熟练掌握。openEuler操作系统的社区发行版可以到官方网站免费下载。

本书的openEuler操作系统安装环境使用的是由Windows 10操作系统自带的虚拟化软件Hyper-V创建的虚拟机。虚拟机资源配置为:虚拟处理器4个,内存4GB,虚拟硬盘40GB。

在安装服务器的openEuler操作系统后,首先将openGauss安装包上传至服务器,接着就可以开始安装openGauss数据库了。具体的安装步骤如下。

1. 关闭SELinux

使用vi命令打开SELinux的配置文件:

vi /etc/selinux/config

修改SELinux的值为disabled,保存并退出修改。

重启系统后配置生效。

2. 创建openGauss用户组dbgroup和初始化用户omm

可以通过如下命令创建openGauss用户组dbgroup和初始化用户omm:

groupadd dbgroup
useradd -g dbgroup omm

3. 创建数据库安装目录

创建数据库安装目录,并将该目录的所有者和用户组修改为omm和dbgroup。本次安装计划在根目录下创建数据库目录/openGauss。具体命令如下:

mkdir /openGauss
chown -R omm:dbgroup openGauss

4.解压安装包

切换到omm用户,解压安装包到目录/home/omm。具体命令如下:

su - omm
tar -zxf openGauss-Lite-5.0.0-openEuler-x86_64.tar.gz -C /home/omm

5.开始安装

进入安装包目录,开始安装。具体命令如下:

cd /home/omm
echo P@ssw0rd | sh ./install.sh --mode single -D /openGauss/data -R /openGauss/install  --start

上述命令中主要参数的含义如下。

-D:表示数据库数据文件路径,不可与安装目录交叉。本次安装的数据库数据文件路径指定为/openGauss/data。

-R:表示数据库安装路径,不可与数据目录交叉。本次安装的数据库安装路径指定为/openGauss/install。

-start:表示安装完成后启动数据库。

数据库密码长度为8~32个字符,要求至少包含大写英文字母、小写英文字母、数字、特殊字符4种字符中的3种。为方便使用,这里使用常见的复杂密码“P@ssw0rd”。这个密码已经广为流传,在生产环境中请勿使用。

6.查看数据库状态

通过如下命令查看数据库状态:

[omm@bogon /]$ gs_ctl query -D /openGauss/data
[2023-06-06 22:51:51.432][6788][][gs_ctl]: gs_ctl query,datadir is /openGauss/data
 HA state:
        local_role                     : Normal
        static_connections             : 0
        db_state                       : Normal
        detail_information             : Normal
     Senders info:
No information
     Receiver info:
No information 

7.登录数据库

通过如下命令使用初始化用户omm登录数据库:

[omm@bogon /]$ gsql -d postgres
gsql ((openGauss-lite 5.0.0 build a07d57c3) compiled at 2023-03-29 03:49:47 commit 0 last mr  release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=#

说明

postgres为安装数据库过程中创建的默认数据库。初始化用户omm在服务器上登录默认数据库时不需要密码。gsql为openGauss数据库提供的连接数据库的命令行工具,类似Oracle数据库的SQL plus。关于gsql的使用方法,可以输入命令gsql --help查看。

1.2 配置

在安装openGauss数据库后即可在服务器端登录数据库。但如果需要远程连接openGauss数据库,则应先进行连接配置。具体的配置步骤如下。

1.修改配置文件pg_hba.conf

openGauss数据库通过配置文件pg_hba.conf对远程连接进行安全控制。pg_hba.conf配置文件默认存放在data路径下,而且默认只允许本机进行连接(127.0.0.1/32)。

首先通过如下命令打开配置文件:

vi /openGauss/data/pg_hba.conf

在pg_hba.conf中,记录的含义:TYPE表示连接方式,DATABASE表示连接数据库,USER表示连接用户,ADDRESS表示连接地址,METHOD表示加密方式。

然后在配置文件中添加如下记录:

host    all     all      0.0.0.0/0      sha256

上述记录的含义:all表示全部(数据库、用户),0.0.0.0/0表示所有地址均可连接。由于这样的设置并不安全,因此在生产环境中建议根据需要进行设置。

修改完毕后,通过如下命令重启数据库:

[omm@bogon /]$ gs_ctl restart -D /openGauss/data

2.修改默认监听地址

/openGauss/data目录下的配置文件postgresql.conf中的listen_addresses参数指定openGauss服务器使用哪些IP地址进行监听。一般来说,服务器可能存在多个网卡,每个网卡可以绑定多个IP地址,而该参数用于控制openGauss数据库到底绑定在哪个或者哪几个IP地址上。用户则可以通过客户端以该参数指定的IP地址来连接openGauss数据库。

openGauss数据库默认只监听本地主机127.0.0.1——这个IP地址是无法远程访问的。所以,为了远程连接数据库,需要修改配置文件postgresql.conf的监听地址参数listen_addresses。由于个人创建的虚拟机的IP经常会发生变化,因此可以设置listen_addresses='0.0.0.0',这样就无须每次启动虚拟机时都修改监听地址。

可以通过如下命令查看监听地址:

openGauss=# show listen_addresses;
listen_addresses
------------------
0.0.0.0
(1 row)

其中,0.0.0.0或星号“*”表示监听所有IP地址。由于配置监听所有IP地址的行为存在安全风险,因此在生产环境中不建议这样使用,推荐使用本机的有效IP地址。如果设置了多个IP,则需要用英文逗号“,”隔开。listen_addresses参数设置完成后需要重启数据库。

3.开放openGauss数据库服务端口

openGauss数据库的默认服务端口为5432和5433。

可以通过如下命令查看监听端口:

openGauss=# show port;
port
------
5432
(1 row)

如果不希望关闭防火墙,则应开放这两个端口,以便进行远程连接。具体命令如下:

[root@bogon /]# firewall-cmd --zone=public --add-port=5432/tcp -permanent
[root@bogon /]# firewall-cmd --zone=public --add-port=5433/tcp -permanent

重新加载防火墙的命令如下:

[root@bogon /]# firewall-cmd -reload

查看防火墙开放端口的命令如下:

[root@bogon /]# firewall-cmd --list-port
5432/tcp 5433/tcp

4.创建数据库和数据库用户

omm为安装openGauss数据库时创建的初始化用户,不能用于远程连接数据库。另外,omm拥有管理员权限,只能用于数据库管理。所以,使用数据库时还需要创建数据库用户。此外,数据库安装完成后默认创建postgres数据库。

在服务器上使用omm用户直接登录postgres数据库的命令如下:

[omm@bogon /]$ gsql -d postgres
gsql ((openGauss-lite 5.0.0 build a07d57c3) compiled at 2023-03-29 03:49:47 commit 0 last mr  release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=#

创建测试test数据库的命令如下:

openGauss=# create database test;
create database

注意

openGauss数据库默认兼容Oracle数据库(指定参数dbcompatibility='A')。不同兼容模式下的语法存在一定差异。本书以A兼容模式为主进行讲解。

如果想创建兼容MySQL的数据库,可以指定参数dbcompatibility='B'。例如下面的命令:

openGauss =# create database mysql dbcompatibility='B';
create database

登录test数据库的命令如下:

[omm@bogon /]$ gsql -d test
gsql ((openGauss-lite 5.0.0 build a07d57c3) compiled at 2023-03-29 03:49:47 commit 0 last mr  release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
test=#

在test数据库上创建数据库用户test的命令如下:

test=# create user test identified by 'P@ssw0rd';
create role

在创建用户后,openGauss数据库会在数据库中创建一个同名的模式(schema),具体命令如下:

test=# \dn
     List of schemas
      Name       | Owner
-----------------+----------
      blockchain | omm
          cstore | omm
           db4ai | omm
        dbe_perf | omm
  dbe_pldebugger | omm
 dbe_pldeveloper | omm
    dbe_sql_util | omm
     pkg_service | omm
          public | omm
        snapshot | omm
      sqladvisor | omm
            test | test
(12 rows)

至此就可以使用test用户远程连接openGauss数据库了。

test用户使用gsql连接本地的test数据库,具体命令如下:

[omm@bogon ~]$ gsql -d test -U test
Password for user test:

首先输入test用户的密码,然后按Enter键即可:

gsql ((openGauss-lite 5.0.0 build a07d57c3) compiled at 2023-03-29 03:49:47 commit 0 last mr  release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
test=> 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
test=>

1.3 远程连接工具

openGauss数据库提供图形化集成开发环境工具Data Studio,可以帮助数据库开发人员方便地构建应用程序,以及使用图形化界面创建和管理数据库对象。

Data Studio可以在社区网站下载。该软件无须安装,直接双击下载的可运行程序即可运行,但要求计算机中已安装Java 11或更高的版本。

在运行Data Studio的过程中有时会弹出“启动失败”错误提示框,如图1-1所示。

图1-1 “启动失败”错误提示框

这条报错信息并不准确。此时只须右击DataStudio.exe,在弹出的快捷菜单中选择“以管理员身份运行”命令即可。

此外,openGauss数据库兼容PostgreSQL协议,其他能连接PostgreSQL数据库的工具通常也可以直接连接openGauss数据库,例如pgAdmin4、Navicat for PostgreSQL等。但由于openGauss数据库默认使用SHA-256方式加密,而有的客户端工具只支持MD5加密方式,这时就需要对数据库连接的加密方式进行修改。修改步骤如下。

1.修改配置文件postgresql.conf

在openGauss/data下的配置文件postgresql.conf中修改参数password_encryption_type = 1。其中,1表示采用SHA-256+MD5两种方式加密;2表示采用SHA-256方式加密;0表示采用MD5方式加密。该参数的默认值为2。

2.修改配置文件pg_hba.conf

在opeGauss/data下的配置文件pg_hba.conf中增加连接客户端的地址,设置method(加密方式)为MD5。例如,如下命令允许所有用户以MD5加密方式连接所有数据库:

Host     all     all     0.0.0.0/0       md5

修改配置文件后,重启数据库。

3.修改用户密码

修改用户密码的命令如下:

test=> alter user test identified by '新密码' replace '旧密码';
NOTICE: The encrypted password contains MD5 ciphertext, which is not secure.
alter role

查看加密后的密码的命令如下:

openGauss=# select rolpassword from pg_authid where rolname='test'; rolpassword
-----------------------------------------------------------------
sha25684c21d01b1efaed9322913ba225923a997b57a017282041555225f9ffd923256cb5dc5c260060ad99f816a049d65fde9a202c9357a961d8ed29411cd429ede7b790e6f07a853c8337d0694ea29f105a390cfb73970bec6097db4451336f61c41md5e33497c8b195ca2a698b1b50333f2256ecdfecefade
(1 row)

可以看到,这种方法就是将密码采用SHA-256和MD5两种加密方式进行加密存储。此时就可以使用MD5加密方式连接openGauss数据库了。

注意,由于MD5加密方式已经落后,读者应尽量避免使用MD5加密方式。

1.4 卸载

openGauss数据库的轻量版可以直接使用卸载脚本uninstall.sh进行卸载。该脚本没有存放在安装路径下,可以在解压后的安装包中查找。

卸载步骤如下。

步骤1:以openGauss数据库初始化用户omm登录数据库服务器。

步骤2:进入安装包解压后的目录。

步骤3:执行uninstall.sh脚本。具体命令如下:

sh uninstall.sh

如果需要清理对应的安装目录和数据目录,则需要添加-delete-data参数,具体命令如下:

sh uninstall.sh --delete-data

1.5 数据库的启动与停止

gs_ctl是openGauss数据库提供的数据库服务控制工具,可以用来启动、停止数据库服务以及查询数据库的状态。执行gs_ctl命令前需要先切换到omm用户,启动命令如下:

gs_ctl start -D /openGauss/data

其中,参数-D表示指定数据目录的位置;参数start表示启动;参数stop表示停止;参数restart表示重启;参数status表示查看数据库的状态。

如果要实现openGauss数据库随服务器开机自启动,可以将启动脚本配置成后台服务。具体步骤如下。

1.创建文件openGauss.service

在目录/usr/lib/systemd/system下创建文件openGauss.service,文件内容如下:

[Unit]
Description=openGauss5.0.0
Documentation=openGauss Server
After=syslog.target 
After=network.target
[Service]
Type=forking
User=omm
Group=dbgroup
Environment=GAUSSDATA=/openGauss/data
Environment=GAUSSHOME=/openGauss/install
Environment=LD_LIBRARY_PATH=/openGauss/install/lib    
ExecStart=/openGauss/install/bin/gs_ctl start -D /openGauss/data
ExecReload=/openGauss/install/bin/gs_ctl restart -D /openGauss/data
ExecStop=/openGauss/install/bin/gs_ctl stop -D /openGauss/data
KillMode=mixed    
KillSignal=SIGINT    
TimeoutSec=0
[Install]
WantedBy=multi-user.target

注意

文件中的路径均为绝对路径,环境变量要与操作系统用户omm的环境变量一致。

2.设置openGauss数据库服务开机自启动

设置openGauss数据库服务开机自启动的命令如下:

systemctl enable openGauss.service

3.启动openGauss数据库服务

启动openGauss数据库服务的命令如下:

systemctl start openGauss

4.重新启动openGauss数据库服务

重新启动openGauss数据库服务的命令如下:

systemctl restart openGauss

5.停止openGauss数据库服务

停止openGauss数据库服务的命令如下:

systemctl stop openGauss

设置openGauss数据库开机自启动的目的是有效应对因意外事故导致的服务器重启、提高系统的健壮性、减轻运维工作量以及降低事故对业务的影响。

在生产环境中,推荐将数据库服务设置成开机自启动。

1.6 gsql

gsql是openGauss数据库提供的命令行工具,可以用来连接服务器,以便进行操作和维护,同时该工具还提供若干高级特性,便于用户使用。

在gsql的使用过程中,参数-d用于指定目标数据库的名称;参数-U用于指定数据库的用户名;参数-h用于指定主机名或IP地址(若采用本机登录方式,则可以省略此参数);参数-p用于指定端口(若使用默认端口,则可以省略此参数)。

连接本机数据库的命令如下:

gsql.-d dbname -U username

获取帮助的命令如下:

openGauss=# \h

退出数据库的命令如下:

openGauss=# \q

在默认情况下,当客户端连接数据库后处于空闲状态的时间超过参数session_timeout的值(默认值为10min)时,会自动断开连接。可以在配置文件postgresql.conf中将session_timeout设置为0(0表示禁用此参数)。

通过gsql --help命令可以获取全部参数及其说明:

[omm@localhost ~]$ gsql --help

1.7 元命令

元命令是在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=> \?

相关图书

数据库简史
数据库简史
数据会说话:活用数据表达、说服与决策
数据会说话:活用数据表达、说服与决策
数据浪潮
数据浪潮
数据结构 Python语言描述 第2版
数据结构 Python语言描述 第2版
管家婆软件实战操作教程(辉煌版)
管家婆软件实战操作教程(辉煌版)
全国计算机等级考试教程 二级公共基础知识
全国计算机等级考试教程 二级公共基础知识

相关文章

相关课程