openGauss数据库的使用
Posted 下雨天的太阳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openGauss数据库的使用相关的知识,希望对你有一定的参考价值。
目录
前言
openGauss数据库系统架构
1. 启动/停止/重启数据库
(1)极简版启动/停止/重启命令
启动数据库实例
gs_ctl start -D $GAUSSHOME/data/single_node -Z single_node
停止数据库实例
gs_ctl stop -D $GAUSSHOME/data/single_node -Z single_node
重启数据库实例
gs_ctl restart -D $GAUSSHOME/data/single_node -Z single_node
(2)企业版启动/停止/重启命令
启动数据库实例
gs_om -t start
或者是
gs_ctl start -D /opt/huawei/install/data/dn
停止数据库实例
gs_om -t stop
或者是
gs_ctl stop -D /opt/huawei/install/data/dn
重启数据库实例
gs_om -t restart
或者是
gs_om -t stop && gs_om -t start
查看数据库实例状态
gs_om -t status
或者是
gs_ctl status -D /opt/huawei/install/data/dn
2. 登录数据库
以初始化安装用户登录数据库,不需要输入密码
gsql -d postgres -p 5432
以初始化安装用户登录数据库,不需要输入密码,并且进入之后可编辑操作语句
gsql -d postgres -p 5432 -r
以创建的用户(jamy)登录数据库,需要输入密码
gsql -d test -p 5432 -U jamy
以创建的用户(jamy)登录数据库,需要输入密码,并且进入之后可编辑操作语句
gsql -d test -p 5432 -U jamy -r
直接非交互模式登录数据库并执行sql,执行完sql立即退出
gsql -d test -U jamy -W "Sjm214325*" -r -c "insert into song.tb_user values(6, 'andy',32);"
gsql -d test -U jamy -W "Sjm214325*" -r -c "select * from song.tb_user;"
(1)登录数据库时的基本连接参数
(2)登录数据库时的常用连接参数
(3)登录数据库时的其他连接参数
3. 数据库元命令
(1)登录之后可以输入下面这些命令操作数据库:
(2)操作案例
查询所有数据库的信息,包括数据库的名称,属主,字符集编码以及使用权限
\\l
查询出所有可用的表空间
\\db
列出所有的数据库角色
\\du
列出所有的索引
\\di
列出所有的序列
\\ds
列出具体表的详细信息
\\d tableName
列出所有的函数
\\df
待更新
显示每条sql语句的执行时间
\\timing sql
待更新
从文件FILE中读取内容,并将其当作输入,执行查询
\\i file.sql
待更新
查看gsql 的帮助命令(元命令,其实就是一些查询sql的别名,这样执行非常方便!!!)
\\?
查询当前连接的数据库的信息
\\conninfo
列出当前search_path中模式下所有的表、视图和序列
\\d
列出所有的模式(名称空间)
\\dn
列出数据库中的表
\\dt
列出所有的视图
\\dv
待更新
列出权限信息
\\dp
列出索引的详细信息
\\d Indexname
待更新
列出函数的定义
\\sf
待更新
把字符串写到标准输出
\\echo [string]
待更新
执行操作系统命令
\\! os_command
待更新
查看SQL语法帮助
\\h
更换连接的数据库和用户
\\c 数据库名
例如:\\c test
退出gsql
\\q
4. 数据库常用操作语句
(1)数据库操作
创建数据库示例1:
create database mydb;
创建数据库示例2:
create database mydb with owner=jack encoding='UTF-8' LC_COLLATE='zh_CN.UTF-8' LC_CTYPE='zh_CN.UTF-8'
DBCOMPATIBILITY='A' TABLESPACE=tbs1 CONNECTION LIMIT=1000;
修改数据库名称
alter database mydb rename to mydb2;
修改数据库所有者
alter database mydb2 owner to user1;
修改数据库的表空间
alter database mydb2 set tablespace tbs1;
删除数据库
drop database mydb2;
查询数据库
select * from pg_database;
(2)表空间操作
创建表空间示例1:
create tablespace tbs2 relative location 'tablespace/tbs2' maxsize '100G';
创建表空间示例2:
create tablespace tbs3 owner jack location '/gauss/data/tbs3';
查询表空间
select * from pg_tablespace_location((select oid from pg_tablespace where spcname='tbs2'));
select oid,* from pg_tablespace;
修改表空间名称
alter tablespace tbs3 rename to tbs4;
修改表空间所有者
alter tablespace tbs4 owner to jack;
修改表空间大小
alter tablespace tbs4 resize maxsize unlimited;
重置表空间分页
alter tablespace tbs4 reset (random_page_cost);
删除表空间(删除表空间的前提条件是该表空间内容为空)
drop tablespace tbs4;
(3)表模式操作
这里模式,它是针对数据库而言的,如果把数据库看做成一个班级,那么模式就相当于这个班级里面的小组,大家都知道,一个班级里面会有多个小组,所以同理一个数据库里面也会有多个模式,同名的模式只能有一个,一个数据库里面的表可以分布在不同的模式里面,但是一个表只能同时存在于一个模式里面,通俗来说一个班级里面的学生,他只能在一个组里面,不可能同时横跨两个组。我们在查询一个表时,它会按照模式的搜索顺序来查询,第一个模式里面如果没找到,会接着到第二个模式里面找,依次类推。
创建模式示例1:
create schema sch1;
创建模式示例2:
create schema sch2 authorization jack;
修改模式名称
alter schema sch2 rename to sch3;
修改模式所有者
alter schema sch1 owner to jack;
删除模式
drop schema sch3;
修改模式查询的范围(当前会话有效,临时有效)
set search_path to public,song;
修改数据库里面的模式的访问顺序(搜索路径)
alter database 数据库名 set search_path=模式1,模式2,模式3...;
例如:
alter database test set search_path=ming,jamysong,song;
查询表的时候会按照我们设置的顺序去找到表,如果所有模式都查询了一遍,还没找到这个表,那么说名这个表不存在或者不在当前这个数据库。
注意:
a. 不建议创建以PG_为前缀的schema名,该类的schema是为数据库系统预留的
b. 搜索路径(search_path)始终以pg_temp和pg_catalog这两个schema作为搜索路径顺序中的前两位
(4)创建表
创建表示例1:
create table emp1 as select * from emp where sal<2000;
创建表示例2:
create table emp2 as table emp;
创建表示例3:
CREATE TABLE IF NOT EXISTS warehouse_t1 -- 表不存在时才创建,使得当该表存在时该建表语句不会报错
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) UNIQUE DEFERRABLE, -- 事务结束时检查字段是否有重复
W_STREET_NAME VARCHAR(60) DICTIONARY, -- 压缩算法Dictionary
W_SUITE_NUMBER CHAR(10) ,
W_STATE CHAR(2) DEFAULT 'GA', -- 缺省值为'GA'
W_GMT_OFFSET DECIMAL(5,2)
) TABLESPACE tbs1;
创建表示例4:
CREATE UNLOGGED TABLE warehouse_t2 -- 不写入预写日志
(
W_WAREHOUSE_SK INTEGER PRIMARY KEY, -- 主键约束
W_WAREHOUSE_ID CHAR(16) NOT NULL, -- 非空约束
W_WAREHOUSE_NAME VARCHAR(20) UNIQUE, -- 唯一键约束
W_GMT_OFFSET DECIMAL(5,2) ,
CONSTRAINT W_CONSTR_KEY2 CHECK(W_WAREHOUSE_SK > 0 AND W_WAREHOUSE_NAME IS NOT NULL) -- 检查列约束
) WITH(fillfactor=70);
创建表示例5(创建临时表):
CREATE TEMPORARY TABLE warehouse_t3 -- 创建临时表(临时表不能指定schema)
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
PRIMARY KEY(W_WAREHOUSE_SK) -- 主键约束
) ON COMMIT DELETE ROWS;
创建表示例6:
CREATE TABLE warehouse_t4
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) UNIQUE USING INDEX TABLESPACE tbs1, -- 指定该列索引存储的表空间
CONSTRAINT W_CSTR_KEY1 PRIMARY KEY(W_WAREHOUSE_SK, W_WAREHOUSE_ID) -- 复合主键约束W_CSTR_KEY1
) COMPRESS;
创建表示例7:
CREATE TABLE warehouse_t5
(
W_WAREHOUSE_SK INTEGER PRIMARY KEY CHECK (W_WAREHOUSE_SK > 0), -- 检查列约束
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) CHECK (W_WAREHOUSE_NAME IS NOT NULL), -- 检查列约束
W_GMT_OFFSET DECIMAL(5,2) REFERENCES DEPT(DEPTNO) -- 外键约束
);
创建表示例8:
CREATE TABLE warehouse_t6
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) ,
W_GMT_OFFSET DECIMAL(5,2),
PARTIAL CLUSTER KEY(W_WAREHOUSE_SK, W_WAREHOUSE_ID) -- 局部聚簇存储
) WITH (ORIENTATION = COLUMN, COMPRESSION=HIGH); -- 带有压缩特性的列存储表(列存储表不支持约束)
修改列属性
alter table emp1 modify sal number(10,2);
重命名列
alter table emp1 rename column ename to name;
(5)创建约束
添加主键约束
alter table emp1 add primary key (empno);
添加check约束
alter table emp1 add constraint chk_dept check (deptno is not null);
添加外键约束
alter table emp1 add constraint fk_dept foreign key (deptno) references dept(deptno);
修改列约束条件
alter table emp1 modify sal constraint chk_sal not null;
重命名约束
alter table emp1 rename constraint chk_dept to chk_deptno;
设置所属schema
alter table emp1 set schema jack;
重命名表
alter table jack.emp1 rename to emp2;
行级访问控制的目的是控制表中行级数据可见性,行访问控制策略针对特定数据库用户、特定SQL操作生效。
create user alice password 'gauss@123';
create table all_data(id int, role varchar(100), data varchar(100));
insert into all_data values(1, 'alice', 'alice data');
insert into all_data values(2, 'bob', 'bob data' );
insert into all_data values(3, 'peter', 'peter data');
grant select on all_data to alice;
alter table all_data enable row level security;
create row level security policy all_data_rls on all_data using(role = current_user);
\\c - alice
select * from all_data; -- 仅能看到指定用户的数据,系统管理员不受行访问控制影响
explain select * from public.all_data;
(6)创建索引
创建唯一索引
create unique index t1_fn_idx on t1(relfilenode);
创建复合索引
create index t1_owner_tbs_idx on t1(relowner,reltablespace);
创建部分索引
create index t1_lttbs_idx on t1(reltablespace) where reltablespace<20;
创建函数索引
create index t1_upname_idx on t1(upper(relname));
创建分区表的本地索引
create index pt1_id_idx on pt1(id) local;
创建分区表的全局索引
create index pt1_score_idx on pt1(score) global tablespace tbs1;
修改索引
alter index t1_fn_idx rename to t1_fn_idx2;
alter index t1_fn_idx2 set tablespace tbs2;
alter index t1_lttbs_idx unusable;
alter index t1_lttbs_idx rebuild;
修改分区索引
alter index pt1_id_idx rebuild partition p1_id_idx;
alter index pt1_id_idx modify partition p1_id_idx unusable;
alter index pt1_id_idx rename partition p1_id_idx to p1_id_idx2;
alter index pt1_id_idx move partition p1_id_idx2 tablespace tbs1;
删除索引
drop index t1_lttbs_idx;
(7)创建序列
创建序列
create sequence seq01;
create sequence seq02 increment by 1 minvalue 1 maxvalue 99999 cache 1 nocycle;
查看序列
\\d t2_id_seq
select * from t2_id_seq;
使用序列
select nextval('seq01'); --递增序列并返回新值
select seq01.nextval;
select currval('seq01'); --最近一次nextval返回的值
select seq01.currval;
select lastval(); --最近一次nextval返回的值
select setval('seq01',1); --设置序列的当前数值
修改序列属性
alter sequence seq01 maxvalue 99999;
alter sequence seq01 owner to jack;
删除序列
drop sequence seq01;
drop sequence seq02 cascade;
(8)查询表数据
待更新
(9)插入表数据
待更新
(10)修改表数据
待更新
(11)删除表数据
待更新
5. 数据库权限管理
(1)用户
创建用户示例1(普通用户):
create user jamy2 identified by 'Abc123456*';
授予用户所有权限(将sysadmin权限赋予指定的角色或者用户)
grant all privileges to jamy2;
将角色或用户的权限授权给其他角色或用户
grant jamy to jamy5 with admin option;
创建用户示例2(直接创建带有管理员权限的用户):
create user jamy3 with sysadmin password 'Abc123456*';
创建用户示例3(普通用户)
create user jamy4 identified by 'Abc123456*';
修改用户权限
alter user jamy4 with CREATEDB;
创建用户示例4(直接创建带有创建数据库权限的用户)
create role jamy5 with CREATEDB password "Abc123456*";
创建用户示例5(创建用户带有限制条件:有效期、连接数):
create user jamy6 with VALID BEGIN '2022-11-30 23:59:59' VALID UNTIL '2023-12-01 00:00:00' identified
by 'Abc123456*' CONNECTION LIMIT 100;
修改用户权限,拥有创建角色的权限
alter user jamy4 with CREATEROLE;
删除用户
drop user jamy4;
(2)授权
数据库授权
grant all privileges on database mydb to jamy3;
表空间授权
grant all privileges on tablespace tbs1 to jamy3;
schema授权
grant usage on schema sch1 to jamy3;
函数授权
grant execute on function func_add_sql(int,int) to jamy3;
grant execute on function proc_emp(var_empno int, OUT v_name varchar, OUT v_job varchar) to jamy3;
表授权
grant select (empno,ename,sal),update (comm) on emp TO jamy3;
grant select,insert,update,delete on all tables in schema sch1 to jamy3;
grant all privileges on emp to jamy3 with grant option;
授权jack角色给jamy1用户,且jamy1用户可授权其他用户
grant jack to jamy1 with admin option;
将管理员权限授予给用户jamy
grant all privileges to jamy;
权限回收
revoke jack from jamy1;
6. 图形化客户端
(1)Data Studio客户端
Data Studio是华为openGauss数据库连接的官方图形化客户端,登录只需要做如下两步步操作即可:
(1)编辑postgresql.conf文件
将listen_addresses这一行修改成:
listen_addresses = '*'
(2)编辑pg_hba.conf文件
在# IPv4 local connections这一行下面添加如下内容
host all all 0.0.0.0/0 sha256
注意:完成以上两步需要重启数据库
(2)navicat客户端
要想使用navicat登录openGauss数据库,需要做如下三步操作
(1)编辑postgresql.conf文件
将listen_addresses这一行修改成:
listen_addresses = '*'
将password_encryption_type这一行修改成:
password_encryption_type = 1
(2)编辑pg_hba.conf文件
在# IPv4 local connections这一行下面添加如下内容
host all all 0.0.0.0/0 md5
注意:以上两步步完成后重启数据库
gs_om -t restart
(3)修改用户登录密码
因为加密方式改变了,所以需要重新设置密码(采用了新的加密方式)
修改密码,新密码不能和原密码一样
alter user jamysong identified by 'Sjm214325*';
以上三步完成后就可以使用navicat登录openGauss数据库了
openGauss数据导入导出
1、数据导入导出 - INSERT
⚫ 用户可以通过以下方式执行INSERT语句直接向openGauss数据库写入数据:
使用openGauss数据库提供的客户端工具向openGauss数据库写入数据。
通过JDBC/ODBC驱动连接数据库执行INSERT语句向openGauss数据库写入数据。
⚫ openGauss数据库支持完整的数据库事务级别的增删改操作。INSERT是最简单的一种数 据写入方式,这种方式适合数据写入量不大,并发度不高的场景。
2、数据导入导出 – COPY FROM STDIN
⚫ 用户可以使用以下方式通过COPY FROM STDIN语句直接向openGauss写入数据。
通过键盘输入向openGauss写入数据。通过COPY命令实现在表和文件之间拷贝数据。COPY FROM表示从一个文件拷贝数据到一个表,COPY TO表示把一个表的数据拷贝到一个文件。
◼ COPY FROM/TO适合低并发,本地小数据量导入导出。
通过JDBC驱动的CopyManager接口从文件或者数据库向openGauss写入数据。此方法支持 COPY语法中copy option的所有参数。
◼ CopyManager是 openGauss JDBC驱动中提供的一个API接口类,用于批量向openGauss中导入数据。
◼ CopyManager类位于org.postgresql.copy Package中,继承自java.lang.Object类。
⚫ COPY适用场景:
小数据量表以文本数据作为来源导入;
小数量表的导出;
查询结果集导出。
⚫ COPY使用方法:
文本数据导入;
copy t1 from '/data/input/t1.txt' delimiter '^';
表数据导出;
copy t1 to '/data/input/t1_output.txt' delimiter '^';
查询结果集导出;
copy (select * from t1 where a2=1) to '/data/input/t1_output.txt' delimiter '^';
3、数据导入导出 – gsql
⚫ openGauss的gsql工具提供了元命令\\copy进行数据导入导出。
⚫ \\copy元命令语法
⚫ 说明:
在任何gsql客户端登录数据库成功后,可以使用该命令进行数据的导入/导出。但是与SQL的 COPY命令不同,该命令读取/写入的文件是本地文件,而非数据库服务器端文件;因此要操作 的文件的可访问性、权限等,都是受限于本地用户的权限。
4、数据导入导出 – gs_dump
⚫ openGauss提供的gs_dump和gs_dumpall工具,能够帮助用户导出需要的数据库对象或 其相关信息。通过导入工具将导出的数据信息导入至需要的数据库,可以完成数据库信 息的迁移。
gs_dump支持导出单个数据库或其内的对象,而gs_dumpall支持导出openGauss中所有 数据库或各库的公共全局对象。
gs_dump 参数说明:
5、导出数据库
⚫ openGauss支持使用gs_dump工具导出某个数据库级的内容,包含数据库的数据和所有 对象定义。可根据需要自定义导出如下信息:
导出数据库全量信息,包含数据和所有对象定义。使用导出的全量信息可以创建一个与当前库 相同的数据库,且库中数据也与当前库相同。
仅导出所有对象定义,包括:库定义、函数定义、模式定义、表定义、索引定义和存储过程定 义等。使用导出的对象定义,可以快速创建一个相同的数据库,但是库中并无原数据库的数据。
仅导出数据,不包含所有对象定义。
⚫ 示例:使用gs_dump导出postgres数据库。
gs_dump -U jack -f /home/omm/backup/postgres_backup.tar -p 8000 postgres -F t
6、导出模式
⚫ openGauss目前支持使用gs_dump工具导出模式级的内容,包含模式的数据和定义。
⚫ 用户可通过灵活的自定义方式导出模式内容,不仅支持选定一个模式或多个模式的导出, 还支持排除一个模式或者多个模式的导出。可根据需要自定义导出如下信息:
导出模式全量信息,包含数据和对象定义。
仅导出数据,即模式包含表中的数据,不包含对象定义。
仅导出模式对象定义,包括:表定义、存储过程定义和索引定义等。
⚫ 示例:使用gs_dump同时导出hr和public模式。
gs_dump -U jack -f /home/omm/backup/MPPDB_schema_backup -p 8000 human_resource -n hr -n public -F d
7、导出表
⚫ openGauss支持使用gs_dump工具导出表级的内容,包含表定义和表数据。视图、序列 和外表属于特殊的表。
⚫ 用户可通过灵活的自定义方式导出表内容,不仅支持选定一个表或多个表的导出,还支 持排除一个表或者多个表的导出。可根据需要自定义导出如下信息:
导出表全量信息,包含表数据和表定义。
仅导出数据,不包含表定义。
仅导出表定义。
⚫ 示例:使用gs_dump同时导出指定表hr.staffs和hr.employments。
gs_dump -U jack -f /home/omm/backup/MPPDB_table_backup -p 8000 human_resource -t hr.staffs -t hr.employments -F d
8、导出所有数据库
⚫ openGauss支持使用gs_dumpall工具导出所有数据库的全量信息,包含openGauss中每个数据库 信息和公共的全局对象信息。可根据需要自定义导出如下信息:
导出所有数据库全量信息,包含openGauss中每个数据库信息和公共的全局对象信息(包含角色和表空 间信息)。使用导出的全量信息可以创建与当前主机相同的一个主机环境,拥有相同数据库和公共全局 对象,且库中数据也与当前各库相同。
仅导出数据,即导出每个数据库中的数据,且不包含所有对象定义和公共的全局对象信息。
仅导出所有对象定义,包括:表空间、库定义、函数定义、模式定义、表定义、索引定义和存储过程定 义等。使用导出的对象定义,可以快速创建与当前主机相同的一个主机环境,拥有相同的数据库和表空 间,但是库中并无原数据库的数据。
⚫ 示例:使用gs_dumpall一次导出所有数据库信息。
gs_dumpall -U omm -f /home/omm/backup/MPPDB_backup.sql -p 8000
9、无权限角色导出数据
⚫ gs_dump和gs_dumpall通过-U指定执行导出的用户帐户。如果当前使用的帐户不具备导 出所要求的权限时,会无法导出数据。此时,可在导出命令中设置--role参数来指定具备 权限的角色。在执行命令后,gs_dump和gs_dumpall会使用--role参数指定的角色,完 成导出动作。
⚫ 示例:使用gs_dump导出human_resource数据库数据。
假设用户jack不具备导出数据库human_resource的权限,而角色role1具备该权限,要实现导 出数据库human_resource,可以在导出命令中设置--role角色为role1,使用role1的权限,完 成导出目的。
gs_dump -U jack -f /home/omm/backup/MPPDB_backup.tar -p 8000 human_resource --role role1 -- rolepassword abc@1234 -F t
数据导入导出 – gs_restore
⚫ gs_restore是openGauss数据库提供的与gs_dump配套的导入工具。通过该工具,可将gs_dump 导出的文件导入至数据库。gs_restore支持导入的文件格式包含自定义归档格式、目录归档格式和 tar归档格式。
⚫ gs_restore具备如下两种功能。
导入至数据库
◼ 如果指定了数据库,则数据将被导入到指定的数据库中。其中,并行导入必须指定连接数据库的密码。
导入至脚本文件
◼ 如果未指定导入数据库,则创建包含重建数据库所需的SQL语句脚本,并将其写入至文件或者标准输出。该脚本文 件等效于gs_dump导出的纯文本格式文件。
⚫ gs_restore工具在导入时,允许用户选择需要导入的内容,并支持在数据导入前对等待导入的内容 进行排序。
gs_restore 参数说明
gs_restore 示例
⚫ 使用gs_restore命令,从postgres整个数据库内容的导出文件中,将数据库的所有对象的 定义导入到backupdb。
gs_restore -U jack /home/omm/backup/MPPDB_backup.tar -p 8000 -d backupdb -s -e -c
⚫ 使 用 gs_restore 命 令 , 导 入 指 定 MPPDB_backup.dmp 文 件 ( 自 定 义 归 档 格 式 ) 中 postgres数据库的数据和对象定义。
gs_restore backup/MPPDB_backup.dmp -p 8000 -d backupdb
⚫ 使用gs_restore命令,将postgres数据库的所有对象的定义导入至backupdb数据库。导 入前,postgres存在完整的定义和数据,导入后,backupdb数据库只存在所有对象定义, 表没有数据。
gs_restore /home/omm/backup/MPPDB_backup.tar -p 8000 -d backupdb -s -e -c
10、ANALYZE
⚫ 执行计划生成器需要使用表的统计信息,以生成最有效的查询执行计划,提高查询性能。因此数据导入完成后,建议执行ANALYZE语句生成最新的表统计信息。统计结果存储在 系统表PG_STATISTIC中。
⚫ ANALYZE支持的表类型有行/列存表。ANALYZE同时也支持对本地表的指定列进行信息 统计。
⚫ ANALYZE语法(以product_info表为例)。
postgres=# ANALYZE product_info;
ANALYZE
VACUUM
⚫ 如果导入过程中,进行了大量的更新或删除行时,应运行VACUUM FULL命令,然后运 行ANALYZE命令。大量的更新和删除操作,会产生大量的磁盘页面碎片,从而逐渐降低 查询的效率。VACUUM FULL可以将磁盘页面碎片恢复并交还操作系统。
⚫ VACUUM FULL语法(以product_info表为例)。
postgres=# VACUUM FULL product_info;
VACUUM
以上是关于openGauss数据库的使用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用pg_chameleon迁移MySQL数据库至openGauss
使用虚拟机在CentOS上安装部署openGauss数据库指导(上)