华为云用户手册

  • to_char(datetime/interval [, fmt]) 描述:将一个DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE或者TIMESTAMP WITH LOCAL TIME ZONE类型的DATETIME或者INTERVAL值按照fmt(用于格式化日期和时间值的模板)指定的格式转换为TEXT类型。 fmt可以为以下几类:日期、时间、星期、季度和世纪。每类都可以有不同的模板,模板之间可以合理组合,常见的模板有:HH、MI、SS、YYYY、MM、DD,详情请参见表1。 fmt可以有修饰词,常用的修饰词是FM,可以用来判断排查前导的零或尾随的空白。 返回值类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT to_char(current_timestamp,'HH12:MI:SS'); to_char ---------- 10:19:26 (1 row) 1 2 3 4 5 gaussdb=# SELECT to_char(current_timestamp,'FMHH12:FMMI:FMSS'); to_char ---------- 10:19:46 (1 row)
  • to_binary_float(expr DEFAULT return_value ON CONVERSION ERROR, fmt) 描述:将expr经过指定的fmt匹配后转换成float4类型的数值,若失败则返回默认值return_value。 参数:expr/fmt支持char、nchar、varchar2、nvarchar2类型的字符串,expr还支持可以隐式转换为字符串类型的数值类型。 返回类型:float4 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT to_binary_float('12-' DEFAULT 10 ON CONVERSION ERROR, '99S'); to_binary_float ------------------ -12 (1 row) gaussdb=# SELECT to_binary_float('aa-' DEFAULT 12 ON CONVERSION ERROR, '99S'); to_binary_float ------------------ 12 (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s2的情况下,支持to_binary_float函数。
  • to_blob(raw) 描述:将RAW类型转成BLOB类型。 返回值类型:blob 示例: 1 2 3 4 5 gaussdb=# SELECT to_blob('0AADD343CDBBD'::RAW(10)); to_blob ---------------- 00AADD343CDBBD (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s2的情况下,支持to_blob函数。
  • to_binary_double(expr) 描述:将expr转换成float8类型的值。 参数:expr支持number、float4、float8数值类型,以及可以隐式转换为数值类型的字符串。 返回值类型:float8 示例: 1 2 3 4 5 gaussdb=# SELECT to_binary_double('12345678'); to_binary_double ------------------ 12345678 (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s2的情况下,支持to_binary_double函数。
  • to_binary_double(expr DEFAULT return_value ON CONVERSION ERROR) 描述:将expr转换成float8类型的值,若失败则返回默认值return_value。 参数:expr支持number、float4、float8数值类型,以及可以隐式转换为字符串的数值类型。当expr为非数值类型或非字符串类型时,则会报错。 返回值类型:float8 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT to_binary_double(1e2 DEFAULT 12 ON CONVERSION ERROR); to_binary_double ------------------ 100 (1 row) gaussdb=# SELECT to_binary_double('aa' DEFAULT 12 ON CONVERSION ERROR); to_binary_double ------------------ 12 (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s2的情况下,支持to_binary_double函数。
  • to_binary_float(expr) 描述:将expr转换成float4类型的值。 参数:expr支持number、float4、float8数值类型,以及可以隐式转换为数值类型的字符串。 返回值类型:float4 示例: 1 2 3 4 5 gaussdb=# SELECT to_binary_float('12345678'); to_binary_float ------------------ 1.23457e+07 (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s2的情况下,支持to_binary_float函数。
  • to_binary_float(expr DEFAULT return_value ON CONVERSION ERROR) 描述:将expr转换成float4类型的值,若失败则返回默认值return_value。 参数:expr支持number、float4、float8数值类型,以及可以隐式转换为字符串的数值类型,当expr为非数值类型或非字符串类型时,则会报错。 返回值类型:float4 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT to_binary_float(1e2 DEFAULT 12 ON CONVERSION ERROR); to_binary_float ------------------ 100 (1 row) gaussdb=# SELECT to_binary_float('aa' DEFAULT 12 ON CONVERSION ERROR); to_binay_float ------------------ 12 (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s2的情况下,支持to_binary_float函数。
  • to_binary_double(expr, fmt) 描述:将expr经过指定的fmt匹配后转换成float8类型的数值。 参数:expr/fmt支持char、nchar、varchar2、nvarchar2类型的字符串,expr还支持可以隐式转换为字符串类型的数值类型。 返回值类型:float8 示例: 1 2 3 4 5 gaussdb=# SELECT to_binary_double('1,2,3', '9,9,9'); to_binary_double ------------------ 123 (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s2的情况下,支持to_binary_double函数。
  • to_binary_double(expr DEFAULT return_value ON CONVERSION ERROR, fmt) 描述:将expr经过指定的fmt匹配后转换成float8类型的数值,若失败则返回默认值return_value。 参数:expr/fmt支持char、nchar、varchar2、nvarchar2类型的字符串,expr还支持可以隐式转换为字符串的数值类型。 返回类型:float8 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT to_binary_double('12-' DEFAULT 10 ON CONVERSION ERROR, '99S'); to_binary_double ------------------ -12 (1 row) gaussdb=# SELECT to_binary_double('aa-' DEFAULT 12 ON CONVERSION ERROR, '99S'); to_binary_double ------------------ 12 (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s2的情况下,支持to_binary_double函数。
  • to_binary_float(expr, fmt) 描述:将expr经过指定的fmt匹配后转换成float4类型的数值。 参数:expr/fmt支持char、nchar、varchar2、nvarchar2类型的字符串,expr还支持可以隐式转换为字符串类型的数值类型。 返回值类型:float4 示例: 1 2 3 4 5 gaussdb=# SELECT to_binary_float('1,2,3', '9,9,9'); to_binary_float ------------------ 123 (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s2的情况下,支持to_binary_float函数。
  • rawtohex2(any) 描述:将一个二进制构成的字符串转换为十六进制的字符串。结果为输入字符的A CS II码,以十六进制表示。支持'/'作为正常字符解析,不做转义处理。当输入为空时,输出也为空。 返回值类型:text 示例: gaussdb=# SET a_format_version='10c'; SET gaussdb=# SET a_format_dev_version='s2'; SET gaussdb=# SELECT rawtohex2('12\n?$\123/2'); rawtohex2 -------------------------- 31325C6E3F245C3132332F32 (1 row)
  • cast(x as y [DEFAULT z ON CONVERSION ERROR][,fmt]) 描述:类型转换函数,将x转换成y指定的类型。当sql_compatibility = 'B'时,设置参数b_format_version = '5.7'、b_format_dev_version = 's1'后,若y是char类型,则该函数会将x转换成varchar类型。 参数: x为该函数中待转换的数据,其类型和值需要支持转换为目标类型y。 DEFAULT z ON CONVERSION ERROR为可选参数,当尝试将x转换成y指定的类型失败时,则将z转换成y指定的类型。 fmt为可选参数,当y是以下数据类型时可以指定fmt参数: int1/int2/int4/int8/int16/float4/float8/numeric:则fmt的作用与to_number(expr [,fmt])函数相同。 date/timestamp/timestamp with time zone:则fmt的作用与to_date(string [,fmt])/to_timestamp(string [,fmt]) /to_timestamp_tz(string [,fmt])函数相同。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 gaussdb=# SELECT cast('22-oct-1997' as timestamp); timestamp --------------------- 1997-10-22 00:00:00 (1 row) gaussdb=# SELECT cast('22-ocX-1997' as timestamp DEFAULT '22-oct-1997' ON CONVERSION ERROR, 'DD-Mon-YYYY'); timestamp --------------------- 1997-10-22 00:00:00 (1 row) gaussdb=# CREATE DATABASE gaussdb_m WITH dbcompatibility 'b'; gaussdb=# \c gaussdb_m -- 设置兼容版本控制参数 gaussdb_m=# SET b_format_version='5.7'; gaussdb_m=# SET b_format_dev_version='s1'; gaussdb_m=# SELECT cast('aaa' as char); varchar --------- aaa (1 row) 在参数a_format_version值为10c且a_format_dev_version值为s1的情况下,支持DEFAULT z ON CONVERSION ERROR及fmt语法。
  • cast(x AS {SIGNED | UNSIGNED} [INT | INTEGER]) 描述:类型转换函数,将x转换成BIGINT SIGNED或BIGINT UNSIGNED类型。 参数:x是该函数中待转换的数据,其类型和值需要支持转换为目标类型INT。 返回值类型:BIGINT SIGNED或BIGINT UNSIGNED 示例: 1 2 3 4 5 gaussdb=# SELECT CAST(12 AS UNSIGNED); uint8 ------- 12 (1 row)
  • bit2coding(text) 描述:读取两个字节长度的字符,按小端存储逻辑保存,然后将每个字符解析成十六进制ASCII码值,最后将整体转换为十进制数。 返回值类型:int 示例: gaussdb=# SET a_format_version='10c'; SET gaussdb=# SET a_format_dev_version='s2'; SET gaussdb=# SELECT bit2coding('1234567890'); bit2coding ------------ 12849 (1 row)
  • bit4coding(text) 描述:读取四个字节长度的字符,按小端存储逻辑保存,然后将每个字符解析成十六进制ASCII码值,最后将整体转换为十进制数。 返回值类型:int 示例: gaussdb=# SET a_format_version='10c'; SET gaussdb=# SET a_format_dev_version='s2'; SET gaussdb=# SELECT bit4coding('1234567890'); bit4coding ------------ 875770417 (1 row)
  • gs_search_function_with_name(funcname) 描述:获取函数名为funcname的函数OID。 参数类型:cstring 返回值类型:setof oid 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 --基本用法。 CREATE OR REPLACE FUNCTION proc_plpgsql(a int,b int, c int) RETURNS int AS $BODY$ DECLARE BEGIN RETURN $1 + $2; END; $BODY$ language plpgsql; CREATE OR REPLACE FUNCTION proc_plpgsql(int,int) RETURNS int AS $BODY$ DECLARE BEGIN RETURN $1 + $2; END; $BODY$ language plpgsql; gaussdb=# SELECT gs_search_function_with_name('proc_plpgsql'); gs_search_function_with_name ------------------------------ 16776 24576 (2 rows)
  • 数据存在错误时需要支持容错的导入场景 当使用COPY或 \COPY命令执行数据导入时,若检测到数据异常,系统将默认终止导入任务。为此, GaussDB 提供了两种容错机制:智能修正模式与严格校验模式。建议优先采用严格校验模式(Level1容错等级),该模式可在保证数据完整性的前提下跳过异常记录并且不会对导入性能影响造成太大的影响。详细信息可参考数据存在错误时的导入操作指南。 以下是严格校验模式Level1容错等级的导入命令: 1 2 3 4 5 6 7 8 9 10 11 --CSV格式 \COPY {data_destination} from '/path/export.txt' log errors reject limit '{limit_num}' encoding {file_encoding} CSV; --BINARY格式 \COPY {data_destination} from '/path/export.txt' log errors reject limit '{limit_num}' encoding {file_encoding} BINARY; --FIXED格式 \COPY {data_destination} from '/path/export.txt' log errors reject limit '{limit_num}' encoding {file_encoding} FIXED; --TEXT格式 \COPY {data_destination} from '/path/export.txt' log errors reject limit '{limit_num}' encoding {file_encoding}; --data_destination 只能是一个表名称 --file_encoding 表示该二进制文件导出时指定的编码格式 --limit_num 表示数据导入时容错行数的上限,一旦此COPY FROM语句错误数据超过选项指定条数,则会按照原有机制报错。 如果是普通用户期望使用该特性时,需要对该用户赋权容错特性两张系统表的相关权限,具体SQL如下: 1 2 grant insert,select,delete on pgxc_copy_error_log to {user_name}; grant insert,select,delete on gs_copy_summary to {user_name}; 父主题: 典型场景
  • 最佳实践 通常建议在业务低谷期打开spm_enable_plan_capture为STORE进行计划捕获,在批量执行业务完成后,打开历史记录开关spm_enable_plan_history_logging进行跳变历史记录。 在发生计划跳变时,可参考如下步骤操作。 获取unique_sql_id,比如通过statement_history查询。 gaussdb=# SELECT unique_query_id FROM DBE_PERF.statement_history; 根据unique_sql_id从PG_CATA LOG .GS_SPM_ID_HASH_JOIN中查出sql_hash。 gaussdb=# SELECT sql_hash FROM PG_CATALOG.gs_spm_id_hash_join WHERE unique_sql_id = $unique_query_id; 根据sql_hash和发生跳变的历史时间,利用系统函数(DBE_SQL_UTIL.GS_SPM_GET_PLAN_HISTORY)/视图(PG_CATALOG.GS_SPM_PLAN_HISTORY_DETAIL) /系统表(PG_CATALOG.GS_SPM_PLAN_HISTORY)中查出跳变历史。 gaussdb=# SELECT * FROM pg_catalog.gs_spm_plan_history WHERE sql_hash = $sql_hash; 锁定发生跳变的计划后,找出其plan_hash,并利用系统函数(DBE_SQL_UTIL.GS_SPM_ACCEPT_HISTORICAL_PLAN)接受指定时间的历史计划,或者直接使用系统函数(DBE_SQL_UTIL.GS_SPM_SET_PLAN_STATUS)来完成对应基线状态的设置,可设置为ACC/FIXED。 gaussdb=# SELECT dbe_sql_util.gs_spm_accept_historical_plan($sql_hash, $given_time, 'ACC'); 打开spm_enable_plan_selection完成计划快速回退。 gaussdb=# SET spm_enable_plan_selection = ON; 本特性仅支持Generic Plan。 与本特性相关的GUC参数有spm_enable_plan_history_logging,spm_enable_plan_history_logging_expired_time和spm_plan_history_reserved_percentage。 由于gs_spm_plan_history可写入记录数存在上限,因此新增GUC参数spm_plan_history_reserved_percentage用于指定gs_spm_plan_history可被占用的百分比。 快速感知和快速回退要求必须设置spm_enable_plan_capture = STORE 且 spm_enable_plan_history_logging = on。 该特性旨在解决当生成新计划时导致的计划跳变,对于智能优化器从现存的多个计划中进行最佳计划选择导致的计划变化,若未超出过期时间,则不属于新计划产生导致的计划跳变,不属于特性支持范围。
  • 功能描述 GaussDB当前已有慢查询相关视图,并具备了SPM的基础能力。然而,当发生计划跳变时,无法对非慢查询的执行计划进行历史记录。因此,本特性在基于SPM的基础上,对历史执行计划进行记录,以提升SPM的易用性。由于SPM当前仅支持Generic-Plan,因此本功能所管理的计划类型限定在Generic-Plan。 当前计划跳变存在两种主要情况: 优化器对相同查询产生了不同的执行计划,并最终选用了新的计划。 每次执行时,优化器在历史已有的计划中切换。 这两种事件,均被称为跳变事件。 由于本特性涉及对计划跳变的快速感知和快速恢复两部分,以下将分别进行简明介绍。 快速感知 如果要实现全量的计划跳变历史记录,最直接的方法是记录每次执行计划与上一次的不同。这种方法会带来极大的性能开销。因此,出于性能和资源的考虑,本特性在以下两种场景进行跳变事件记录: 当优化器产生了SPM的baseline中不存在的新的计划。 当优化器产生了SPM的baseline中存在的,但超过一段时间未执行的老计划。 具体的执行流程,如图1所示。 图1 计划跳变支持快速感知流程图 此特性需要保证GUC参数spm_enable_plan_capture设置为STORE模式,且打开跳变历史记录开关spm_enable_plan_history_logging。 从图1可知,除了以下情况,均会对因产生新计划导致的跳变事件进行记录。 场景一:如果当前所捕获的基线个数已经超出上限 (spm_plan_capture_max_plannum),则查看当前计划是否是SPM所捕获过的查询的新计划。当前spm_enable_plan_history_logging打开并且历史记录数未超过上限,则进行额外的基线捕获,并进行历史记录。 场景二:如果当前所记录的跳变事件个数已经超出上限 (spm_plan_capture_max_plannum),则不进行历史记录。 为了确保在长期运行中能够记录更多的跳变历史,SPM会设置定时任务,在数据库启动起的每24小时触发一次历史记录清理,其校验准则是查看当前的历史记录数占最大上限的百分比,若超出此百分比,则会删除一些最旧的历史记录以保证记录数在此百分比要求之下,此百分比由spm_plan_history_reserved_percentage设置。 快速恢复 当发生计划跳变时,可以通过设置历史时间点的某条计划相应的baseline状态为ACC/FIXED,再结合计划选择功能spm_enable_plan_selection,即可实现回退至历史计划完成计划固化,也即完成快速回退。
  • array_next(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的下一个元素的下标。 返回类型:int 示例: gaussdb=# SELECT array_next(ARRAY[1,8,3,7],1) AS RESULT; result -------- 2 (1 row) 如果第一个参数为null开启参数varray_compat后会报错Reference to uninitialized collection,开启前返回NULL。
  • unnest(anynesttable) 描述:返回nesttable中的元素集合。 返回类型:setof anyelement 约束:不支持tableof类型嵌套tableof类型或者tableof嵌套其他类型再嵌套tableof类型的情况。 示例: 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 CREATE OR REPLACE PROCEDURE f1() AS TYPE t1 IS TABLE of INT; v2 t1 := t1(null, 2, 3, 4, null); tmp INT; CURSOR c1 IS SELECT * FROM unnest(v2); BEGIN OPEN c1; FOR i IN 1 .. v2.count LOOP FETCH c1 INTO tmp; IF tmp IS null THEN dbe_output.print_line(i || ': is null'); ELSE dbe_output.print_line(i || ': ' || tmp); END IF; END LOOP; CLOSE c1; END; / gaussdb=# CALL f1(); 1: is null 2: 2 3: 3 4: 4 5: is null f1 ---- (1 row)
  • array_extendnull(anyarray, int, int) 描述:往数组尾部添加指定个数的指定索引的元素。 返回类型:anyarray 示例: gaussdb=# SELECT array_extendnull(ARRAY[1,8,3,7],2,2) AS RESULT; result -------------- {1,8,3,7,8,8} (1 row) array_extendnull(anyarray, int, int)此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。 如果第一个参数为null开启参数varray_compat后会报错Reference to uninitialized collection,开启前返回NULL;如果第二个参数或者第三个参数为NULL,开启参数前返回NULL,开启后返回原数组。
  • array_trim(anyarray, int) 描述:从数组尾部删除指定个数个元素。 返回类型:anyarray 示例: gaussdb=# SELECT array_trim(ARRAY[1,8,3,7],1) AS RESULT; result --------- {1,8,3} (1 row) 如果第一个参数为null开启参数varray_compat后会报错Reference to uninitialized collection,开启前返回NULL;如果第二个参数为NULL,开启参数前返回NULL,开启后返回原数组;如果第二个参数超过数组元素个数(包括0即空数组)时开启参数后会报错Subscript outside of count,开启前返回空数组,如果第二个参数小于0开启后报错numeric or value error,开启前返回原数组。
  • array_prior(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的上一个元素的下标。 返回类型:int 示例: gaussdb=# SELECT array_prior(ARRAY[1,8,3,7],2) AS RESULT; result -------- 1 (1 row) 如果第一个参数为null开启参数varray_compat后会报错Reference to uninitialized collection,开启前返回NULL。
  • string_to_array(text, text [, text]) 描述:使用第二个text指定分隔符,使用第三个可选的text作为NULL值替换模板,如果分隔后的子串与第三个可选的text完全匹配,则将其替换为NULL。 返回类型:text[] 示例: 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy') AS RESULT; result -------------- {xx,NULL,zz} (1 row) gaussdb=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'y') AS RESULT; result ------------ {xx,yy,zz} (1 row)
  • array_positions(anyarray, anyelement) 描述:返回作为第一个参数给出的数组中所有出现的第二个参数的下标的数组。 返回类型:int[] 示例: gaussdb=# SELECT array_positions(array[1, 2, 3, 1], 1) AS RESULT; result -------- {1,4} (1 row) 数组必须是一维的。 第二个参数可以设置为NULL。 如果数组中找不到第二个参数,返回空数组。
  • array_upper(anyarray, int) 描述:返回指定数组维数的上界。int为指定数组维度。 返回类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT array_upper(ARRAY[1,8,3,7], 1) AS RESULT; result -------- 4 (1 row) 如果第一个参数为null开启参数varray_compat后会报错Reference to uninitialized collection,开启前返回NULL。
  • array_to_string(anyarray, text [, text]) 描述:使用第一个text作为数组的新分隔符,使用第二个text替换数组值为NULL的值。 返回类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') AS RESULT; result ----------- 1,2,3,*,5 (1 row)
  • array_extendnull(anyarray, int) 描述:往数组尾部添加指定个数的NULL空元素。 返回类型:anyarray 示例: gaussdb=# SELECT array_extendnull(ARRAY[1,8,3,7],1) AS RESULT; result -------------- {1,8,3,7,null} (1 row) 如果第一个参数为null开启参数varray_compat后会报错Reference to uninitialized collection,开启前返回NULL;如果第二个参数为NULL,开启参数前返回NULL,开启后返回原数组;若第二个参数小于0开启参数后报错numeric or value error开启前返回原数组。
  • array_length(anyarray, int) 描述:返回指定数组维度的长度。int为指定数组维度。 返回类型:int 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT array_length(array[1,2,3], 1) AS RESULT; result -------- 3 (1 row) gaussdb=# SELECT array_length(array[[1,2,3],[4,5,6]], 2) AS RESULT; result -------- 3 (1 row)
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全