华为云用户手册

  • 模式匹配操作符 数据库提供了三种独立的实现模式匹配的方法:SQL LIKE操作符、SIMILAR TO操作符和POSIX-风格的正则表达式。除了这些基本的操作符外,还有一些函数可用于提取或替换匹配子串并在匹配位置分离一个串。 LIKE 描述:判断字符串是否能匹配上LIKE后的模式字符串。如果字符串与提供的模式匹配,则LIKE表达式返回为真(NOT LIKE表达式返回假),否则返回为假(NOT LIKE表达式返回真)。 匹配规则: 此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 要匹配文本里的下划线或者百分号,在提供的模式里相应字符必须前导逃逸字符。逃逸字符的作用是禁用元字符的特殊含义,缺省的逃逸字符是反斜线,也可以用ESCAPE子句指定一个不同的逃逸字符。 要匹配逃逸字符本身,写两个逃逸字符。例如要写一个包含反斜线的模式常量,那你就要在SQL语句里写两个反斜线。 参数standard_conforming_strings设置为off时,在文串常量中写的任何反斜线都需要被双写。因此,写一个匹配单个反斜线的模式实际上要在语句里写四个反斜线。(你可以通过用ESCAPE选择一个不同的逃逸字符来避免这种情况,这样反斜线就不再是LIKE的特殊字符了。但仍然是字符文本分析器的特殊字符,所以你还是需要两个反斜线。)也可以通过写“ESCAPE”的方式不选择逃逸字符,这样可以有效地禁用逃逸机制,但是没有办法关闭下划线和百分号在模式中的特殊含义。 关键字ILIKE可以用于替换LIKE,区别是LIKE大小写敏感,ILIKE大小写不敏感。 操作符~~等效于LIKE,操作符~~*等效于ILIKE。 示例: 1 2 3 4 5 openGauss=# SELECT 'abc' LIKE 'abc' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' LIKE 'a%' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' LIKE '_b_' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' LIKE 'c' AS RESULT; result ----------- f (1 row) SIMILAR TO 描述:SIMILAR TO操作符根据自己的模式是否匹配给定串而返回真或者假。他和LIKE非常类似,只不过他使用SQL标准定义的正则表达式理解模式。 匹配规则: 和LIKE一样,此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 SIMILAR TO也支持下面这些从POSIX正则表达式借用的模式匹配元字符。 元字符 含义 | 表示选择(两个候选之一) * 表示重复前面的项零次或更多次 + 表示重复前面的项一次或更多次 ? 表示重复前面的项零次或一次 {m} 表示重复前面的项刚好m次 {m,} 表示重复前面的项m次或更多次 {m,n} 表示重复前面的项至少m次并且不超过n次 () 把多个项组合成一个逻辑项 [...] 声明一个字符类,就像POSIX正则表达式一样 前导逃逸字符可以禁止所有这些元字符的特殊含义。逃逸字符的使用规则和LIKE一样。 正则表达式函数: 支持使用函数substring(string from pattern for escape)截取匹配SQL正则表达式的子字符串。 示例: 1 2 3 4 5 openGauss=# SELECT 'abc' SIMILAR TO 'abc' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' SIMILAR TO 'a' AS RESULT; result ----------- f (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' SIMILAR TO '%(b|d)%' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' SIMILAR TO '(b|c)%' AS RESULT; result ----------- f (1 row) POSIX正则表达式 描述:正则表达式是一个字符序列,它是定义一个串集合 (一个正则集)的缩写。 如果一个串是正则表达式描述的正则集中的一员时, 就说这个串匹配该正则表达式。 POSIX正则表达式提供了比LIKE和SIMILAR TO操作符更强大的含义。表 1 正则表达式匹配操作符列出了所有可用于POSIX正则表达式模式匹配的操作符。 表1 正则表达式匹配操作符 操作符 描述 例子 ~ 匹配正则表达式,大小写敏感 'thomas' ~ '.*thomas.*' ~* 匹配正则表达式,大小写不敏感 'thomas' ~* '.*Thomas.*' !~ 不匹配正则表达式,大小写敏感 'thomas' !~ '.*Thomas.*' !~* 不匹配正则表达式,大小写不敏感 'thomas' !~* '.*vadim.*' 匹配规则: 与LIKE不同,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。 除了上文提到的元字符外, POSIX正则表达式还支持下列模式匹配元字符。 元字符 含义 ^ 表示串开头的匹配 $ 表示串末尾的匹配 . 匹配任意单个字符 正则表达式函数: POSIX正则表达式支持下面函数。 substring(string from pattern)函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。 regexp_count(string text, pattern text [, position int [, flags text]])函数提供了获取匹配POSIX正则表达式模式的子串数量的功能。 regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]])函数提供了获取匹配POSIX正则表达式模式子串位置的功能。 regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]])函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。 regexp_replace(string, pattern, replacement [,flags ])函数提供了将匹配POSIX正则表达式模式的子串替换为新文本的功能。 regexp_matches(string text, pattern text [, flags text])函数返回一个文本数组,该数组由匹配一个POSIX正则表达式模式得到的所有被捕获子串构成。 regexp_split_to_table(string text, pattern text [, flags text])函数把一个POSIX正则表达式模式当作一个定界符来分离一个串。 regexp_split_to_array(string text, pattern text [, flags text ])和regexp_split_to_table类似,是一个正则表达式分离函数,不过它的结果以一个text数组的形式返回。 正则表达式分离函数会忽略零长度的匹配,这种匹配发生在串的开头或结尾或者正好发生在前一个匹配之后。这和正则表达式匹配的严格定义是相悖的,后者由regexp_matches实现,但是通常前者是实际中最常用的行为。 示例: 1 2 3 4 5 openGauss=# SELECT 'abc' ~ 'Abc' AS RESULT; result -------- f (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' ~* 'Abc' AS RESULT; result -------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' !~ 'Abc' AS RESULT; result -------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc'!~* 'Abc' AS RESULT; result -------- f (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' ~ '^a' AS RESULT; result -------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' ~ '(b|d)'AS RESULT; result -------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' ~ '^(b|c)'AS RESULT; result -------- f (1 row) 虽然大部分的正则表达式搜索都能很快地执行,但是正则表达式仍可能被人为地处理成需要任意长的时间和任意量的内存。不建议从非安全模式来源接受正则表达式搜索模式,如果必须这样做,建议加上语句超时限制。使用SIMILAR TO模式的搜索具有同样的安全性危险, 因为SIMILAR TO提供了很多和POSIX-风格正则表达式相同的能力。LIKE搜索比其他两种选项简单得多,因此在接受非安全模式来源搜索时要更安全些。 父主题: 函数和操作符
  • _PG_FOREIGN_DATA_WRAPPERS 显示外部数据封装器的信息。该视图只有sysadmin权限可以查看。 表1 _PG_FOREIGN_DATA_WRAPPERS字段 名称 类型 描述 oid oid 外部数据封装器的oid。 fdwowner oid 外部数据封装器的所有者的oid。 fdwoptions text[] 外部数据封装器指定选项,使用“keyword=value”格式的字符串。 foreign_data_wrapper_catalog information_schema.sql_identifier 外部封装器所在的数据库名称(永远为当前数据库)。 foreign_data_wrapper_name information_schema.sql_identifier 外部数据封装器名称。 authorization_identifier information_schema.sql_identifier 外部数据封装器所有者的角色名称。 foreign_data_wrapper_language information_schema.character_data 外部数据封装器的实现语言。 父主题: Information Schema
  • 语法格式 ALTER AUDIT POLICY [ IF EXISTS ] policy_name { ADD | REMOVE } { [ privilege_audit_clause ] [ access_audit_clause ] }; ALTER AUDIT POLICY [ IF EXISTS ] policy_name MODIFY ( filter_group_clause ); ALTER AUDIT POLICY [ IF EXISTS ] policy_name DROP FILTER; ALTER AUDIT POLICY [ IF EXISTS ] policy_name COMMENTS policy_comments; ALTER AUDIT POLICY [ IF EXISTS ] policy_name { ENABLE | DISABLE }; privilege_audit_clause: 1 PRIVILEGES ({ DDL | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]) access_audit_clause: AC CES S ({ DML | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ])
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复; 取值范围:字符串,要符合标识符命名规范。 DDL 指的是针对数据库执行如下操作时进行审计,目前支持:ALTER、ANALYZE、COMMENT、CREATE、DROP、GRANT、REVOKE、SET、SHOW、 LOG IN_ACCESS、LOGIN_FAILURE、LOGOUT、LOGIN。 DML 指的是针对数据库执行如下操作时进行审计,目前支持:COPY、DEALLOCATE、DELETE_P、EXECUTE、REINDEX、INSERT、PREPARE、SELECT、TRUNCATE、UPDATE。 ALL 指的是上述DDL或DML中支持的所有对数据库的操作。当形式为{ DDL | ALL }时,ALL指所有DDL操作;当形式为{ DML | ALL }时,ALL指所有DML操作。 filter_type 指定审计策略的过滤信息,过滤类型包括:IP、ROLES、APP。 filter_value 指具体过滤信息内容。 policy_comments 用于记录策略相关的描述信息。 ENABLE|DISABLE 可以打开或关闭统一审计策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 示例 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 --创建表 openGauss=# CREATE TABLE sections_t1 ( section NUMBER(4) , section_name VARCHAR2(30), manager_id NUMBER(6), place_id NUMBER(4) ) DISTRIBUTE BY hash(manager_id); --声明变量 openGauss=# DECLARE section NUMBER(4) := 280; section_name VARCHAR2(30) := 'Info support'; manager_id NUMBER(6) := 103; place_id NUMBER(4) := 1400; new_colname VARCHAR2(10) := 'sec_name'; BEGIN --执行查询 EXECUTE IMMEDIATE 'insert into sections_t1 values(:1, :2, :3, :4)' USING section, section_name, manager_id,place_id; --执行查询(重复占位符) EXECUTE IMMEDIATE 'insert into sections_t1 values(:1, :2, :3, :1)' USING section, section_name, manager_id; --执行ALTER语句(建议采用“||”拼接数据库对象构造DDL语句) EXECUTE IMMEDIATE 'alter table sections_t1 rename section_name to ' || new_colname; END; / --查询数据 openGauss=# SELECT * FROM sections_t1; --删除表 openGauss=# DROP TABLE sections_t1;
  • 语法 语法请参见图1。 图1 noselect::= using_clause子句的语法参见图2。 图2 using_clause::= 对以上语法格式的解释如下: USING IN bind_argument用于指定存放传递给动态SQL值的变量,在dynamic_noselect_string中存在占位符时使用,即动态SQL语句执行时,bind_argument将替换相对应的占位符。要注意的是,bind_argument只能是值、变量或表达式,不能是表名、列名、数据类型等数据库对象。如果存储过程需要通过声明参数传递数据库对象来构造动态SQL语句(常见于执行DDL语句时),建议采用连接运算符“||”拼接dynamic_select_clause。另外,动态语句允许出现重复的占位符,相同占位符只能与唯一一个bind_argument按位置一一对应。
  • REPLICATION_STAT REPLICATION_STAT用于描述日志同步状态信息,如发起端发送日志位置、收端接收日志位置等。 表1 REPLICATION_STAT字段 名称 类型 描述 pid bigint 线程的PID。 usesysid oid 用户系统ID。 usename name 用户名。 application_name text 程序名称。 client_addr inet 客户端地址。 client_hostname text 客户端名。 client_port integer 客户端端口。 backend_start timestamp with time zone 程序启动时间。 state text 日志复制的状态: 追赶状态。 一致的流状态。 sender_sent_location text 发送端发送日志位置。 receiver_write_location text 接收端write日志位置。 receiver_flush_location text 接收端flush日志位置。 receiver_replay_location text 接收端replay日志位置。 sync_priority integer 同步复制的优先级(0表示异步)。 sync_state text 同步状态: 异步复制。 同步复制。 潜在同步者。 父主题: Utility
  • STREAMING_CONT_QUERY STREAMING_CONT_QUERY系统表存储所有CONTVIEW对象的元数据信息。 表1 STREAMING_CONT_QUERY字段 名称 类型 描述 id integer CONTVIEW对象唯一的标识符,不可重复。 type "char" 标识CONTVIEW的类型。 'r':表示该CONTVIEW是基于行存存储模型。 relid oid CONTVIEW对象的标识。 defrelid oid CONTVIEW对应的持续计算规则VIEW的标识。 active boolean 标识CONTVIEW是否处于持续计算状态。 t(true):表示是。 f(false):表示不是。 streamrelid oid CONTVIEW对应的STREAM的标识。 matrelid oid CONTVIEW对应物化表的标识。 lookupidxid oid CONTVIEW对应GROUP LOOK UP INDEX的标识,此字段内部使用,仅行存具有。 step_factor smallint 标识CONTVIEW的步进模式。主要取值为0(无重叠窗口)和1(滑动窗口,步长为1)。 ttl integer CONTVIEW设置的ttl_interval参数值。 ttl_attno smallint CONTVIEW设置的TTL功能对应时间列的字段编号。 dictrelid oid CONTVIEW对应字典表的标识。 grpnum smallint CONTVIEW持续计算规则中维度列的个数,此字段内部使用。 grpidx int2vector CONTVIEW持续计算规则中维度列在TARGET LIST的索引,此字段内部使用。 父主题: 系统表
  • PG_AUTHID PG_AUTHID系统表存储有关数据库认证标识符(角色)的信息。角色把“用户”的概念包含在内。一个用户实际上就是一个rolcanlogin标志被设置的角色。任何角色(不管rolcanlogin设置与否)都能够把其他角色作为成员。 在一个集群中只有一份pg_authid,不是每个数据库有一份。需要有系统管理员权限才可以访问此系统表。 表1 PG_AUTHID字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 rolname name 角色名称。 rolsuper boolean 角色是否是拥有最高权限的初始系统管理员。 t(true):表示是。 f(false):表示不是。 rolinherit boolean 角色是否自动继承其所属角色的权限。 t(true):表示自动继承。 f(false):表示不自动继承。 rolcreaterole boolean 角色是否可以创建更多角色。 t(true):表示可以。 f(false):表示不可以。 rolcreatedb boolean 角色是否可以创建数据库。 t(true):表示可以。 f(false):表示不可以。 rolcatupdate boolean 角色是否可以直接更新系统表。只有usesysid=10的初始系统管理员拥有此权限。其他用户无法获得此权限。 t(true):表示可以。 f(false):表示不可以。 rolcanlogin boolean 角色是否可以登录,也就是说,这个角色可以给予会话认证标识符。 t(true):表示可以。 f(false):表示不可以。 rolreplication boolean 角色是否具有复制权限。 t(true):表示有。 f(false):表示没有。 rolauditadmin boolean 角色是否具有审计管理员权限。 t(true):表示有。 f(false):表示没有。 rolsystemadmin boolean 角色是否具有系统管理员权限。 t(true):表示有。 f(false):表示没有。 rolconnlimit integer 对于可以登录的角色,限制其最大并发连接数量。 -1 表示没有限制。 rolpassword text 口令密文,如果没有口令,则为NULL。 rolvalidbegin timestamp with time zone 账户的有效开始时间,如果没有开始时间,则为NULL。 rolvaliduntil timestamp with time zone 账户的有效结束时间,如果没有结束时间,则为NULL。 roluseft boolean 角色是否可以操作外表。 t(true):表示可以。 f(false):表示不可以。 rolparentid oid 用户所在组用户的OID。 roltabspace text 用户数据表的最大空间限额。 rolkind "char" 特殊用户种类,包括Node group管理员、永久用户和普通用户。 roltempspace text 用户临时表的最大空间限额,单位 KB。 rolspillspace text 用户执行作业时下盘数据的最大空间限额,单位 KB。 rolexcpdata text 用户可以设置的查询规则(当前未使用)。 rolmonitoradmin boolean 角色是否具有监控管理员权限。 t(true):表示有。 f(false):表示没有。 roloperatoradmin boolean 角色是否具有运维管理员权限。 t(true):表示有。 f(false):表示没有。 rolpolicyadmin boolean 角色是否具有安全策略管理员权限。 t(true):表示有。 f(false):表示没有。 父主题: 系统表
  • 背景信息 当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图,以便解决这个问题。 视图与基本表不同,不是物理上实际存在的,是一个虚表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。视图每次被引用的时候都会运行一次。
  • udf_memory_limit 参数说明:控制每个CN、DN执行UDF时可用的最大物理内存量。本参数当前版本不生效,请使用FencedUDFMemoryLimit和UDFWorkerMemHardLimit参数控制fenced udf worker虚存。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,200*1024~2147483647,单位为KB。 默认值:200MB
  • 示例3 常用数据类型使用示例 //bit类型使用示例,注意此处bit类型取值范围[0,1] Statement st = conn.createStatement(); String createsql = "create table if not exists t_bit(col_bit bit)"; String sqlstr = "create or replace function fun_1()\n" + "returns bit AS $$\n" + "select col_bit from t_bit limit 1;\n" + "$$\n" + "LANGUAGE SQL;"; st.execute(createsql); st.execute(sqlstr); CallableStatement c = conn.prepareCall("{ ? = call fun_1() }"); //注册输出类型,位串类型 c.registerOutParameter(1, Types.BIT); c.execute(); //使用Boolean类型获取结果 System.out.println(c.getBoolean(1)); // money类型使用示例 // 表结构中包含money类型列的使用示例。 st.execute("create table t_money(id int,col1 money)"); PreparedStatement pstm = conn.prepareStatement("insert into t_money values(1,?)"); // 使用PGobject赋值,取值范围[-92233720368547758.08,92233720368547758.07] PGobject minMoney = new PGobject(); minMoney.setType("money"); minMoney.setValue("-92233720368547758.08"); pstm.setObject(1, minMoney); pstm.execute(); // 使用PGMoney赋值,取值范围[-9999999.99,9999999.99] pstm.setObject(1,new PGmoney(9999999.99)); pstm.execute(); 当前JDBC不支持调用返回数据类型为money的存储过程和函数。
  • 示例2 客户端内存占用过多解决 此示例主要使用setFetchSize来调整客户端内存使用,它的原理是通过数据库游标来分批获取服务器端数据,但它会加大网络交互,可能会损失部分性能。 由于游标事务内有效,故需要先关闭自动提交,最后需要执行手动提交。 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 // 关闭掉自动提交 conn.setAutoCommit(false); Statement st = conn.createStatement(); // 打开游标,每次获取50行数据 st.setFetchSize(50); ResultSet rs = st.executeQuery("SELECT * FROM mytable"); while (rs.next()) { System.out.print("a row was returned."); } conn.commit(); rs.close(); // 关闭服务器游标。 st.setFetchSize(0); rs = st.executeQuery("SELECT * FROM mytable"); while (rs.next()) { System.out.print("many rows were returned."); } conn.commit(); rs.close(); // Close the statement. st.close(); conn.close(); 执行完毕后可使用如下命令恢复自动提交: conn.setAutoCommit(true);
  • 字符处理函数和操作符 GaussDB 提供的字符处理函数和操作符主要用于字符串与字符串、字符串与非字符串之间的连接,以及字符串的模式匹配操作。注意:字符串处理函数除了length相关函数,其他函数和操作符不支持大于1GB clob作为参数。 bit_length(string) 描述:字符串的位数。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT bit_length('world'); bit_length ------------ 40 (1 row) btrim(string text [, characters text]) 描述:从string开头和结尾删除只包含characters中字符(缺省是空白)的最长字符串。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT btrim('sring' , 'ing'); btrim ------- sr (1 row) char_length(string)或character_length(string) 描述:字符串中的字符个数。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT char_length('hello'); char_length ------------- 5 (1 row) instr(text,text,int,int) 描述:instr(string1,string2,int1,int2)返回在string1中从int1位置开始匹配到第int2次string2的位置,第一个int表示开始匹配起始位置,第二个int表示匹配的次数。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT instr( 'abcdabcdabcd', 'bcd', 2, 2 ); instr ------- 6 (1 row) lengthb(text/bpchar) 描述:获取指定字符串的字节数。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT lengthb('hello'); lengthb --------- 5 (1 row) left(str text, n int) 描述:返回字符串的前n个字符。当n是负数时,返回除最后|n|个字符以外的所有字符。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT left('abcde', 2); left ------ ab (1 row) length(string bytea, encoding name ) 描述:指定encoding编码格式的string的字符数。在这个编码格式中,string必须是有效的。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT length('jose', 'UTF8'); length -------- 4 (1 row) 如果是查询bytea类型的长度,指定utf8编码时,最大长度只能为536870888。 lpad(string text, length int [, fill text]) 描述:通过填充字符fill(缺省时为空白),把string填充为length长度。如果string已经比length长则将其尾部截断。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT lpad('hi', 5, 'xyza'); lpad ------- xyzhi (1 row) notlike(x bytea name text, y bytea text) 描述:比较x和y是否不一致。 返回值类型:Boolean 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# SELECT notlike(1,2); notlike -------------- t (1 row) openGauss=# SELECT notlike(1,1); notlike -------------- f (1 row) octet_length(string) 描述:字符串中的字节数。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT octet_length('jose'); octet_length -------------- 4 (1 row) overlay(string placing string FROM int [for int]) 描述:替换子字符串。FROM int表示从第一个string的第几个字符开始替换,for int表示替换第一个string的字符数目。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT overlay('hello' placing 'world' from 2 for 3 ); overlay --------- hworldo (1 row) position(substring in string) 描述:指定子字符串的位置。字符串区分大小写。 返回值类型:int,字符串不存在时返回0。 示例: 1 2 3 4 5 openGauss=# SELECT position('ing' in 'string'); position ---------- 4 (1 row) pg_client_encoding() 描述:当前客户端编码名称。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# SELECT pg_client_encoding(); pg_client_encoding -------------------- UTF8 (1 row) quote_ident(string text) 描述:返回适用于SQL语句的标识符形式(使用适当的引号进行界定)。只有在必要的时候才会添加引号(字符串包含非标识符字符或者会转换大小写的字符)。返回值中嵌入的引号都写了两次。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT quote_ident('hello world'); quote_ident -------------- "hello world" (1 row) quote_literal(string text) 描述:返回适用于SQL语句的标识符形式(使用适当的引号进行界定)。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT quote_literal('hello'); quote_literal --------------- 'hello' (1 row) 如果出现如下写法,text文本将进行转义。 1 2 3 4 5 openGauss=# SELECT quote_literal(E'O\'hello'); quote_literal --------------- 'O''hello' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 openGauss=# SELECT quote_literal('O\hello'); quote_literal --------------- E'O\\hello' (1 row) 如果参数为NULL,返回空。如果参数可能为null,通常使用函数quote_nullable更适用。 1 2 3 4 5 openGauss=# SELECT quote_literal(NULL); quote_literal --------------- (1 row) quote_literal(value anyelement) 描述:将给定的值强制转换为text,加上引号作为文本。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT quote_literal(42.5); quote_literal --------------- '42.5' (1 row) 如果出现如下写法,定值将进行转义。 1 2 3 4 5 openGauss=# SELECT quote_literal(E'O\'42.5'); quote_literal --------------- '0''42.5' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 openGauss=# SELECT quote_literal('O\42.5'); quote_literal --------------- E'O\\42.5' (1 row) quote_nullable(string text) 描述:返回适用于在SQL语句里当作字符串使用的形式(使用适当的引号进行界定)。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT quote_nullable('hello'); quote_nullable ---------------- 'hello' (1 row) 如果出现如下写法,text文本将进行转义。 1 2 3 4 5 openGauss=# SELECT quote_nullable(E'O\'hello'); quote_nullable ---------------- 'O''hello' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 openGauss=# SELECT quote_nullable('O\hello'); quote_nullable ---------------- E'O\\hello' (1 row) 如果参数为NULL,返回NULL。 1 2 3 4 5 openGauss=# SELECT quote_nullable(NULL); quote_nullable ---------------- NULL (1 row) quote_nullable(value anyelement) 描述:将给定的参数值转换为text,加上引号作为文本。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT quote_nullable(42.5); quote_nullable ---------------- '42.5' (1 row) 如果出现如下写法,定值将进行转义。 1 2 3 4 5 openGauss=# SELECT quote_nullable(E'O\'42.5'); quote_nullable ---------------- 'O''42.5' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 openGauss=# SELECT quote_nullable('O\42.5'); quote_nullable ---------------- E'O\\42.5' (1 row) 如果参数为NULL,返回NULL。 1 2 3 4 5 openGauss=# SELECT quote_nullable(NULL); quote_nullable ---------------- NULL (1 row) substring_inner(string [from int] [for int]) 描述:截取子字符串,from int表示从第几个字符开始截取,for int表示截取几个字节。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# select substring_inner('adcde', 2,3); substring_inner ----------------- dcd (1 row) substring(string [from int] [for int]) 描述:截取子字符串,from int表示从第几个字符开始截取,for int表示截取几个字节。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT substring('Thomas' from 2 for 3); substring ----------- hom (1 row) substring(string from pattern) 描述:截取匹配POSIX正则表达式的子字符串。如果没有匹配它返回空值,否则返回文本中匹配模式的那部分。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 openGauss=# SELECT substring('Thomas' from '...$'); substring ----------- mas (1 row) openGauss=# SELECT substring('foobar' from 'o(.)b'); result -------- o (1 row) openGauss=# SELECT substring('foobar' from '(o(.)b)'); result -------- oob (1 row) 如果POSIX正则表达式模式包含任何圆括号,那么将返回匹配第一对子表达式(对应第一个左圆括号的) 的文本。如果你想在表达式里使用圆括号而又不想导致这个例外,那么你可以在整个表达式外边放上一对圆括号。 substring(string from pattern for escape) 描述:截取匹配SQL正则表达式的子字符串。声明的模式必须匹配整个数据串,否则函数失败并返回空值。为了标识在成功的时候应该返回的模式部分,模式必须包含两个逃逸字符引用的部分,并且逃逸字符后面要添加双引号(")。匹配这两个标记之间的模式的文本将被返回。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT substring('Thomas' from '%#"o_a#"_' for '#'); substring ----------- oma (1 row) rawcat(raw,raw) 描述:字符串拼接函数。 返回值类型:raw 示例: 1 2 3 4 5 openGauss=# SELECT rawcat('ab','cd'); rawcat -------- ABCD (1 row) regexp_like(text,text,text) 描述:正则表达式的模式匹配函数。 返回值类型:bool 示例: 1 2 3 4 5 openGauss=# SELECT regexp_like('str','[ac]'); regexp_like ------------- f (1 row) regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]]) 描述:正则表达式的抽取子串函数。与substr功能相似,正则表达式出现多个并列的括号时,也全部处理。 参数说明: string:用于匹配的源字符串。 pattern:用于匹配的正则表达式模式串。 position:可选参数,表示从源字符串的第几个字符开始匹配,默认值为1。 occurrence:可选参数,表示抽取第几个满足匹配的子串,默认值为1。 flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。flags 支持的选项值及含义描述如表1所示: 表1 flags 支持的选项值 选项 描述 'b' 按照无扩展的 BRE 规则匹配。 'c' 大小写敏感匹配。 'e' 按照扩展的ERE规则匹配。 'i' 大小写不敏感匹配。 'm' 多行模式匹配。flags中包含'm'时,按照多行模式匹配,否则按照单行模式匹配。 'n' n选项的含义和GUC参数behavior_compat_options及数据库当前的兼容模式有关: 数据库SQL语法兼容模式为A或B,且GUC参数behavior_compat_options值包含aformat_regexp_match时,'n'选项表示“.”能够匹配换行符('\n');flags未指定'n'选项时,“.”不会匹配换行符。 其他情况下,'n'选项和'm'选项的含义一样。 'p' 部分新行敏感的匹配,影响'.'和方括号表达式,和新行敏感的匹配('m'或'n')一样,但是不影响^和$。 'q' 普通字符匹配。 's' 单行模式匹配,含义与'm', 'n'相反。 't' 紧凑模式匹配,空白符匹配自身。 'w' 逆部分新行匹配,与'p'含义相反。 'x' 宽松模式匹配,忽略空白符。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# SELECT regexp_substr('str','[ac]'); regexp_substr --------------- (1 row) openGauss=# SELECT regexp_substr('foobarbaz', 'b(..)', 3, 2) AS RESULT; result -------- baz (1 row) regexp_count(string text, pattern text [, position int [, flags text]]) 描述:获取满足匹配的子串个数。 参数说明: string:用于匹配的源字符串。 pattern:用于匹配的正则表达式模式串。 position:表示从源字符串的第几个字符开始匹配,为可选参数,默认值为1。 flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。flags 支持的选项值及含义描述如表1所示。 返回值类型:int 示例: openGauss=# SELECT regexp_count('foobarbaz','b(..)', 5) AS RESULT; result -------- 1 (1 row) regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]]) 描述:获取满足匹配条件的子串位置(从1开始)。如果没有匹配的子串,则返回0。 参数说明: string:用于匹配的源字符串。 pattern:用于匹配的正则表达式模式串。 position:可选参数,表示从源字符串的第几个字符开始匹配,默认值为1。 occurrence:可选参数,表示获取第occurrence个匹配子串的位置,默认值为1。 return_opt:可选参数,用于控制返回匹配子串的首字符位置还是尾字符位置。取值为0时,返回匹配子串的第一个字符的位置(从1开始计算),取值为大于0的值时,返回匹配子串的尾字符的下一个字符的位置。默认值为0。 flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。flags 支持的选项值及含义描述如表1所示。 返回值类型:int 示例: openGauss=# SELECT regexp_instr('foobarbaz','b(..)', 1, 1, 0) AS RESULT; result -------- 4 (1 row) openGauss=# SELECT regexp_instr('foobarbaz','b(..)', 1, 2, 0) AS RESULT; result -------- 7 (1 row) regexp_matches(string text, pattern text [, flags text]) 描述:返回string中所有匹配POSIX正则表达式的子字符串。如果pattern不匹配,该函数不返回行。如果模式不包含圆括号子表达式,则每一个被返回的行都是一个单一元素的文本数组,其中包括匹配整个模式的子串。如果模式包含圆括号子表达式,该函数返回一个文本数组,它的第n个元素是匹配模式的第n个圆括号子表达式的子串。 flags参数为可选参数,包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。 如果提供了最后一个参数,但参数值是空字符串(''),且数据库SQL兼容模式设置为ORA的情况下,会导致返回结果为空集。这是因为ORA兼容模式将''作为NULL处理,避免此类行为的方式有如下几种: 将数据库SQL兼容模式改为TD。 不提供最后一个参数,或最后一个参数不为空字符串。 返回值类型:setof text[] 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 openGauss=# SELECT regexp_matches('foobarbequebaz', '(bar)(beque)'); regexp_matches ---------------- {bar,beque} (1 row) openGauss=# SELECT regexp_matches('foobarbequebaz', 'barbeque'); regexp_matches ---------------- {barbeque} (1 row) openGauss=# SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g'); regexp_matches -------------- {bar,beque} {bazil,barf} (2 rows) regexp_split_to_array(string text, pattern text [, flags text ]) 描述:用POSIX正则表达式作为分隔符,分隔string。和regexp_split_to_table相同,不过regexp_split_to_array会把它的结果以一个text数组的形式返回。 返回值类型:text[] 示例: 1 2 3 4 5 openGauss=# SELECT regexp_split_to_array('hello world', E'\\s+'); regexp_split_to_array ----------------------- {hello,world} (1 row) regexp_split_to_table(string text, pattern text [, flags text]) 描述:用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,该函数返回string。如果至少有一个匹配,对每一个匹配,它都返回从上一个匹配的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返回从上一次匹配的末尾到串末尾之间的文本。 flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,不设参数默认表示替换每一个匹配的子字符串,而不仅仅是替换第一个子字符串。 返回值类型:setof text 示例: 1 2 3 4 5 6 openGauss=# SELECT regexp_split_to_table('hello world', E'\\s+'); regexp_split_to_table ----------------------- hello world (2 rows) repeat(string text, number int ) 描述:将string重复number次。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT repeat('Pg', 4); repeat ---------- PgPgPgPg (1 row) 由于数据库内存分配机制限制单次内存分配不可超过1GB,因此number最大值不应超过(1G-x)/lengthb(string) - 1。x为头信息长度,通常大于4字节,其具体值在不同的场景下存在差异。 replace(string text, from text, to text) 描述:把字符串string里出现的所有子字符串from的内容替换成子字符串to的内容。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT replace('abcdefabcdef', 'cd', 'XXX'); replace ---------------- abXXXefabXXXef (1 row) replace(string, substring) 描述:删除字符串string里出现的所有子字符串substring的内容。 string类型:text substring类型:text 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT replace('abcdefabcdef', 'cd'); replace ---------------- abefabef (1 row) reverse(str) 描述:返回颠倒的字符串。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT reverse('abcde'); reverse --------- edcba (1 row) right(str text, n int) 描述:返回字符串中的后n个字符。当n是负值时,返回除前|n|个字符以外的所有字符。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# SELECT right('abcde', 2); right ------- de (1 row) openGauss=# SELECT right('abcde', -2); right ------- cde (1 row) rpad(string text, length int [, fill text]) 描述:使用填充字符fill(缺省时为空白),把string填充到length长度。如果string已经比length长则将其从尾部截断。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT rpad('hi', 5, 'xy'); rpad ------- hixyx (1 row) rtrim(string text [, characters text]) 描述:从字符串string的结尾删除只包含characters中字符(缺省是个空白)的最长的字符串。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT rtrim('trimxxxx', 'x'); rtrim ------- trim (1 row) substrb(text,int,int) 描述:提取子字符串,第一个int表示提取的起始位置,第二个表示提取几位字符。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT substrb('string',2,3); substrb --------- tri (1 row) substrb(text,int) 描述:提取子字符串,int表示提取的起始位置。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT substrb('string',2); substrb --------- tring (1 row) substr(bytea,from,count) 描述:从参数bytea中抽取子字符串。from表示抽取的起始位置,count表示抽取的子字符串长度。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT substr('string',2,3); substr -------- tri (1 row) string || string 描述:连接字符串。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT 'MPP'||'DB' AS RESULT; result -------- MPPDB (1 row) string || non-string或non-string || string 描述:连接字符串和非字符串。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT 'Value: '||42 AS RESULT; result ----------- Value: 42 (1 row) split_part(string text, delimiter text, field int) 描述:根据delimiter分隔string返回生成的第field个子字符串(从出现第一个delimiter的text为基础)。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT split_part('abc~@~def~@~ghi', '~@~', 2); split_part ------------ def (1 row) strpos(string, substring) 描述:指定的子字符串的位置。和position(substring in string)一样,不过参数顺序相反。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT strpos('source', 'rc'); strpos -------- 4 (1 row) to_hex(number int or bigint) 描述:把number转换成十六进制表现形式。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT to_hex(2147483647); to_hex ---------- 7fffffff (1 row) translate(string text, from text, to text) 描述:把在string中包含的任何匹配from中的字符转换为对应的在to中的字符。如果from比to长,删掉在from中出现的额外的字符。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT translate('12345', '143', 'ax'); translate ----------- a2x5 (1 row) length(string) 描述:获取参数string中字符的数目。 返回值类型:integer 示例: 1 2 3 4 5 openGauss=# SELECT length('abcd'); length -------- 4 (1 row) lengthb(string) 描述:获取参数string中字节的数目。与字符集有关,同样的中文字符,在GBK与UTF8中,返回的字节数不同。 返回值类型:integer 示例: 1 2 3 4 5 openGauss=# SELECT lengthb('Chinese'); lengthb --------- 7 (1 row) substr(string,from) 描述: 从参数string中抽取子字符串。 from表示抽取的起始位置。 from为0时,按1处理。 from为正数时,抽取从from到末尾的所有字符。 from为负数时,抽取字符串的后n个字符,n为from的绝对值。 返回值类型:varchar 示例: from为正数时: 1 2 3 4 5 openGauss=# SELECT substr('ABCDEF',2); substr -------- BCDEF (1 row) from为负数时: 1 2 3 4 5 openGauss=# SELECT substr('ABCDEF',-2); substr -------- EF (1 row) substr(string,from,count) 描述: 从参数string中抽取子字符串。 from表示抽取的起始位置。 count表示抽取的子字符串长度。 from为0时,按1处理。 from为正数时,抽取从from开始的count个字符。 from为负数时,抽取从倒数第n个开始的count个字符,n为from的绝对值。 count小于1时,返回null。 返回值类型:varchar 示例: from为正数时: 1 2 3 4 5 openGauss=# SELECT substr('ABCDEF',2,2); substr -------- BC (1 row) from为负数时: 1 2 3 4 5 openGauss=# SELECT substr('ABCDEF',-3,2); substr -------- DE (1 row) substrb(string,from) 描述:该函数和SUBSTR(string,from)函数功能一致,但是计算单位为字节。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT substrb('ABCDEF',-2); substrb --------- EF (1 row) substrb(string,from,count) 描述:该函数和SUBSTR(string,from,count)函数功能一致,但是计算单位为字节。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT substrb('ABCDEF',2,2); substrb --------- BC (1 row) trim([leading |trailing |both] [characters] from string) 描述:从字符串string的开头、结尾或两边删除只包含characters中字符(缺省是一个空白)的最长的字符串。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT trim(BOTH 'x' FROM 'xTomxx'); btrim ------- Tom (1 row) 1 2 3 4 5 openGauss=# SELECT trim(LEADING 'x' FROM 'xTomxx'); ltrim ------- Tomxx (1 row) 1 2 3 4 5 openGauss=# SELECT trim(TRAILING 'x' FROM 'xTomxx'); rtrim ------- xTom (1 row) rtrim(string [, characters]) 描述:从字符串string的结尾删除只包含characters中字符(缺省是个空白)的最长的字符串。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT rtrim('TRIMxxxx','x'); rtrim ------- TRIM (1 row) ltrim(string [, characters]) 描述:从字符串string的开头删除只包含characters中字符(缺省是一个空白)的最长的字符串。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT ltrim('xxxxTRIM','x'); ltrim ------- TRIM (1 row) upper(string) 描述:把字符串转换为大写。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT upper('tom'); upper ------- TOM (1 row) lower(string) 描述:把字符串转换为小写。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT lower('TOM'); lower ------- tom (1 row) rpad(string varchar, length int [, fill varchar]) 描述:使用填充字符fill(缺省时为空白),把string填充到length长度。如果string已经比length长则将其从尾部截断。 length参数在GaussDB中表示字符长度。一个汉字长度计算为一个字符。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT rpad('hi',5,'xyza'); rpad ------- hixyx (1 row) 1 2 3 4 5 openGauss=# SELECT rpad('hi',5,'abcdefg'); rpad ------- hiabc (1 row) instr(string,substring[,position,occurrence]) 描述:从字符串string的position(缺省时为1)所指的位置开始查找并返回第occurrence(缺省时为1)次出现子串substring的位置的值。 当position为0时,返回0。 当position为负数时,从字符串倒数第n个字符往前逆向搜索。n为position的绝对值。 本函数以字符为计算单位,如一个汉字为一个字符。 返回值类型:integer 示例: 1 2 3 4 5 openGauss=# SELECT instr('corporate floor','or', 3); instr ------- 5 (1 row) 1 2 3 4 5 openGauss=# SELECT instr('corporate floor','or',-3,2); instr ------- 2 (1 row) initcap(string) 描述:将字符串中的每个单词的首字母转换为大写,其他字母转换为小写。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT initcap('hi THOMAS'); initcap ----------- Hi Thomas (1 row) ascii(string) 描述:参数string的第一个字符的ASCII码。 返回值类型:integer 示例: 1 2 3 4 5 openGauss=# SELECT ascii('xyz'); ascii ------- 120 (1 row) replace(string varchar, search_string varchar, replacement_string varchar) 描述:把字符串string中所有子字符串search_string替换成子字符串replacement_string。 返回值类型:varchar 示例: 1 2 3 4 5 openGauss=# SELECT replace('jack and jue','j','bl'); replace ---------------- black and blue (1 row) lpad(string varchar, length int[, repeat_string varchar]) 描述:在string的左侧添上一系列的repeat_string(缺省为空白)来组成一个总长度为n的新字符串。 如果string本身的长度比指定的长度length长,则本函数将把string截断并把前面长度为length的字符串内容返回。 返回值类型:varchar 示例: 1 2 3 4 5 openGauss=# SELECT lpad('PAGE 1',15,'*.'); lpad ----------------- *.*.*.*.*PAGE 1 (1 row) 1 2 3 4 5 openGauss=# SELECT lpad('hello world',5,'abcd'); lpad ------- hello (1 row) concat(str1,str2) 描述:将字符串str1和str2连接并返回,若str1或str2为NULL时,返回NULL。注意,concat会调用data type的输出函数,返回值不确定,导致优化器在生成计划的时候不能提前计算结果。如果对性能有要求,建议用 || 替代。 在sql_compatibility = 'MYSQL'的情况下,参数str1或str2为NULL会导致返回结果为NULL。 concat函数返回值类型为变长类型,和表中数据比较时,会因为拼接结果丢失字符串长度,导致比较结果不相等。 返回值类型:varchar 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# SELECT concat('Hello', ' World!'); concat -------------- Hello World! (1 row) openGauss=# SELECT concat('Hello', NULL); concat -------- (1 row) chr(integer) 描述:给出ASCII码的字符。 返回值类型:varchar 示例: 1 2 3 4 5 openGauss=# SELECT chr(65); chr ----- A (1 row) regexp_replace(string, pattern, replacement [,flags ]) 描述:替换匹配POSIX正则表达式的子字符串。 如果没有匹配pattern,那么返回不加修改的string串。 如果有匹配,则返回的string串里面的匹配子串将被replacement串替换掉。 replacement串可以包含\n, 其中\n是1 到9, 表明string串里匹配模式里第n个圆括号子表达式的子串应该被插入, 并且它可以包含\&表示应该插入匹配整个模式的子串。 可选的flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。 返回值类型:varchar 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# SELECT regexp_replace('Thomas', '.[mN]a.', 'M'); regexp_replace ---------------- ThM (1 row) openGauss=# SELECT regexp_replace('foobarbaz','b(..)', E'X\\1Y', 'g') AS RESULT; result ------------- fooXarYXazY (1 row) concat_ws(sep text, str"any" [, str"any" [, ...] ]) 描述:以第一个参数为分隔符,连接第二个以后的所有参数。NULL参数被忽略。 如果第一个参数值是NULL,会导致返回结果为NULL。 如果第一个参数值是空字符串(''),且数据库SQL兼容模式设置为ORA的情况下,会导致返回结果为NULL。这是因为A兼容模式将''作为NULL处理,避免此类行为,可以将数据库SQL兼容模式改为MYSQL、TD或者Postgres。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT concat_ws(',', 'ABCDE', 2, NULL, 22); concat_ws ------------ ABCDE,2,22 (1 row) nlssort(string text, sort_method text) 描述:以sort_method指定的排序方式返回字符串在该排序模式下的编码值,该编码值可用于排序,其决定了string在这种排序模式下的先后位置。目前支持的sort_method为'nls_sort=schinese_pinyin_m'和'nls_sort=generic_m_ci'。其中,'nls_sort=generic_m_ci'仅支持纯英文不区分大小写排序。 string类型:text sort_method类型:text 返回值类型:text 示例: 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 openGauss=# create table test(a text); openGauss=# insert into test(a) values ('abC 不'); openGauss=# insert into test(a) values ('abC 啊'); openGauss=# insert into test(a) values ('abc 啊'); openGauss=# select * from test order by nlssort(a,'nls_sort=schinese_pinyin_m'); a -------- abc 啊 abC 啊 abC 不 (3 rows) openGauss=# select * from test order by nlssort(a, 'nls_sort=generic_m_ci'); a -------- abC 啊 abc 啊 abC 不 (3 rows) openGauss=# DROP TABLE test; convert(string bytea, src_encoding name, dest_encoding name) 描述:以dest_encoding指定的目标编码方式转换字符串string。src_encoding指定源编码方式,在该编码下,string必须是合法的。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT convert('text_in_utf8', 'UTF8', 'GBK'); convert ---------------------------- \x746578745f696e5f75746638 (1 row) 如果源编码格式到目标编码格式的转换规则不存在,则字符串不进行任何转换直接返回,如GBK和LATIN1之间的转换规则是不存在的,具体转换规则可以通过查看系统表pg_conversion获得。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 openGauss=# show server_encoding; server_encoding ----------------- LATIN1 (1 row) openGauss=# SELECT convert_from('some text', 'GBK'); convert_from -------------- some text (1 row) db_latin1=# SELECT convert_to('some text', 'GBK'); convert_to ---------------------- \x736f6d652074657874 (1 row) db_latin1=# SELECT convert('some text', 'GBK', 'LATIN1'); convert ---------------------- \x736f6d652074657874 (1 row) convert_from(string bytea, src_encoding name) 描述:以数据库的编码方式转换字符串string。 src_encoding指定源编码方式,在该编码下,string必须是合法的。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT convert_from('text_in_utf8', 'UTF8'); convert_from -------------- text_in_utf8 (1 row) convert_to(string text, dest_encoding name) 描述:将字符串转换为dest_encoding的编码格式。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT convert_to('some text', 'UTF8'); convert_to ---------------------- \x736f6d652074657874 (1 row) string [NOT] LIKE pattern [ESCAPE escape-character] 描述:模式匹配函数。 如果pattern不包含百分号或者下划线,该模式只代表它本身,这时候LIKE的行为就像等号操作符。在pattern里的下划线(_)匹配任何单个字符;而一个百分号(%)匹配零或多个任何字符。 要匹配下划线或者百分号本身,在pattern里相应的字符必须前导逃逸字符。缺省的逃逸字符是反斜杠,但是用户可以用ESCAPE子句指定一个。要匹配逃逸字符本身,写两个逃逸字符。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT 'AA_BBCC' LIKE '%A@_B%' ESCAPE '@' AS RESULT; result -------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'AA_BBCC' LIKE '%A@_B%' AS RESULT; result -------- f (1 row) 1 2 3 4 5 openGauss=# SELECT 'AA@_BBCC' LIKE '%A@_B%' AS RESULT; result -------- t (1 row) REGEXP_LIKE(source_string, pattern [, match_parameter]) 描述:正则表达式的模式匹配函数。 source_string为源字符串,pattern为正则表达式匹配模式。 match_parameter为匹配选项,可取值为: 'i':大小写不敏感。 'c':大小写敏感。 'n':允许正则表达式元字符“.”匹配换行符。 'm':将source_string视为多行。 若忽略match_parameter选项,默认为大小写敏感,“.”不匹配换行符,source_string视为单行。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT regexp_like('ABC', '[A-Z]'); regexp_like ------------- t (1 row) 1 2 3 4 5 openGauss=# SELECT regexp_like('ABC', '[D-Z]'); regexp_like ------------- f (1 row) 1 2 3 4 5 openGauss=# SELECT regexp_like('ABC', '[A-Z]','i'); regexp_like ------------- t (1 row) 1 2 3 4 5 openGauss=# SELECT regexp_like('ABC', '[A-Z]'); regexp_like ------------- t (1 row) format(formatstr text [, str"any" [, ...] ]) 描述:格式化字符串。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT format('Hello %s, %1$s', 'World'); format -------------------- Hello World, World (1 row) md5(string) 描述:将string使用MD5加密,并以16进制数作为返回值。 MD5加密算法安全性低,存在安全风险,建议使用更安全的加密算法。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT md5('ABC'); md5 ---------------------------------- 902fbdd2b1df0c4f70b4a5d23525e932 (1 row) decode(string text, format text) 描述:将二进制数据从文本数据中解码。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT decode('MTIzAAE=', 'base64'); decode -------------- \x3132330001 (1 row) similar_escape(pat text, esc text) 描述:将一个SQL:2008风格的正则表达式转换为POSIX风格。 返回值类型:text 示例: openGauss=# select similar_escape('\s+ab','2'); similar_escape ---------------- ^(?:\\s+ab)$ (1 row) encode(data bytea, format text) 描述:将二进制数据编码为文本数据。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT encode(E'123\\000\\001', 'base64'); encode ---------- MTIzAAE= (1 row) 若字符串中存在换行符,如字符串由一个换行符和一个空格组成,在GaussDB中LENGTH和LENGTHB的值为2。 对于CHAR(n) 类型,GaussDB中n是指字符个数。因此,对于多字节编码的字符集, LENGTHB函数返回的长度可能大于n。 GaussDB支持多种类型的数据库,目前有4种,分别是ORA类型,MYSQL类型,TD类型以及Postgres类型。在不指定数据库类型时,数据库默认是ORA类型,ORA的词法分析器与另外三种不一样,在ORA中空字符串会被当作是NULL。所以,当使用ORA类型的数据库时,假如上述字符操作函数中有空字符串作为参数,会出现没有输出的情况。例如: openGauss=# SELECT translate('12345','123',''); translate ----------- (1 row) 这是因为内核在调用相应的函数进行处理前,会判断所输入的参数中是否含有NULL,假如有,则不会调用相应的函数,因此会没有输出。而在Postgres模式下,字符串的处理方式与Postgres保持一致,因此不会有上述问题产生。 父主题: 函数和操作符
  • STAT_XACT_USER_TABLES 显示当前节点命名空间中用户表的事务状态信息。 表1 STAT_XACT_USER_TABLES字段 名称 类型 描述 relid oid 表的OID。 schemaname name 该表的模式名。 relname name 表名。 seq_scan bigint 该表发起的顺序扫描数。 seq_tup_read bigint 顺序扫描抓取的活跃行数。 idx_scan bigint 该表发起的索引扫描数。 idx_tup_fetch bigint 索引扫描抓取的活跃行数。 n_tup_ins bigint 插入行数。 n_tup_upd bigint 更新行数。 n_tup_del bigint 删除行数。 n_tup_hot_upd bigint HOT更新行数(比如没有更新所需的单独索引)。 父主题: Object
  • 案例环境准备 为了便于规则的使用场景演示,需准备建表语句如下: --清理环境 DROP SCHEMA IF EXISTS rewrite_rule_guc_test CASCADE; CREATE SCHEMA rewrite_rule_guc_test; SET current_schema=rewrite_rule_guc_test; --创建测试表 CREATE TABLE t(c1 INT, c2 INT, c3 INT, c4 INT); CREATE TABLE t1(c1 INT, c2 INT, c3 INT, c4 INT); CREATE TABLE t2(c1 INT, c2 INT, c3 INT, c4 INT);
  • PG_SHADOW PG_SHADOW视图显示了所有在PG_AUTHID中标记了rolcanlogin的角色的属性,只有系统管理员权限才可以访问此系统视图。 该视图的信息与PG_USER是基本一致的,区别在于后者对密码做了敏感化处理,统一显示为********。 表1 PG_SHADOW字段 名称 类型 引用 描述 usename name PG_AUTHID.rolname 用户名。 usesysid oid PG_AUTHID.oid 用户的ID。 usecreatedb boolean - 用户是否可以创建数据库。 t(true):表示是。 f(false):表示否。 usesuper boolean - 用户是否是系统管理员。 t(true):表示是。 f(false):表示否。 usecatupd boolean - 用户是否可以更新视图。即使是系统管理员,如果这个字段值不是t,也不能更新视图。 t(true):表示是。 f(false):表示否。 userepl boolean - 用户是否可以复制数据流。 t(true):表示是。 f(false):表示否。 passwd text PG_AUTHID.rolpassword 密码密文,如果没有密码,则为NULL。 valbegin timestamp with time zone - 账户的有效开始时间;如果没有设置有效开始时间,则为NULL。 valuntil timestamp with time zone - 账户的有效结束时间;如果没有设置有效结束时间,则为NULL。 respool name - 用户所在的资源池。 parent oid - 父用户OID。 spacelimit text - 永久表存储空间的限额,单位kB。 useconfig text[] PG_DB_ROLE_SETTING.setconfig 运行时配置项的默认值。 tempspacelimit text - 临时表存储空间的限额,单位kB。 spillspacelimit text - 算子落盘空间的限额,单位kB。 usemonitoradmin boolean - 用户是否是监控管理员。 t(true):表示是。 f(false):表示否。 useoperatoradmin boolean - 用户是否是运维管理员。 t(true):表示是。 f(false):表示否。 usepolicyadmin boolean - 用户是否是安全策略管理员。 t(true):表示是。 f(false):表示否。 父主题: 系统视图
  • 接口介绍 高级功能包DBE_RANDOM支持的所有接口请参见表 DBE_RANDOM接口参数说明。 表1 DBE_RANDOM接口参数说明 接口名称 描述 DBE_RANDOM.SET_SEED 设置一个随机数的种子。 DBE_RANDOM.GET_VALUE 生成一个大小介于指定的low及high之间的随机数。 DBE_RANDOM.SET_SEED 存储过程SEED用于设置一个随机数的种子。DBE_RANDOM.SET_SEED函数原型为: 1 DBE_RANDOM.SET_SEED (seed IN INTEGER); 表2 DBE_RANDOM.SET_SEED接口参数说明 参数 描述 seed 用于产生一个随机数的种子。 DBE_RANDOM.GET_VALUE 函数GET_VALUE生成一个大小介于指定的low及high之间的随机数。DBE_RANDOM.GET_VALUE函数原型为: 1 2 3 4 DBE_RANDOM.GET_VALUE( min IN NUMBER default 0, max IN NUMBER default 1) RETURN NUMBER; 表3 DBE_RANDOM.GET_VALUE接口参数说明 参数 描述 min 指定随机数大小的下边界,生成的随机数大于或等于min。 max 指定随机数大小的上边界,生成的随机数小于max。 实际上,只要求这里的参数类型是NUMERIC即可,对于左右边界的大小并没有要求。 DBE_RANDOM实现的是伪随机,所以若使用的初值(种子)不变,那么伪随机数的数序也不变,使用时需要注意。 生成的随机数有效数字为15位。
  • 示例 1 2 3 4 5 6 7 8 9 10 11 --产生0到1之间的随机数: SELECT DBE_RANDOM.GET_VALUE(0,1); get_value ------------------ .917468812743886(1 row) --对于指定范围内的整数,要加入参数min和max,并从结果中截取较小的数(最大值不能被作为可能的值)。所以对于0到99之间的整数,使用下面的代码: SELECT TRUNC(DBE_RANDOM.GET_VALUE(0,100)); trunc ------- 26 (1 row)
  • SUMMARY_STATEMENT_COUNT 显示数据库各节点执行的五类语句(SELECT、INSERT、UPDATE、DELETE、MERGE INTO)和(DDL、DML、DCL)的汇总统计信息。 表1 SUMMARY_STATEMENT_COUNT字段 名称 类型 描述 user_name text 用户名。 select_count numeric select语句统计结果。 update_count numeric update语句统计结果。 insert_count numeric insert语句统计结果。 delete_count numeric delete语句统计结果。 mergeinto_count numeric merge into语句统计结果。 ddl_count numeric DDL语句的数量。 dml_count numeric DML语句的数量。 dcl_count numeric DCL语句的数量。 total_select_elapse numeric 总select的时间花费(单位:微秒)。 avg_select_elapse bigint 平均select的时间花费(单位:微秒)。 max_select_elapse bigint 最大select的时间花费(单位:微秒)。 min_select_elapse bigint 最小select的时间花费(单位:微秒)。 total_update_elapse numeric 总update的时间花费(单位:微秒)。 avg_update_elapse bigint 平均update的时间花费(单位:微秒)。 max_update_elapse bigint 最大update的时间花费(单位:微秒)。 min_update_elapse bigint 最小update的时间花费(单位:微秒)。 total_insert_elapse numeric 总insert的时间花费(单位:微秒)。 avg_insert_elapse bigint 平均insert的时间花费(单位:微秒)。 max_insert_elapse bigint 最大insert的时间花费(单位:微秒)。 min_insert_elapse bigint 最小insert的时间花费(单位:微秒)。 total_delete_elapse numeric 总delete的时间花费(单位:微秒)。 avg_delete_elapse bigint 平均delete的时间花费(单位:微秒)。 max_delete_elapse bigint 最大delete的时间花费(单位:微秒)。 min_delete_elapse bigint 最小delete的时间花费(单位:微秒)。 父主题: Query
  • SNAPSHOT.TABLES_SNAP_TIMESTAMP TABLES_SNAP_TIMESTAMP表记录所有存储的WDR Snapshot中数据库,表对象,数据采集的开始,结束时间。只有初始化用户或监控管理员用户有权限查看,WDR Snapshot在启动后(打开GUC参数enable_wdr_snapshot),会触发创建该表。 表1 TABLES_SNAP_TIMESTAMP表属性 名称 类型 描述 示例 snapshot_id bigint WDR快照序号。 1 db_name text WDR Snapshot对应的database。 tpcc1000 tablename text WDR Snapshot对应的table。 snap_xc_statio_all_indexes start_ts timestamp WDR快照的开始时间。 2019-12-28 17:11:27.425849+08 end_ts timestamp WDR快照的结束时间。 2019-12-28 17:11:27.707398+08 父主题: WDR Snapshot原信息
  • 参数说明 src, src1, src2表示predpush下推candidates一侧表集合。 dest表示predpush下推所指定的dest表也就是目标表。 predpush如果没有逗号表示所有表都是candidates表, 如果有逗号就说明同时指定了candidates表和dest表。 使用predpush hint将过滤表达式尽可能移至靠近数据源的位置以达到查询优化的目的。 使用predpush hint需要确保rewrite_rule GUC参数包含PREDPUSH|REDPUSHFORCE|PREDPUSHNORMAL选项。 subquery_block也可以是视图/物化视图。
  • time_to_target_rpo 参数说明:双集群异地灾备模式下,设置主集群发生异常发生时到已归档到OBS的恢复点所允许的time_to_target_rpo秒。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0~3600(秒) 双集群异地灾备模式下,主集群日志将被归档到OBS。0是指不开启日志流控,1~3600是指设置主集群发生异常发生时到已归档到OBS的恢复点所允许的time_to_target_rpo秒,保证主集群因灾难崩溃时,最多可能丢失的数据的时长在允许范围内。time_to_target_rpo设置时间过小会影响主机的性能,设置过大会失去流控效果。 默认值:10
  • archive_timeout 参数说明:表示归档周期。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 超过该参数设定的时间时强制切换WAL段。 由于强制切换而提早关闭的归档文件仍然与完整的归档文件长度相同。因此,将archive_timeout设为很小的值将导致占用巨大的归档存储空间,建议将archive_timeout设置为60秒。 取值范围:整型,0 ~ 1073741823‬,单位为秒,其中0表示禁用该功能。 默认值:0
  • PV_SESSION_MEMORY PV_SESSION_MEMORY视图显示Session级别的内存使用情况,包含执行作业在数据节点上gaussdb线程和Stream线程分配的所有内存。 表1 PV_SESSION_MEMORY字段 名称 类型 描述 sessid text 线程启动时间+线程标识。 init_mem integer 当前正在执行作业进入执行器前已分配的内存,单位MB。 used_mem integer 当前正在执行作业已分配的内存,单位MB。 peak_mem integer 当前正在执行作业已分配的内存峰值,单位MB。 父主题: 系统视图
  • 参数说明 SESSION 声明的参数只对当前会话起作用。如果SESSION和LOCAL都没出现,则SESSION为缺省值。 如果在事务中执行了此命令,命令的产生影响将在事务回滚之后消失。如果该事务已提交,影响将持续到会话的结束,除非被另外一个SET命令重置参数。 LOCAL 声明的参数只在当前事务中有效。在COMMIT或ROLLBACK之后,会话级别的设置将再次生效。 不论事务是否提交,此命令的影响只持续到当前事务结束。一个特例是:在一个事务里面,既有SET命令,又有SET LOCAL命令,且SET LOCAL在SET后面,则在事务结束之前,SET LOCAL命令会起作用,但事务提交之后,则是SET命令会生效。 TIME ZONE timezone 用于指定当前会话的本地时区。 取值范围:有效的本地时区。该选项对应的运行时参数名称为TimeZone,DEFAULT缺省值为PRC。 CURRENT_SCHEMA schema CURRENT_SCHEMA用于指定当前的模式。 取值范围:已存在模式名称。 SCHEMA schema 同CURRENT_SCHEMA。此处的schema是个字符串。 例如:set schema 'public'; NAMES encoding_name 用于设置客户端的字符编码。等价于set client_encoding to encoding_name。 取值范围:有效的字符编码。该选项对应的运行时参数名称为client_encoding,默认编码为UTF8。 XML OPTION option 用于设置XML的解析方式。 取值范围:CONTENT(缺省)、DOCUMENT config_parameter 可设置的运行时参数的名称。可用的运行时参数可以使用SHOW ALL命令查看。 部分通过SHOW ALL查看的参数不能通过SET设置。如max_datanodes。 value config_parameter的新值。可以声明为字符串常量、标识符、数字,或者逗号分隔的列表。DEFAULT用于把这些参数设置为它们的缺省值。
  • 语法格式 设置所处的时区。 1 SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }; 设置所属的模式。 1 2 3 SET [ SESSION | LOCAL ] {CURRENT_SCHEMA { TO | = } { schema | DEFAULT } | SCHEMA 'schema'}; 设置客户端编码集。 1 SET [ SESSION | LOCAL ] NAMES encoding_name; 设置XML的解析方式。 1 SET [ SESSION | LOCAL ] XML OPTION { DOCUMENT | CONTENT }; 设置其他运行时参数。 1 2 3 SET [ LOCAL | SESSION ] {config_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }};
  • alarm_component 参数说明:设置用于处理告警内容的告警组件的位置。 取值范围:字符串。参数修改请参考表2进行设置。 若前置脚本gs_preinstall中的--alarm-type参数设置为5时,表示未对接第三方组件,告警写入system_alarm日志,此时GUC参数alarm_component的取值为:/opt/huawei/snas/bin/snas_cm_cmd。 若前置脚本gs_preinstall中的--alarm-type参数设置为1时,表示对接第三方组件,此时GUC参数alarm_component的值为第三方组件的可执行程序的绝对路径。 默认值:/opt/huawei/snas/bin/snas_cm_cmd
  • cm_krb_server_keyfile 参数说明:kerberos服务端key文件所在位置,需要配置为绝对路径。该文件通常为${GAUSSHOME}/kerberos路径下,以keytab格式结尾,文件名与集群运行所在用户名相同。与上述cm_auth_method参数是配对的,当cm_auth_method参数修改为gss时,该参数也必须配置为正确路径,否则将影响集群状态 取值范围:字符串类型,参数修改请参考表1进行设置。 默认值:${GAUSSHOME}/kerberos/{UserName}.keytab,默认值无法生效,仅作为提示
  • ddb_log_level 参数说明:设置ddb日志级别。 关闭日志:“NONE”,NONE表示关闭日志打印,不能与以下日志级别混合使用。 开启日志:“RUN_ERR|RUN_WAR|RUN_INF|DEBUG_ERR|DEBUG_WAR|DEBUG_INF|TRACE|PROFILE|OPER”日志级别可以从上述字符串中选取字符串并使用竖线组合使用,不能配置空串。 取值范围:字符串,RUN_ERR|RUN_WAR|RUN_INF|DEBUG_ERR|DEBUG_WAR|DEBUG_INF|TRACE|PROFILE|OPER。参数修改请参考表2进行设置。 默认值:RUN_ERR|RUN_WAR|DEBUG_ERR|OPER|RUN_INF|PROFILE
共100000条