背景信息
openGauss提供了多种修改GUC参数的方法,用户可以方便的针对数据库、用户、会话进行设置。
-
参数名称不区分大小写。
-
参数取值有整型、浮点型、字符串、布尔型和枚举型五类。
- 布尔值可以是(on,off)、(true,false)、(yes,no)或者(1,0),且不区分大小写。
- 枚举类型的取值是在系统表pg_settings的enumvals字段取值定义的。
-
对于有单位的参数,在设置时请指定单位,否则将使用默认的单位。
- 参数的默认单位在系统表pg_settings的unit字段定义的。
- 内存单位有:KB(千字节)、MB(兆字节)和GB(吉字节)。
- 时间单位:ms(毫秒)、s(秒)、min(分钟)、h(小时)和d(天)。
-
使用
SET paraname = value
方式设置GUC参数时,支持设置value为NULL,效果为设置对应的参数值为空字符串(并非NULL)。
具体参数说明请参见dolphin-GUC参数说明。
GUC参数设置
openGauss提供了六类GUC参数,具体分类和设置方式请参考表1:
表 1 GUC参数分类
参数类型 |
说明 |
设置方式 |
---|---|---|
INTERNAL |
固定参数,在创建数据库的时候确定,用户无法修改,只能通过show语法或者pg_settings视图进行查看。 |
无 |
POSTMASTER |
数据库服务端参数,在数据库启动时确定,可以通过配置文件指定。 |
支持表2中的方式二。 |
SIGHUP |
数据库全局参数,可在数据库启动时设置或者在数据库启动后,发送指令重新加载。 |
支持表2中的方式二。 |
BACKEND |
会话连接参数。在创建会话连接时指定,连接建立后无法修改。连接断掉后参数失效。内部使用参数,不推荐用户设置。 |
支持表2中的方式二。 说明: 设置该参数后,下一次建立会话连接时生效。 |
SUSET |
数据库管理员参数。可在数据库启动时、数据库启动后或者数据库管理员通过SQL进行设置。 |
支持表2中由数据库管理员通过方式一设置。 |
USERSET |
普通用户参数。可被任何用户在任何时刻设置。 |
支持表2中的方式一设置。 |
openGauss提供了四种方式来修改GUC参数,具体操作请参考表2:
表 2 GUC参数设置方式
序号 |
设置方法 |
---|---|
方式一 |
修改指定数据库、用户、会话级别的参数。
|
方式二 |
使用ALTER SYSTEM SET修改数据库参数。
|
操作步骤
使用方式一设置参数,以设置explain_perf_mode参数为例。
-
以操作系统用户omm登录数据库主节点。
-
使用如下命令连接数据库。
gsql -d postgres -p 8000
postgres为需要连接的数据库名称,8000为数据库主节点的端口号。
连接成功后,系统显示类似如下信息:
gsql((openGauss x.x.x build f521c606) compiled at 2021-09-16 14:55:22 commit 2935 last mr 6385 release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.openGauss=#
-
查看explain_perf_mode参数。
openGauss=# SHOW explain_perf_mode;
explain_perf_mode
-------------------
normal
(1 row)
-
设置explain_perf_mode参数。
使用以下任意方式进行设置:
-
设置数据库级别的参数
openGauss=# ALTER DATABASE postgres SET explain_perf_mode TO pretty;
当结果显示为如下信息,则表示设置成功。
ALTER DATABASE
在下次会话中生效。
-
设置用户级别的参数
openGauss=# ALTER USER omm SET explain_perf_mode TO pretty;
当结果显示为如下信息,则表示设置成功。
ALTER ROLE
在下次会话中生效。
-
设置会话级别的参数
openGauss=# SET explain_perf_mode TO pretty;
当结果显示为如下信息,则表示设置成功。
SET
-
-
检查参数设置的正确性。
openGauss=# SHOW explain_perf_mode;
explain_perf_mode
--------------
pretty
(1 row)
示例
--创建表test1。
openGauss=# CREATE TABLE test1
(
a1 smallint not null,
a2 int not null,
a3 bigint not null,
a4 float not null,
a5 double not null,
a6 numeric not null,
a7 varchar(5) not null
);
--向表中插入记录失败。
openGauss=# insert into test1(a1,a2) values(123412342342314,3453453453434324);
--查询表失败
openGauss=# select a1,a2 from test1 group by a1;
--向表中插入记录成功。
openGauss=# set dolphin.sql_mode = '';
openGauss=# insert into test1(a1,a2) values(123412342342314,3453453453434324);
--查询表成功
openGauss=# select a1,a2 from test1 group by a1;
--删除表
openGauss=# DROP TABLE test1;