华为云用户手册

  • log_duration 参数说明:控制记录每个已完成SQL语句的执行时间。对使用扩展查询协议的客户端、会记录语法分析、绑定和执行每一步所花费的时间。 该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 设置为off,该选项与log_min_duration_statement的不同之处在于log_min_duration_statement强制记录查询文本。 设置为on并且log_min_duration_statement大于零,记录所有持续时间,但是仅记录超过阈值的语句。这可用于在高负载情况下搜集统计信息。 默认值:off
  • log_error_verbosity 参数说明:控制服务器日志中每条记录的消息写入的详细度。 该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:枚举类型 terse输出不包括DETAIL、HINT、QUERY及CONTEXT错误信息的记录。 verbose输出包括SQLSTATE错误代码 、源代码文件名、函数名及产生错误所在的行号。 default输出包括DETAIL、HINT、QUERY及CONTEXT错误信息的记录,不包括SQLSTATE错误代码 、源代码文件名、函数名及产生错误所在的行号。 默认值:default
  • log_line_prefix 参数说明:控制每条日志信息的前缀格式。日志前缀类似于printf风格的字符串,在日志的每行开头输出。用以%为开头的“转义字符”代替表1中的状态信息。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 表1 转义字符表 转义字符 效果 %a 应用程序名称。 %u 用户名。 %d 数据库名。 %r 远端主机名或者IP地址以及远端端口,在不启动log_hostname时显示IP地址及远端端口。 %h 远端主机名或者IP地址,在不启动log_hostname时只显示IP地址。 %p 线程ID。 %t 时间戳(没有毫秒,Windows上没有时区)。 %m 带毫秒的时间戳。 %n 表示指定错误上报的节点。 %i 命令标签:会话当前执行的命令类型。 %e SQLSTATE错误码。 %c 会话ID,详见说明。 %l 每个会话的日志编号,从1开始。 %s 会话启动时间。 %v 虚拟事务ID(backendID/ localXID) %x 事务ID(0表示没有分配事务ID)。 %q 不产生任何输出。如果当前线程是后端线程,忽略这个转义序列,继续处理后面的转义序列;如果当前线程不是后端线程,忽略这个转义序列和它后面的所有转义序列。 %S 会话ID。 %T TraceID。 %% 字符%。 转义字符%c打印一个唯一的会话ID,由两个4字节的十六进制数组成,通过字符“.”分开。这两个十六进制数分别表示线程的启动时间及线程编号,所以%c也可以看作是保存打印这些名目的途径的空间。比如,从pg_stat_activity中产生会话ID,可以用下面的查询: 1 2 3 SELECT to_hex(EXTRACT(EPOCH FROM backend_start)::integer) || '.' || to_hex(pid) FROM pg_stat_activity; 当log_line_prefix设置为非空值时,请保证最后一个字符是一个空格,以此来直观地与后续的日志行进行区分,也可以使用一个标点符号。 Syslog生成自己的时间戳及线程ID信息,所以当登录日志时,不需要包含这些转义字符。 取值范围:字符串 默认值:'%m %n %u %d %h %p %S %x %a ' %m %n %u %d %h %p %S %x %a 表示会话开始时间戳、错误上报节点、用户名、数据库名、远程主机名或IP、线程ID、会话ID、事务ID、应用名。
  • log_checkpoints 参数说明:控制在服务器日志中记录检查点和重启点的信息。打开此参数时,服务器日志消息包含涉及检查点和重启点的统计量,其中包含需要写的缓存区的数量及写入所花费的时间等。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示打开此参数时,服务器日志消息包含涉及检查点和重启点的统计量。 off表示关闭此参数时,服务器日志消息包含不涉及检查点和重启点的统计量。 默认值:off
  • log_connections 参数说明:控制是否记录客户端连接请求的日志信息。日志信息包括连接的IP、PORT、用户名、数据库名、 GaussDB数据库 响应建立连接流程中关键步骤的耗时等。 参数类型:布尔型 参数单位:无 部分客户端程序(例如gsql),在判断是否需要密码的时候会尝试连接两次,因此日志消息中可能存在重复的“connection receive”(收到连接请求)。 取值范围: on:表示记录日志信息。 off:表示不记录日志信息。 默认值:off 设置方式:该参数属于BACKEND类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。
  • debug_print_plan 参数说明:用于设置是否将查询的执行计划打印到日志中。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示开启打印结果的功能。 off表示关闭打印结果的功能。 默认值:off 只有当日志的级别为log及以上时,debug_print_parse、debug_print_rewritten和debug_print_plan的调试信息才会输出。当这些选项打开时,调试信息只会记录在服务器的日志中,而不会输出到客户端的日志中。通过设置client_min_messages和log_min_messages参数可以改变日志级别。 在打开debug_print_plan开关的情况下需尽量避免调用gs_encrypt_aes128及gs_decrypt_aes128函数,避免敏感参数信息在日志中泄露的风险。同时建议用户在打开debug_print_plan开关生成的日志中对gs_encrypt_aes128及gs_decrypt_aes128函数的参数信息进行过滤后再提供给外部维护人员定位,日志使用完成后请及时删除。
  • 注意事项 所有该角色在当前数据库里和共享对象(数据库,表空间) 上的所有对象上的权限都将被撤销。 DROP OWNED常常被用来为移除一个或者多个角色做准备。因为DROP OWNED只影响当前数据库中的对象,通常需要在包含将被移除角色所拥有的对象的每一个数据库中都执行这个命令。 使用CASCADE选项可能导致这个命令递归去删除由其他用户所拥有的对象。 角色所拥有的数据库、表空间将不会被移除。 角色所拥有的私有DATABASE LINK连接需要添加CASCADE才可删除。
  • define和undef指令 在嵌入式SQL程序中也可以使用C语言版本的#define和#undef。区别在于定义的值会在哪里被计算,如果使用EXEC SQL DEFINE,那么ecpg预处理阶段会计算这些定义并替换值。如果使用C语言版本的#define和#undef,那么会在编译器处理阶段会计算这些定义并替换值。 不能把#define用于一个将要在嵌入式SQL查询中使用的变量,因为在这种情况下嵌入式SQL预编译器不能看到这个声明。 父主题: 预处理指令
  • 示例 创建一个名为seq1的递增序列,从101开始,步长为10。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE SEQUENCE seq1 START 101 INCREMENT 10; --从序列中选出下一个数字: gaussdb=# SELECT nextval('seq1'); nextval --------- 101 (1 row) gaussdb=# SELECT nextval('seq1'); nextval --------- 111 --删除序列。 gaussdb=# DROP SEQUENCE seq1; 表自增列的一种实现。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 --创建表。 gaussdb=# CREATE TABLE test1(id int PRIMARY KEY, name varchar(20)); --创建与表关联的序列。 gaussdb=# CREATE SEQUENCE test_seq2 START 1 NO CYCLE OWNED BY test1.id; --设置字段的默认值。 gaussdb=# ALTER TABLE test1 ALTER COLUMN id SET DEFAULT nextval('test_seq2'::regclass); -- 插入数据。 gaussdb=# INSERT INTO test1 (name) values ('Joe'),('Scott'),('Ben'); --查询。 gaussdb=# SELECT * FROM test1; id | name ----+------- 3 | Ben 1 | Joe 2 | Scott (3 rows) --删除序列和表。 gaussdb=# DROP SEQUENCE test_seq2 CASCADE; gaussdb=# DROP TABLE test1;
  • 注意事项 只有表空间所有者或者被授予了表空间DROP权限的用户有权限执行DROP TABLESPACE命令,系统管理员默认拥有此权限。 在删除一个表空间之前,表空间里面不能有任何数据库对象,否则会报错。 DROP TABLESPACE不支持回滚,因此,不能出现在事务块内部。 执行DROP TABLESPACE操作时,如果有另外的会话执行\db查询操作,可能会由于TABLESPACE事务的原因导致查询失败,请重新执行\db查询操作。 如果执行DROP TABLESPACE失败,需要再次执行一次DROP TABLESPACE IF EXISTS。
  • OPEN FOR 动态查询语句还可以使用OPEN FOR打开动态游标来执行。 语法参见图3。 图3 open_for::= 参数说明: cursor_name:要打开的游标名。 dynamic_string:动态查询语句。 USING value:在dynamic_string中存在占位符时使用。 游标的使用请参考游标。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 gaussdb=# CREATE SCHEMA hr; gaussdb=# SET CURRENT_SCHEMA = hr; gaussdb=# DROP TABLE IF EXISTS staffs; gaussdb=# CREATE TABLE staffs ( section_id NUMBER, first_name VARCHAR2, phone_number VARCHAR2, salary NUMBER ); gaussdb=# INSERT INTO staffs VALUES (30, 'mike', '13567829252', 5800); gaussdb=# INSERT INTO staffs VALUES (40, 'john', '17896354637', 4000); gaussdb=# DECLARE name VARCHAR2(20); phone_number VARCHAR2(20); salary NUMBER(8,2); sqlstr VARCHAR2(1024); TYPE app_ref_cur_type IS REF CURSOR; --定义游标类型 my_cur app_ref_cur_type; --定义游标变量 BEGIN sqlstr := 'select first_name,phone_number,salary from hr.staffs where section_id = :1'; OPEN my_cur FOR sqlstr USING '30'; --打开游标, using是可选的 FETCH my_cur INTO name, phone_number, salary; --获取数据 WHILE my_cur%FOUND LOOP dbe_output.print_line(name||'#'||phone_number||'#'||salary); FETCH my_cur INTO name, phone_number, salary; END LOOP; CLOSE my_cur; --关闭游标 END; / mike#13567829252#5800.00 ANONYMOUS BLOCK EXECUTE gaussdb=# DROP TABLE staffs;
  • num_internal_lock_partitions 参数说明:控制内部轻量级锁分区的个数。主要用于各类场景的性能调优。内容以关键字和数字的KV方式组织,各个不同类型锁之间以逗号隔开。先后顺序对设置结果不影响,例如“C LOG _PART=256, CS NLOG_PART=512”等同于“CSNLOG_PART=512,CLOG_PART=256”。重复设置同一关键字时,以最后一次设置为准,例如“CLOG_PART=256,CLOG_PART=2”,设置的结果为CLOG_PART=2。当没有设置关键字时,则为默认值,各类锁的使用描述和最大、最小、默认值如下。 CLOG_PART:CLOG文件控制器的个数,增大该值可以提高CLOG日志写入效率,提升事务提交性能,但是会增大内存使用;减小该值会减少相应内存使用,但可能使得CLOG日志写入冲突变大,影响性能。最小值为1,最大值为256。 CSNLOG_PART:CSNLOG文件控制器的个数,增大该值可以提高CSNLOG日志写入效率,提升事务提交性能,但是会增大内存使用;减小该值会减少相应内存使用,但可能使得CSNLOG日志写入冲突变大,影响性能。最小值为1,最大值为512。 LOG2_LOCKTABLE_PART:常规锁表锁分区个数的2对数,增大该值可以提升正常流程常规锁获取锁的并行度,但是可能增加锁转移和锁消除时的耗时,对于等待事件在LockMgrLock时,可以调大该锁增加性能。最小值4,即锁分区数为16;最大值为16,即锁分区数为65536。 TWOPHASE_PART:两阶段事务锁的分区数,调大该值可以提高两阶段事务提交的并发数。最小值为1,最大值为64。 FASTPATH_PART:每个线程可以不通过主锁表拿锁的最大锁个数,对于分区表读取、更新、插入、删除操作且等待事件在LockMgrLock时,可以通过调大该值避免获取LockMgrLock提升性能,建议调整数量大于等于分区数*(1+本地索引数量)+全局索引数量+10,调大该值会额外增加内存。最小值为20,最大值为10000。 该参数属于POSTMASTER类型参数,参考表1中对应设置方法进行设置。 取值范围:字符串 默认值: CLOG_PART:256 CSNLOG_PART:512 LOG2_LOCKTABLE_PART:4 TWOPHASE_PART:1 FASTPATH_PART:20
  • partition_lock_upgrade_timeout 参数说明:在执行某些查询语句的过程中,会需要将分区表上的锁级别由允许读的ExclusiveLock级别升级到读写阻塞的AccessExclusiveLock级别。如果此时已经存在并发的读事务,那么该锁升级操作将阻塞等待。partition_lock_upgrade_timeout为尝试锁升级的等待超时时间。 在分区表上进行MERGE PARTITION和CLUSTER PARTITION操作时,都利用了临时表进行数据重排和文件交换,为了尽可能提高分区上的操作并发度,在数据重排阶段给相关分区加锁ExclusiveLock,在文件交换阶段加锁AccessExclusiveLock。 常规加锁方式是等待加锁,直到加锁成功,或者等待时间超过lockwait_timeout发生超时失败。 在分区表上进行MERGE PARTITION或CLUSTER PARTITION操作时,进入文件交换阶段需要申请加锁AccessExclusiveLock,加锁方式是尝试性加锁,加锁成功了则立即返回,不成功则等待50ms后继续下次尝试,加锁超时时间使用会话级设置参数partition_lock_upgrade_timeout。 特殊值:若partition_lock_upgrade_timeout取值-1,表示无限等待,即不停的尝试锁升级,直到加锁成功。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,最小值-1,最大值3000,单位为秒(s)。 默认值:1800
  • xloginsert_locks 参数说明:控制用于并发写预写式日志锁的个数。主要用于提高写预写式日志的效率。 参数类型:整型 参数单位:无 取值范围:最小值1,最大值1000。若CPU为NUMA架构,数值必须为NUMA节点数量的整数倍。 默认值:16 设置方式:该参数属于POSTMASTER类型参数,参考表1中对应设置方法进行设置。 设置建议:ARM CPU架构在并发压力大的场景下,可能因为原子操作的竞争而导致概率性的性能抖动,可以适当降低该参数值而获取相对稳定的运行性能。
  • gs_clean_timeout 参数说明:控制Coordinator周期性调用gs_clean工具的时间,是一个平均值。 GaussDB 数据库中事务处理使用的是两阶段提交的方法,当有两阶段事务残留时,该事务通常会拿着表级锁,导致其它连接无法加锁,此时需要调用gs_clean工具对集群中两阶段事务进行清理,gs_clean_timeout是控制Coordinator周期性调用gs_clean的时间。 增大这个参数可能导致GaussDB周期性调用gs_clean工具的时间延长,导致两阶段事务清理时间延长。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0 ~ 2147483,单位为秒(s)。 默认值:1min
  • max_pred_locks_per_transaction 参数说明:控制每个事务允许断定锁的最大数量,是一个平均值。 共享的断定锁表的大小是以假设任意时刻最多只有max_pred_locks_per_transaction*(max_connections+max_prepared_transactions) 个独立的对象需要被锁住为基础进行计算的。不超过设定数量的多个对象可以在任一时刻同时被锁定。当在一个事务里面修改很多不同的表时,可能需要提高这个默认数值。只能在服务器启动的时候设置。 增大这个参数可能导致GaussDB请求更多的System V共享内存,有可能超过操作系统的缺省配置。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,10 ~ 2147483647‬ 默认值:64
  • lockwait_timeout 参数说明:控制单个锁的最长等待时间。当申请的锁等待时间超过设定值时,系统会报错。该参数仅针对常规锁生效。 参数类型:整型 参数单位:毫秒(ms) 取值范围:0 ~ 2147483647 默认值:20min 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。例如,不带单位取值900,表示lockwait_timeout为900ms;带单位取值20min,表示lockwait_timeout为20min。取值如果要带单位,必须为ms、s、min、h、d。 设置建议:一般设置为默认值。根据业务需要,如果业务需要锁冲突超过多久,该参数就设置多少。
  • update_lockwait_timeout 参数说明:允许并发更新参数开启情况下,该参数控制并发更新同一行时单个锁的最长等待时间。当申请的锁等待时间超过设定值时,系统会报错。该参数仅针对常规锁生效。 参数类型:整型 参数单位:毫秒(ms) 取值范围:0 ~ 2147483647 默认值:2min(120000ms) 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。例如,不带单位取值900,表示update_lockwait_timeout为900ms;带单位取值2min,表示update_lockwait_timeout为2min。取值如果要带单位,必须为ms、s、min、h、d 设置建议:主要观测并发更新同一行的事务的workload。一般TP业务,执行时间较短小于两分钟,此时默认值误报概率较小;如果业务出现大量并发更新同一行事务,执行时间超过两分钟,可以调大该参数避免等锁超时误报。
  • 示例 gaussdb=# DROP SCHEMA IF EXISTS hr CASCADE; gaussdb=# CREATE SCHEMA hr; CREATE SCHEMA gaussdb=# SET CURRENT_SCHEMA = hr; SET gaussdb=# CREATE TABLE staffs ( staff_id NUMBER, first_name VARCHAR2, salary NUMBER ); CREATE TABLE gaussdb=# INSERT INTO staffs VALUES (200, 'mike', 5800); INSERT 0 1 gaussdb=# INSERT INTO staffs VALUES (201, 'lily', 3000); INSERT 0 1 gaussdb=# INSERT INTO staffs VALUES (202, 'john', 4400); INSERT 0 1 --创建存储过程dynamic_proc gaussdb=# CREATE OR REPLACE PROCEDURE dynamic_proc AS staff_id NUMBER(6) := 200; first_name VARCHAR2(20); salary NUMBER(8,2); BEGIN --执行匿名块 EXECUTE IMMEDIATE 'begin select first_name, salary into :first_name, :salary from hr.staffs where staff_id= :dno; end;' USING OUT first_name, OUT salary, IN staff_id; dbe_output.print_line(first_name|| ' ' || salary); END; / CREATE PROCEDURE --调用存储过程 gaussdb=# CALL dynamic_proc(); mike 5800.00 dynamic_proc -------------- (1 row) --删除存储过程 gaussdb=# DROP PROCEDURE dynamic_proc; DROP PROCEDURE --开启dynamic_sql_check时报错示例 gaussdb=# SET behavior_compat_options = 'dynamic_sql_check'; SET gaussdb=# CREATE OR REPLACE PROCEDURE test_proc_exception001(a out integer, b inout integer, c integer) as BEGIN a := 1; begin b := 1/0; end; EXCEPTION WHEN others THEN b := 2; END; / CREATE PROCEDURE gaussdb=# DECLARE a integer := 1; c integer; BEGIN execute immediate 'begin test_proc_exception001(:1,:2,:1); end;' using in out a, out c, a; END; / ERROR: argnum not match in Dynamic SQL, using args num : 3 , actual sql args num : 2 CONTEXT: PL/pgSQL function inline_code_block line 4 at EXECUTE statement --修改同名占位符 gaussdb=# DECLARE a integer := 1; c integer; BEGIN execute immediate 'begin test_proc_exception001(:1,:2,:3); end;' using in out a, out c, a; END; / ANONYMOUS BLOCK EXECUTE gaussdb=# DROP PROCEDURE test_proc_exception001; DROP PROCEDURE
  • 语法 动态调用匿名块语法如图1所示。 图1 call_anonymous_block::= using_clause子句的语法如图2所示。 图2 using_clause::= 对以上语法格式的解释如下: 匿名块程序实施部分,以BEGIN语句开始,以END语句停顿,以一个分号结束。 USING [IN|OUT|IN OUT] bind_argument,用于指定存放传递给存储过程参数值的变量。bind_argument前的修饰符与对应参数的修饰符一致。 匿名块中间的输入输出参数使用占位符来指明,要求占位符个数与参数个数相同,并且占位符所对应参数的顺序和USING中参数的顺序一致。 仅支持匿名块中调用SQL语句和存储过程时绑定参数,其余绑定参数场景皆不支持。例如:匿名块中使用表达式以及cursor等、匿名块中嵌套调用动态语句。 不支持匿名块中SELECT INTO语句调用含有出参的FUNCTION/PROCEDURE时,绑定出参。 不支持同一条语句同时使用匿名块内声明的变量和绑定参数。 不支持绑定参数时使用PERFORM关键字调用存储过程。 调用存储过程时,仅支持绑定参数直接作为出入参,不支持表达式形式(如“1+:va”)作为出入参。 IMMEDIATE关键字仅用作语法兼容,无实际意义。 绑定入参类型为refcursor时,存储过程内的修改与入参相互隔离。 打开dynamic_sql_check参数时,占位符个数与参数个数一致时使用同名占位符作为匿名块参数会报错,需修改为不同名参数,详见示例。
  • default_week_format 参数说明:用于week()函数的默认mode值,取值范围与表现如下表所示。 default_week_format 一周的第一天 范围 第1周定义 0 周日 0~53 今年第一个有周日的周。 1 周一 0~53 今年第一个有4天及以上的周。 2 周日 1~53 今年第一个有周日的周。 3 周一 1~53 今年第一个有4天及以上的周。 4 周日 0~53 今年第一个有4天及以上的周。 5 周一 0~53 今年第一个有周一的周。 6 周日 1~53 今年第一个有4天及以上的周。 7 周一 1~53 今年第一个有周一的周。 一年的第1周,其中的1代表序号值。根据week_format不同,如第三列所示,一年的第一个周序号可能为0。 参数类型:整型 参数单位:无 取值范围:[0, 7] 默认值:0 设置方式:该参数属于USERSET类型参数,请参考设置参数中对应设置方法进行设置 设置建议:根据业务需要,选择合适的mode。
  • lc_messages 参数说明:设置信息显示的语言。 可接受的值是与系统相关的。 在一些系统上,这个区域范畴并不存在,不过仍然允许设置这个变量,只是不会有任何效果。同样,也有可能是所期望的语言的翻译信息不存在。在这种情况下,用户仍然能看到英文信息。 该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。 默认值:C
  • lc_monetary 参数说明:设置货币值的显示格式,影响to_char之类的函数的输出。可接受的值是系统相关的。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。 若该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。 默认值:C
  • lc_numeric 参数说明:设置数值的显示格式,影响to_char之类的函数的输出。可接受的值是系统相关的。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。 若该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。 默认值:C
  • lc_time 参数说明:设置时间和区域的显示格式,影响to_char之类的函数的输出。可接受的值是系统相关的。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。 若该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。 默认值:C
  • lc_time_names 参数说明:控制用于显示日期和月份名称及缩写的语言。影响DATE_FORMAT()、DAYNAME()以及MONTHNAME()函数输出结果。不影响STR_TO_DATE()和GET_FORMAT()的表现。 参数类型:字符串 参数单位:无 取值范围:参数应当为简易格式的IETF语言标记,例如en_US、zh_CN等。 默认值:en_US 设置方式:该参数属于USERSET类型参数,请参考设置参数中对应设置方法进行设置 设置建议:根据业务需要,切换合适的语言。
  • extra_float_digits 参数说明:这个参数为浮点数值调整显示的数据位数,浮点类型包括float4、float8 以及几何数据类型。参数值加在标准的数据位数上(FLT_DIG或DBL_DIG中合适的)。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,-15~3 设置为3,表示包括部分关键的数据位。这个功能对转储那些需要精确恢复的浮点数据特别有用。 设置为负数,表示消除不需要的数据位。 默认值:0
  • client_encoding 参数说明:设置客户端的字符编码类型。 请根据前端业务的情况确定。尽量客户端编码和服务器端编码一致,提高效率。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:兼容PostgreSQL所有的字符编码类型。其中UTF8表示使用数据库的字符编码类型。 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置;不同操作系统之间,或者相同操作系统的不同版本之间,排序规则可能存在差异和变化。当应用业务在上述这些操作系统之间进行逻辑迁移时,操作系统排序规则的差异和变化可能会导致索引、分区、排序算子等数据库功能行为的差异,如相同的范围查询语句返回的数据结果集不同、相同的排序查询语句返回的查询结果不同等。应用业务需要根据操作系统发布的locale差异,在业务上排查业务数据是否涉及相关的字符。 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。 参数建议保持默认值,不建议通过gs_guc工具或其他方式直接在gaussdb.conf文件中设置client_encoding参数,即使设置也不会生效,以保证集群内部通信编码格式一致。 client_encoding支持设置为GB18030_2022字符编码,当client_encoding=gb18030_2022时,需要保证客户端操作系统支持的GB18030字符集已升级到2022版本。 当数据库字符集编码为UTF8,且当前系统支持的区域下相应的编码格式为GB18030时,若客户端操作系统支持的GB18030字符集已升级到2022版本,且数据库中存在客户端GB18030字符集升级前存入的历史数据,则存在以下情况: set client_encoding = gb18030时,UTF8数据库中的历史数据返回给客户端的字符编码与客户端字符集升级前保持一致,但字符集升级过程中发生映射关系改变的38个字符的字形显示与2022版本保持一致。 set client_encoding = gb18030_2022时,UTF8数据库中的历史数据返回给客户端的字符编码与客户端字符集升级后保持一致,字形与升级前保持一致。这是因为GB18030字符集自身的各版本间存在不完全兼容,可能导致数据的不一致性。因此,若客户端涉及GB18030字符集升级且存在历史数据的场景,在升级前应进行历史数据的升级转换。 client_encoding支持设置为ZHS16GBK字符编码,下表展示了ZHS16GBK、GB18030、GB18030_2022字符集所有转换关系对应的server_encoding与client_encoding设置方式: server_encoding server_encoding locale 设置方法 zhs16gbk utf8 utf8 数据库自动获取locale取值。 utf8 zhs16gbk gbk gsql通过用户手动执行:set client_encoding = zhs16gbk。 JDBC连接时通过url参数直接指定:characterEncoding=zhs16gbk。 zhs16gbk zhs16gbk gbk gsql连接时数据库自动获取locale取值,内部进行处理后自动设置client_encoding = zhs16gbk。 JDBC连接时通过url参数直接指定:characterEncoding=zhs16gbk。 zhs16gbk gb18030 gb18030 gsql连接时数据库自动获取locale取值。 JDBC连接时通过url参数直接指定:characterEncoding=gb18030。 gb18030 zhs16gbk gbk gsql不支持该设置。 JDBC连接时通过url参数直接指定characterEncoding=zhs16gbk。 zhs16gbk gb18030-2022 gb18030 gsql连接时,用户手动执行:set client_encoding = gb18030_2022。 JDBC连接时通过url参数直接指定:characterEncoding=gb18030_2022。 gb18030-2022 zhs16gbk gbk gsql不支持该设置。 JDBC连接时通过url参数直接指定characterEncoding=zhs16gbk。 gb18030 utf8 utf8 数据库自动获取locale取值。 utf8 gb18030 gb18030 数据库自动获取locale取值。 JDBC连接时通过url参数直接指定:characterEncoding=gb18030。 gb18030_2022 utf8 utf8 数据库自动获取locale取值。 utf8 gb18030_2022 gb18030 gsql连接时,用户手动执行:set client_encoding = gb18030_2022 JDBC连接时通过url参数直接指定:characterEncoding=gb18030_2022 gb18030 gb18030 gb18030 数据库自动获取locale取值。 JDBC连接时通过url参数直接指定:characterEncoding=gb18030。 gb18030_2022 gb18030_2022 gb18030 gsql连接时数据库自动获取locale取值,内部进行处理后自动设置client_encoding = gb18030_2022。 JDBC连接时通过url参数直接指定:characterEncoding=gb18030_2022。 默认值:UTF8 推荐值:SQL_ASCII/UTF8
  • DateStyle 参数说明:设置日期和时间值的显示格式,以及有歧义的输入值的解析规则。 这个变量包含两个独立的加载部分:输出格式声明(ISO、Postgres、SQL、German)和输入输出的年/月/日顺序(DMY、MDY、YMD、Euro、European、US、NonEuro、NonEuropean、Default)。两个部分可以独立设置或者一起设置。关键字Euro和European等价于DMY;关键字US、NonEuro、NonEuropean等价于MDY 。 参数类型:字符串 参数单位:无 取值范围:输出格式声明与输入输出的年/月/日顺序的排列组合(两个部分也可以单独设置)。 输出格式声明:ISO、Postgres、SQL、German 输入输出的年/月/日顺序:DMY(Euro、European)、MDY(US、NonEuro、NonEuropean)、YMD 默认值:"ISO, MDY" gs_initdb会将这个参数初始化成与lc_time一致的值。 该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:优先推荐使用ISO格式。
  • 条件表达式 在执行SQL语句时,可通过条件表达式筛选出符合条件的数据。 条件表达式主要有以下几种: CASE CASE表达式是条件表达式,类似于其他编程语言中的CASE语句。 CASE表达式的语法图如图1所示。 图1 case::= CASE子句可以用于合法的表达式中。condition是一个返回BOOLEAN数据类型的表达式: 如果结果为真,CASE表达式的结果就是符合该条件所对应的result。 如果结果为假,则以相同方式处理随后的WHEN或ELSE子句。 如果各WHEN condition都不为真,表达式的结果就是在ELSE子句执行的result。如果省略了ELSE子句且没有匹配的条件,结果为NULL。 支持对XML类型数据操作。 GUC参数enable_case_intervaltonumeric设置为true时,支持将INTERVAL转换为NUMERIC而不报错。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 gaussdb=# CREATE TABLE case_when_t1(CW_COL1 INT) DISTRIBUTE BY HASH (CW_COL1); gaussdb=# INSERT INTO case_when_t1 VALUES (1), (2), (3); gaussdb=# SELECT * FROM case_when_t1; cw_col1 --- 1 2 3 (3 rows) gaussdb=# SELECT CW_COL1, CASE WHEN CW_COL1=1 THEN 'one' WHEN CW_COL1=2 THEN 'two' ELSE 'other' END FROM case_when_t1 ORDER BY 1; cw_col1 | case ---------+------- 1 | one 2 | two 3 | other (3 rows) gaussdb=# DROP TABLE case_when_t1; -- GUC参数默认为false,此时报错。 gaussdb=# SHOW enable_case_intervaltonumeric; enable_case_intervaltonumeric ------------------------------- off (1 row) gaussdb=# SELECT case gaussdb-# WHEN 1=1 THEN gaussdb-# to_date('20240118','yyyymmdd')-to_date('20240116','yyyymmdd') gaussdb-# ELSE gaussdb-# 1 gaussdb-# end; ERROR: CASE types integer and interval cannot be matched LINE 3: to_date('20240118','yyyymmdd')-to_date('20240116','y... ^ CONTEXT: referenced column: case -- 打开GUC参数,能正确返回结果。 gaussdb=# SET enable_case_intervaltonumeric=true; SET gaussdb=# SELECT case gaussdb-# WHEN 1=1 THEN gaussdb-# to_date('20240118','yyyymmdd')-to_date('20240116','yyyymmdd') gaussdb-# ELSE gaussdb-# 1::int1 gaussdb-# END; case ------ 2 (1 row) DECODE DECODE的语法图如图2所示。 图2 decode::= 将表达式base_expr与后面的每个compare(n) 进行比较,如果匹配返回相应的value(n)。如果没有发生匹配,则返回default。 支持对XML类型数据操作。 示例请参见条件表达式函数。 1 2 3 4 5 gaussdb=# SELECT DECODE('A','A',1,'B',2,0); case ------ 1 (1 row) COALESCE COALESCE的语法图如图3所示。 图3 coalesce::= COALESCE返回它的第一个非NULL的参数值。如果参数都为NULL,则返回NULL。它常用于在显示数据时用缺省值替换NULL。和CASE表达式一样,COALESCE只计算用来判断结果的参数,即在第一个非空参数右边的参数不会被计算。 支持对XML类型数据操作。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE c_tabl(description varchar(10), short_description varchar(10), last_value varchar(10)) DISTRIBUTE BY HASH (last_value); gaussdb=# INSERT INTO c_tabl VALUES('abc', 'efg', '123'); gaussdb=# INSERT INTO c_tabl VALUES(NULL, 'efg', '123'); gaussdb=# INSERT INTO c_tabl VALUES(NULL, NULL, '123'); gaussdb=# SELECT description, short_description, last_value, COALESCE(description, short_description, last_value) FROM c_tabl ORDER BY 1, 2, 3, 4; description | short_description | last_value | coalesce -------------+-------------------+------------+---------- abc | efg | 123 | abc | efg | 123 | efg | | 123 | 123 (3 rows) gaussdb=# DROP TABLE c_tabl; 如果description不为NULL,则返回description的值,否则计算下一个参数short_description;如果short_description不为NULL,则返回short_description的值,否则计算下一个参数last_value;如果last_value不为NULL,则返回last_value的值,否则返回(none)。 1 2 3 4 5 gaussdb=# SELECT COALESCE(NULL,'Hello World'); coalesce --------------- Hello World (1 row) NULLIF NULLIF的语法图如图4所示。 图4 nullif::= 只有当value1和value2相等时,NULLIF才返回NULL。否则它返回value1。支持对XML类型数据操作。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 gaussdb=# CREATE TABLE null_if_t1 ( NI_VALUE1 VARCHAR(10), NI_VALUE2 VARCHAR(10) )DISTRIBUTE BY HASH (NI_VALUE1); gaussdb=# INSERT INTO null_if_t1 VALUES('abc', 'abc'); gaussdb=# INSERT INTO null_if_t1 VALUES('abc', 'efg'); gaussdb=# SELECT NI_VALUE1, NI_VALUE2, NULLIF(NI_VALUE1, NI_VALUE2) FROM null_if_t1 ORDER BY 1, 2, 3; ni_value1 | ni_value2 | nullif -----------+-----------+-------- abc | abc | abc | efg | abc (2 rows) gaussdb=# DROP TABLE null_if_t1; 如果value1等于value2则返回NULL,否则返回value1。 1 2 3 4 5 gaussdb=# SELECT NULLIF('Hello','Hello World'); nullif -------- Hello (1 row) GREATEST(最大值),LEAST(最小值) GREATEST的语法图如图5所示。 图5 greatest::= 从一个任意数字表达式的列表里选取最大的数值。支持对XML类型数据操作。 1 2 3 4 5 gaussdb=# SELECT greatest(9000,155555,2.01); greatest ---------- 155555 (1 row) LEAST的语法图如图6所示。 图6 least::= 从一个任意数字表达式的列表里选取最小的数值。 以上的数字表达式必须都可以转换成一个普通的数据类型,该数据类型将是结果类型。 列表中的NULL值将被忽略。只有所有表达式的结果都是NULL的时候,结果才是NULL。 支持对XML类型数据操作。 1 2 3 4 5 gaussdb=# SELECT least(9000,2); least ------- 2 (1 row) 示例请参见条件表达式函数。 NVL NVL的语法图如图7所示。 图7 nvl::= 如果value1为NULL,则返回value2,如果value1非NULL,则返回value1。支持对XML类型数据操作。 示例: 1 2 3 4 5 gaussdb=# SELECT nvl(null,1); nvl ----- 1 (1 row) 1 2 3 4 5 gaussdb=# SELECT nvl('Hello World',1); nvl --------------- Hello World (1 row) 父主题: 表达式
共100000条