简介
本实验指导书主要目的是为了让读者熟悉并掌握openGauss数据库的基本操作,并通过案例强化学习。
内容描述
本实验指导书先介绍创建管理用户、表及其它数据库对象等openGauss数据库的基本操作,再从学校数据模型的案例入手,进行模拟演练。
前置条件
openGauss数据库开发需要掌握openGauss数据库的基本操作和SQL语法,openGauss数据库支持SQL2003标准语法,数据库基本操作参见附录一。
实验环境说明
- 组网说明
本实验环境为华为云ECS服务器和openGauss数据库。 - 设备介绍
为了满足本实验需要,建议实验环境采用以下配置:
设备名称、型号与版本的对应关系如下:
设备明细表
实验概览

1 数据库开发实验
1.1 创建和管理用户、表空间和数据库
1.1.1 创建和管理用户
1.1.1.1 创建用户
通过CREATE USER创建的用户,默认具有LOGIN权限;
通过CREATE USER创建用户的同时系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA;其他数据库中,则不自动创建同名的SCHEMA;用户可使用CREATE SCHEMA命令,分别在其他数据库中,为该用户创建同名SCHEMA。
系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。
创建用户jim,登录密码为Bigdata@123。
同样的下面语句也可以创建用户。
如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。
1.1.1.2 管理用户
将用户jim的登录密码由Bigdata@123修改为Abcd@123。
为用户jim追加CREATEROLE权限。
将enable_seqscan的值设置为on,设置成功后,在下一会话中生效。
锁定jim帐户。
删除用户。
1.1.2 创建和管理表空间
1.1.2.1 创建表空间
步骤 1 执行如下命令创建用户jack。
当结果显示为如下信息,则表示创建成功。
步骤 2 执行如下命令创建表空间。
当结果显示为如下信息,则表示创建成功。
其中“fastspace”为新创建的表空间,“数据库节点数据目录/pg_location/tablespace/tablespace_1”是用户拥有读写权限的空目录,如 /gaussdb/data/db1/pg_location/tablespace/tablespace_1 。
步骤 3 数据库系统管理员执行如下命令将“fastspace”表空间的访问权限赋予数据用户jack。
当结果显示为如下信息,则表示赋予成功。
1.1.2.2 管理表空间
1.1.2.2.1 查询表空间
方式1:检查pg_tablespace系统表。如下命令可查到系统和用户定义的全部表空间。
方式2:使用gsql程序的元命令查询表空间。
1.1.2.2.2 查询表空间使用率
步骤 1 查询表空间的当前使用情况。
返回如下信息:
其中4096表示表空间的大小,单位为字节。
步骤 2 计算表空间使用率。
表空间使用率=PG_TABLESPACE_SIZE/表空间所在目录的磁盘大小。
1.1.2.2.3 修改表空间
执行如下命令对表空间fastspace重命名为fspace。
1.1.2.2.4 删除表空间
执行如下命令删除用户jack。
执行如下命令删除表空间fspace。
说明:用户必须是表空间的owner或者系统管理员才能删除表空间。
1.1.3 创建和管理数据库
1.1.3.1 创建数据库
步骤 1 使用如下命令创建一个新的表空间tpcds_local。
步骤 2 使用如下命令创建一个新的数据库db_tpcc。
1.1.3.2 管理数据库
1.1.3.2.1 查看数据库
使用\l元命令查看数据库系统的数据库列表(l表示list)。
使用如下命令通过系统表pg_database查询数据库列表。
1.1.3.2.2 修改数据库
用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。
使用以下命令为数据库设置默认的模式搜索路径。
使用如下命令为数据库重新命名。
1.1.3.2.3 删除数据库
用户可以使用DROP DATABASE命令删除数据库。此命令删除了数据库中的系统目录,并且删除了带有数据的磁盘上的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除操作会失败。删除数据库时请先连接到其他的数据库。
使用如下命令删除数据库:
1.2 创建和管理表
1.2.1 创建表
表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过使用模式在同一个数据库中创建相同名称的表。
当结果显示为如下信息,则表示创建成功。
其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四字段名称的类型。
1.2.2 向表中插入数据
1.2.2.1 向表customer_t1中插入一行数据
数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。
如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:
或
1.2.2.2 向表中插入多行数据
命令如下:
如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。
1.2.2.3 从指定表插入数据到当前表
如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令。
插入数据:
删除备份表:
1.2.3 更新表中数据
修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。
需要将表customer_t1中c_customer_sk为9527的字段重新定义为9876:
这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。
比如,把所有c_customer_sk的值增加100:
用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如:
1.2.4 查看数据
使用系统表pg_tables查询数据库所有表的信息。
使用gsql的\d+命令查询表的结构。
执行如下命令查询表customer_t1的数据量。
执行如下命令只查询字段c_customer_sk的数据。
执行如下命令过滤字段c_customer_sk的重复数据。
执行如下命令查询字段c_customer_sk为3869的所有数据。
执行如下命令按照字段c_customer_sk进行排序。
执行如下命令查询ROWNUM伪列。
执行如下命令使用别名进行查询(CNB、CSK、CID为列别名,T 为表别名)。
1.2.5 删除表中数据
在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。
使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录:
如果执行如下命令之一,会删除表中所有的行。
或:
全表删除的场景下,建议使用truncate,不建议使用delete。
删除创建的表:
简介
本实验指导书主要目的是为了让读者熟悉并掌握openGauss数据库的基本操作,并通过案例强化学习。
内容描述
本实验指导书先介绍创建管理用户、表及其它数据库对象等openGauss数据库的基本操作,再从学校数据模型的案例入手,进行模拟演练。
前置条件
openGauss数据库开发需要掌握openGauss数据库的基本操作和SQL语法,openGauss数据库支持SQL2003标准语法,数据库基本操作参见附录一。
实验环境说明
本实验环境为华为云ECS服务器和openGauss数据库。
为了满足本实验需要,建议实验环境采用以下配置:
设备名称、型号与版本的对应关系如下:
设备明细表
实验概览
1 数据库开发实验
1.1 创建和管理用户、表空间和数据库
1.1.1 创建和管理用户
1.1.1.1 创建用户
通过CREATE USER创建的用户,默认具有LOGIN权限;
通过CREATE USER创建用户的同时系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA;其他数据库中,则不自动创建同名的SCHEMA;用户可使用CREATE SCHEMA命令,分别在其他数据库中,为该用户创建同名SCHEMA。
系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。
创建用户jim,登录密码为Bigdata@123。
同样的下面语句也可以创建用户。
如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。
1.1.1.2 管理用户
将用户jim的登录密码由Bigdata@123修改为Abcd@123。
为用户jim追加CREATEROLE权限。
将enable_seqscan的值设置为on,设置成功后,在下一会话中生效。
锁定jim帐户。
删除用户。
1.1.2 创建和管理表空间
1.1.2.1 创建表空间
步骤 1 执行如下命令创建用户jack。
当结果显示为如下信息,则表示创建成功。
步骤 2 执行如下命令创建表空间。
当结果显示为如下信息,则表示创建成功。
其中“fastspace”为新创建的表空间,“数据库节点数据目录/pg_location/tablespace/tablespace_1”是用户拥有读写权限的空目录,如 /gaussdb/data/db1/pg_location/tablespace/tablespace_1 。
步骤 3 数据库系统管理员执行如下命令将“fastspace”表空间的访问权限赋予数据用户jack。
当结果显示为如下信息,则表示赋予成功。
1.1.2.2 管理表空间
1.1.2.2.1 查询表空间
方式1:检查pg_tablespace系统表。如下命令可查到系统和用户定义的全部表空间。
方式2:使用gsql程序的元命令查询表空间。
postgres=# \db List of tablespaces Name | Owner | Location ------------+-------+------------------------- fastspace | omm | tablespace/tablespace_1 pg_default | omm | pg_global | omm | (3 rows)1.1.2.2.2 查询表空间使用率
步骤 1 查询表空间的当前使用情况。
postgres=# SELECT PG_TABLESPACE_SIZE('fastspace');返回如下信息:
pg_tablespace_size -------------------- 4096 (1 row)其中4096表示表空间的大小,单位为字节。
步骤 2 计算表空间使用率。
表空间使用率=PG_TABLESPACE_SIZE/表空间所在目录的磁盘大小。
1.1.2.2.3 修改表空间
执行如下命令对表空间fastspace重命名为fspace。
1.1.2.2.4 删除表空间
执行如下命令删除用户jack。
执行如下命令删除表空间fspace。
说明:用户必须是表空间的owner或者系统管理员才能删除表空间。
1.1.3 创建和管理数据库
1.1.3.1 创建数据库
步骤 1 使用如下命令创建一个新的表空间tpcds_local。
步骤 2 使用如下命令创建一个新的数据库db_tpcc。
1.1.3.2 管理数据库
1.1.3.2.1 查看数据库
使用\l元命令查看数据库系统的数据库列表(l表示list)。
postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-------+-----------+---------+-------+------------------- db_tpcc | omm | SQL_ASCII | C | C | postgres | omm | SQL_ASCII | C | C | template0 | omm | SQL_ASCII | C | C | =c/omm + | | | | | omm=CTc/omm template1 | omm | SQL_ASCII | C | C | =c/omm + | | | | | omm=CTc/omm (4 rows)使用如下命令通过系统表pg_database查询数据库列表。
1.1.3.2.2 修改数据库
用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。
使用以下命令为数据库设置默认的模式搜索路径。
使用如下命令为数据库重新命名。
1.1.3.2.3 删除数据库
用户可以使用DROP DATABASE命令删除数据库。此命令删除了数据库中的系统目录,并且删除了带有数据的磁盘上的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除操作会失败。删除数据库时请先连接到其他的数据库。
使用如下命令删除数据库:
1.2 创建和管理表
1.2.1 创建表
表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过使用模式在同一个数据库中创建相同名称的表。
执行如下命令创建表。 postgres=# CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) );当结果显示为如下信息,则表示创建成功。
其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四字段名称的类型。
1.2.2 向表中插入数据
1.2.2.1 向表customer_t1中插入一行数据
数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。
如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:
或
1.2.2.2 向表中插入多行数据
命令如下:
postgres=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (6885, 'maps', 'Joes'), (4321, 'tpcds', 'Lily'), (9527, 'world', 'James');如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。
1.2.2.3 从指定表插入数据到当前表
如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令。
postgres=# CREATE TABLE customer_t2 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) );插入数据:
删除备份表:
1.2.3 更新表中数据
修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。
需要将表customer_t1中c_customer_sk为9527的字段重新定义为9876:
这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。
比如,把所有c_customer_sk的值增加100:
用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如:
1.2.4 查看数据
使用系统表pg_tables查询数据库所有表的信息。
使用gsql的\d+命令查询表的结构。
执行如下命令查询表customer_t1的数据量。
执行如下命令只查询字段c_customer_sk的数据。
执行如下命令过滤字段c_customer_sk的重复数据。
执行如下命令查询字段c_customer_sk为3869的所有数据。
执行如下命令按照字段c_customer_sk进行排序。
执行如下命令查询ROWNUM伪列。
执行如下命令使用别名进行查询(CNB、CSK、CID为列别名,T 为表别名)。
1.2.5 删除表中数据
在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。
使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录:
如果执行如下命令之一,会删除表中所有的行。
或:
全表删除的场景下,建议使用truncate,不建议使用delete。
删除创建的表: