华为云用户手册

  • ssl_ca_file 参数说明:指定包含CA信息的根证书名称,其相对路径是相对于数据目录的。 参数类型:字符串 参数单位:无 取值范围:合法文件名称,需要以“.pem”结尾。其中空字符串表示没有CA文件被加载,不进行客户端证书验证。 默认值:"cacert.pem" 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:需要进行客户端证书验证时,请正确配置文件路径。 设置不当的风险与影响:文件路径错误时,会导致数据库无法校验客户端证书,通信安全性降低。
  • ssl_renegotiation_limit 参数说明:指定在会话密钥重新协商之前,通过SSL加密通道可以传输的流量。这个重新协商流量限制机制可以减少攻击者针对大量数据使用密码分析法破解密钥的几率,但是也带来较大的性能损失。流量是指发送和接受的流量总和。 参数类型:整型 参数单位:kB 取值范围:0 ~ 2147483647。其中0表示禁用重新协商机制。 默认值:0 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值1024,表示ssl_renegotiation_limit为1024kB;带单位取值1MB,表示ssl_renegotiation_limit为1MB。取值如果要带单位,必须为kB、MB、GB。 设置建议:建议不做修改。使用SSL重协商机制可能引入其他风险,因此已禁用SSL重协商机制,为保持版本兼容保留此参数,修改参数配置不再起作用。 设置不当的风险与影响:修改该参数取值可能导致集群出现意料之外的结果,请保持默认值。
  • ssl_enc_cert_file 参数说明:指定包含SSL服务器国密加密证书的文件的名称,其相对路径是相对于数据目录的。 参数类型:字符串 参数单位:无 取值范围:合法文件名称,需要以“.crt”结尾。 默认值:"" 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:配置文件路径时,需要确保其与其余国密SSL相关证书/私钥配置文件是配套关系。 设置不当的风险与影响:文件路径错误时,会导致客户端与数据库节点之间无法建立国密SSL连接,数据库集群节点之间无法进行国密SSL通信,数据存在泄漏风险。
  • auth_iteration_count 参数说明:认证加密信息生成过程中使用的迭代次数。 参数类型:整型 参数单位:无 取值范围:2048 ~ 134217728 默认值:10000 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:请根据实际硬件条件合理设置迭代次数,推荐采用默认迭代次数。 设置不当的风险与影响:迭代次数设置过小会降低口令存储的安全性,设置过大会导致认证、用户创建等涉及口令加密的场景性能劣化。
  • session_timeout 参数说明:表明与服务器建立连接后,不进行任何操作的最长时间。当该参数取值不为0,用户不进行任何操作的时间超过该参数取值后,会与服务器断开连接。 参数类型:整型 参数单位:s(秒) 取值范围:0 ~ 86400(1d) 0表示关闭超时设置。 正数表示与服务器建立连接后,不进行任何操作的最长时间。当超过设定的值后,会与服务器断开连接。 默认值:600 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值600,表示session_timeout为600s;带单位取值10min,表示session_timeout为10min。取值如果要带单位,必须为s、min、h、d。 设置建议:参数值设置越小越安全,但用户使用越不便,依据业务安全诉求设定。 设置不当的风险与影响:设置过小可能造成业务连接池中长连接失效,进而导致业务失败。 GaussDB gsql客户端中有自动重连机制,所以针对初始化用户本地连接,超时后gsql表现的现象为断开后重连。
  • authentication_timeout 参数说明:完成客户端认证的最长时间。如果一个客户端没有在这段时间里完成与服务器端的认证,则服务器自动中断与客户端的连接,这样就避免了出问题的客户端无限制地占用连接数。 参数类型:整型 参数单位:s(秒) 取值范围:1 ~ 600 默认值:60 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值600,表示authentication_timeout为600s;带单位取值10min,表示authentication_timeout为10min。取值如果要带单位,必须为s、min、h、d。 设置建议:推荐使用默认值。 设置不当的风险与影响:参数设置过小,可能会导致频繁遇到连接失败,影响用户使用。参数设置过大,会导致安全风险增加、资源浪费等问题。
  • idle_in_transaction_timeout 参数说明:表明与服务器建立连接并开启事务后,事务空闲并不进行任何操作的最长时间。当该参数取值不为0,事务空闲并不进行任何操作的时间超过该参数取值后,会与服务器断开连接。 参数类型:整型 参数单位:s(秒) 取值范围:0 ~ 86400(1d) 0表示关闭超时设置。 正数表示与服务器建立连接并开启事务后,事务空闲并不进行任何操作的最长时间。当超过设定的值后,会与服务器断开连接。 默认值:300(即5min) 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值600,表示idle_in_transaction_timeout为600s;带单位取值10min,表示idle_in_transaction_timeout为10min。取值如果要带单位,必须为s、min、h、d。 设置建议:参数值设置越小越安全,但用户使用越不便,依据业务安全诉求设定。 设置不当的风险与影响:参数设置过小,可能会使得事务开启后,客户端应用在运行过程中没有及时发送新的请求,从而导致会话超时退出,影响用户使用。 GaussDB gsql客户端中有自动重连机制,所以针对初始化用户本地连接,超时后gsql表现的现象为断开后重连。 idle_in_transaction_timeout与session_timeout同时开启时,在事务空闲状态下都会生效,以配置较小的超时时间为准。 新下发实例该参数取值为300,升级实例默认为0。 空闲事务超时后,日志中会打印事务的开始时间、线程id、应用名以及query等信息。该日志用于空闲事务超时退出问题定位,不包含前缀格式log_line_prefix。
  • STAT_USER_FUNCTIONS 显示当前节点的Schema中用户自定义函数(函数语言为非内部语言)的统计信息,如表1所示。 表1 STAT_USER_FUNCTIONS字段 名称 类型 描述 funcid oid 函数标识。 schemaname name Schema的名称。 funcname name 用户自定义函数的名称。 calls bigint 函数被调用的次数。 total_time double precision 调用此函数花费的总时间,包含调用其它函数的时间(单位:毫秒)。 self_time double precision 调用此函数本身花费的时间,不包含调用其它函数的时间(单位:毫秒)。 父主题: Object
  • DBE_PLDEBUGGER.set_var 将指定的调试的存储过程中最上层栈上的变量修改为入参的取值。如果存储过程中包含同名的变量,set_var只支持第一个变量值的设置,如表1所示。 表1 set_var入参和返回值列表 名称 类型 描述 var_name IN text 变量名。 value IN text 修改值。 result OUT boolean 是否成功。 父主题: DBE_PLDEBUGGER Schema
  • 示例 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 --创建表。 gaussdb=# CREATE TABLE test (id int, name text); --开启一个事务。 gaussdb=# START TRANSACTION; --修改表结构。 gaussdb=# ALTER TABLE test ADD COLUMN score int; --查看表结构。 gaussdb=# \d test; Table "public.test" Column | Type | Modifiers --------+---------+----------- id | integer | name | text | score | integer | --回滚。 gaussdb=# ROLLBACK; --表结构恢复初始状态。 gaussdb=# \d test; Table "public.test" Column | Type | Modifiers --------+---------+----------- id | integer | name | text | --删除test表。 gaussdb=# DROP TABLE test;
  • connect_by_root(col) 描述:仅在层次递归查询中适用,用于返回当前行最顶层父行中某列的值。 参数col为输出列的名称。仅支持如下类型的列:INT8、INT1、INT2、OID、INT4、BOOL、CHAR、NAME、FLOAT4、FLOAT8、ABSTIME、RELTIME、DATE、CASH、TIME、TIMESTAMP、TIMESTAMPTZ、SMALLDATETIME、UUID、INTERVAL、TIMETZ、INT2VECTOR、CLOB、NVARCHAR2、VARCHAR、TEXT、VECTOR、BPCHAR、RAW、BYTEA、NUMERIC、XID、CID以及TID,且通过强制类型转换为上述类型的操作无法绕开白名单限制,如:connect_by_root(col::text)(其中col不是上述白名单中的类型)。 返回值类型:所指定列col的数据类型。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 --建表导数。 gaussdb=# CREATE TABLE connect_by_table(id int,pid int,name text); CREATE TABLE gaussdb=# INSERT INTO connect_by_table VALUES(1,0,'a'),(2,1,'b'),(3,2,'c'),(4,1,'d'); INSERT 0 4 --查询。 gaussdb=# SELECT *, connect_by_root(name) FROM connect_by_table START WITH id = 1 CONNECT BY prior id = pid ORDER BY pid, id; id | pid | name | connect_by_root ----+-----+------+----------------- 1 | 0 | a | a 2 | 1 | b | a 4 | 1 | d | a 3 | 2 | c | a (4 rows) --恢复环境。 gaussdb=# DROP TABLE connect_by_table; DROP TABLE
  • sys_connect_by_path(col, separator) 描述:仅在层次递归查询中适用,用于返回从根节点到当前行的连接路径。 参数col为在路径中显示的列的名称,只支持类型为CHAR、VARCHAR、NVARCHAR2、TEXT、INT1、INT2、INT4、INT8、FLOAT4、FLOAT8和NUMERIC的列,参数separator为路径节点之间的分隔符。当前该函数col输入不支持表达式输入,列内容与分隔符separator重复时可正常运行,不会报错。 返回值类型:TEXT 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 --建表导数。 gaussdb=# CREATE TABLE connect_by_table(id int,pid int,name text); CREATE TABLE gaussdb=# INSERT INTO connect_by_table VALUES(1,0,'a'),(2,1,'b'),(3,2,'c'),(4,1,'d'); INSERT 0 4 --查询。 gaussdb=# SELECT *, sys_connect_by_path(name, '-') FROM connect_by_table START WITH id = 1 CONNECT BY prior id = pid ORDER BY pid, id; id | pid | name | sys_connect_by_path ----+-----+------+--------------------- 1 | 0 | a | -a 2 | 1 | b | -a-b 4 | 1 | d | -a-d 3 | 2 | c | -a-b-c (4 rows) --恢复环境。 gaussdb=# DROP TABLE connect_by_table; DROP TABLE
  • MY_TYPE_ATTRS MY_TYPE_ATTRS视图显示数据库中当前用户所拥有的所有类型的属性。所有用户均可访问该视图,该视图同时存在于PG_CATA LOG 和SYS Schema下。具体字段信息如表1所示。 表1 MY_TYPE_ATTRS字段 名称 类型 描述 type_name character varying(128) 数据类型名称。 attr_name character varying(128) 属性名称。 attr_type_mod character varying(7) 属性的类型修饰符: REF POINT attr_type_owner character varying(128) 属性类型的所有者。 attr_type_name character varying(128) 属性类型的名称。 length numeric CHAR属性的长度,或VARCHAR和character varying属性的最大长度。 precision numeric 数字或DECIMAL属性的十进制精度,或FLOAT属性的二进制精度。 scale numeric NUMERIC或DECIMAL属性的小数位。 character_set_name character varying(44) 属性的字符集名称(Char_ CS 或NCHAR_CS)。 attr_no numeric 类型规范或CREATE TYPE语句中指定的属性的语法顺序编号或位置(不用作id编号)。 inherited character varying(3) 表示属性是否继承自超类型。 YES:表示继承自超类型。 NO:表示没有继承自超类型。 父主题: 其他系统视图
  • 数据库逻辑结构图 集群的每个DN(Data Node,数据节点)负责存储数据,其存储介质是磁盘,本节主要从逻辑视角介绍每个DN上有哪些对象,以及这些对象之间的关系。另外介绍数据在不同节点的分布方式。数据库逻辑结构如图1所示。 图1 数据库逻辑结构图 Tablespace,即表空间,表空间是一个目录,集群中可以存在多个表空间,其中存储的是它所包含的数据库的各种物理文件。每个表空间可以对应多个Database。 Database,即数据库,用于管理各类数据对象,各数据库间相互隔离。数据库管理的对象可分布在多个Tablespace上。 Datafile Segment,即数据文件,通常每张表只对应一个数据文件。如果某张表的数据大于1GB,则会分为多个数据文件存储。 Table,即表,每张表只能属于一个数据库,也只能对应到一个Tablespace。每张表对应的数据文件必须在同一个Tablespace中。 Block,即数据块,是数据库管理的基本单位,默认大小为8KB。 数据在不同的DN上有四种分布方式,可以在建表的时候指定:REPLICATION、HASH、RANGE、LIST。 父主题: 数据库系统概述
  • GS_SEG_SPC_SEGMENTS GS_SEG_SPC_SEGMENTS获取所有表空间已使用的段信息。只支持管理员权限用户查询。 表1 GS_SEG_SPC_SEGMENTS字段 名称 类型 描述 node_name text 节点名称。 tablespace_name name 表空间名称。 file_id integer 数据文件标识。取值范围:[1,5]的int4值。 bucketnode integer 0~1023表示hash bucket表的bucketnode。 1024表示段页式普通表的bucketnode。 1025表示段页式全局临时表的bucketnode。 1026表示段页式unlogged表的bucketnode。 1027表示段页式本地临时表的bucketnode。 2048~6143表示rangebucket表的bucketnode。 forknum integer 段对象的分支类型。取值范围: 0表示main fork。 1表示fsm fork。 2表示vm fork。 block_id bigint 数据扩展的起始页面号。 blocks integer 数据扩展大小。取值:1、8、128、1024、4096。 contents text 数据文件的存储内容。取值范围: permanent:永久。 unlogged:不记录日志。 temporary:全局临时。 temporary2:本地临时。 in_used text 是否已分配。取值Y/N。 mapblock_location text 扩展在map block中的位置,格式:(page_id, offset)。 head_file_id integer 段头文件标识。 head_block_id bigint 段头页面号。 usage_type text 扩展的使用类型,取值范围: segment head表示段头。 fork head表示分支头。 level1 page表示level页面。 data extent表示数据扩展。 remain_flag text 是否为shrink残留扩展。取值Y/N。 special_data integer 扩展对应反向指针的特殊数据区。 ipblock_location text 扩展反向指针位置,格式:(block_id, offset)。 父主题: 段页式存储
  • MY_TABLESPA CES MY_TABLESPACES视图显示用户拥有存储对象的表空间的描述信息。默认所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。具体字段信息如表1所示。 表1 MY_TABLESPACES字段 名称 类型 描述 tablespace_name character varying(64) 表空间名称。 block_size numeric 暂不支持,值为NULL。 initial_extent numeric 暂不支持,值为NULL。 next_extent numeric 暂不支持,值为NULL。 min_extents numeric 暂不支持,值为NULL。 max_extents numeric 暂不支持,值为NULL。 max_size numeric 暂不支持,值为NULL。 pct_increase numeric 暂不支持,值为NULL。 min_extlen numeric 暂不支持,值为NULL。 contents character varying(9) 暂不支持,值为NULL。 status character varying(9) 表空间状态,默认为ONLINE(在线)。 logging character varying(9) 暂不支持,值为NULL。 force_logging character varying(3) 暂不支持,值为NULL。 extent_management character varying(10) 暂不支持,值为NULL。 allocation_type character varying(9) 暂不支持,值为NULL。 segment_space_management character varying(6) 暂不支持,值为NULL。 def_tab_compression character varying(8) 暂不支持,值为NULL。 retention character varying(11) 暂不支持,值为NULL。 bigfile character varying(3) 暂不支持,值为NULL。 predicate_evaluation character varying(7) 暂不支持,值为NULL。 encrypted character varying(3) 暂不支持,值为NULL。 compress_for character varying(30) 暂不支持,值为NULL。 def_inmemory character varying(8) 暂不支持,值为NULL。 def_inmemory_priority character varying(8) 暂不支持,值为NULL。 def_inmemory_distribute character varying(15) 暂不支持,值为NULL。 def_inmemory_compression character varying(17) 暂不支持,值为NULL。 def_inmemory_duplicate character varying(13) 暂不支持,值为NULL。 shared character varying(12) 暂不支持,值为NULL。 def_index_compression character varying(8) 暂不支持,值为NULL。 index_compress_for character varying(13) 暂不支持,值为NULL。 def_cellmemory character varying(14) 暂不支持,值为NULL。 def_inmemory_service character varying(12) 暂不支持,值为NULL。 def_inmemory_service_name character varying(1000) 暂不支持,值为NULL。 lost_write_protect character varying(7) 暂不支持,值为NULL。 chunk_tablespace character varying(1) 暂不支持,值为NULL。 父主题: 其他系统视图
  • 参数说明 IF EXISTS 如果指定的表不存在,则发出一个notice而不是抛出一个error。 schema 模式名称。 table_name 表名称。 CASCADE | RESTRICT CASCADE:表示允许级联删除依赖于该表的对象(比如视图、触发器、索引;注:关联的表对象无法被级联删除)。 RESTRICT:表示有依赖于该表的对象存在时,该表无法被删除。此选项为缺省值。 PURGE 该参数表示即使开启回收站功能,使用DROP TABLE删除表时,也会直接物理删除表,而不是将其放入回收站中。
  • DBE_SQL_UTIL.create_hint_sql_patch create_hint_sql_patch是用于在当前建立连接的CN上创建调优SQL PATCH的接口函数,返回执行是否成功,如表1所示。 限制:仅初始用户、sysadmin、opradmin和monadmin用户有权限调用。 CN之间SQL PATCH不共享,要在各个CN上单独创建。 开启负载均衡场景或者需要指定创建的CN的场景,推荐使用DBE_SQL_UTIL.create_remote_hint_sql_patch接口进行创建。 表1 DBE_SQL_UTIL.create_hint_sql_patch入参和返回值列表 参数 类型 描述 patch_name IN name PATCH名称。 unique_sql_id IN bigint 查询全局唯一id。 hint_string IN text Hint文本。 description IN text PATCH的备注,默认值为NULL。 enabled IN bool PATCH是否生效,默认值为true。 result OUT bool 执行是否成功。 父主题: DBE_SQL_UTIL Schema
  • 示例 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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 --创建一个兼容性为ORA的数据库。 gaussdb=# CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'ORA'; CREATE DATABASE --切换数据库。 gaussdb=# \c ora_compatible_db --定义函数为SQL查询。 ora_compatible_db=# CREATE FUNCTION func_add_sql(integer, integer) RETURNS integer AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; --利用参数名用plpgsql自增一个整数。 ora_compatible_db=# CREATE OR REPLACE FUNCTION func_increment_plsql(i integer) RETURNS integer AS $$ BEGIN RETURN i + 1; END; $$ LANGUAGE plpgsql; --返回RECORD类型。 ora_compatible_db=# CREATE OR REPLACE FUNCTION compute(i int, out result_1 bigint, out result_2 bigint) RETURNS SETOF RECORD AS $$ BEGIN result_1 = i + 1; result_2 = i * 10; RETURN next; END; $$LANGUAGE plpgsql; --返回一个包含多个输出参数的记录。 ora_compatible_db=# CREATE FUNCTION func_dup_sql(in int, out f1 int, out f2 text) AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$ LANGUAGE SQL; --调用func_dup_sql函数。 ora_compatible_db=# SELECT * FROM func_dup_sql(42); f1 | f2 ----+------------ 42 | 42 is text (1 row) --计算两个整数的和,并返回结果。如果输入为null,则返回null。 ora_compatible_db=# CREATE FUNCTION func_add_sql2(num1 integer, num2 integer) RETURN integer AS BEGIN RETURN num1 + num2; END; / --创建package属性的重载函数。 ora_compatible_db=# CREATE OR REPLACE FUNCTION package_func_overload(col int, col2 int) RETURN integer PACKAGE AS DECLARE col_type text; BEGIN col := 122; dbe_output.print_line('two int parameters ' || col2); RETURN 0; END; / --创建package_func_overload函数第二个形参参数类型不一样的重载函数。 ora_compatible_db=# CREATE OR REPLACE FUNCTION package_func_overload(col int, col2 smallint) RETURN integer PACKAGE AS DECLARE col_type text; BEGIN col := 122; dbe_output.print_line('two smallint parameters ' || col2); RETURN 0; END; / --删除函数。 ora_compatible_db=# DROP FUNCTION func_add_sql; ora_compatible_db=# DROP FUNCTION func_increment_plsql; ora_compatible_db=# DROP FUNCTION compute; ora_compatible_db=# DROP FUNCTION func_dup_sql; ora_compatible_db=# DROP FUNCTION package_func_overload(col int, col2 int); ora_compatible_db=# DROP FUNCTION package_func_overload(col int, col2 smallint); ora_compatible_db=# DROP FUNCTION func_add_sql2; --当GUC参数behavior_compat_options的取值不包含proc_outparam_override时,被匿名块或存储过程直接调用的函数的OUT、INOUT出参不能使用复合类型,并且RETURN值会被当做OUT出参的第一个值,导致调用失败。 ora_compatible_db=# CREATE TYPE rec AS(c1 int, c2 int); ora_compatible_db=# CREATE OR REPLACE FUNCTION func(a in out rec, b in out int) RETURN int AS BEGIN a.c1:=100; a.c2:=200; b:=300; RETURN 1; END; / ora_compatible_db=# DECLARE r rec; b int; BEGIN func(r,b); --不支持 END; / ERROR: A non-composite value cannot be assigned to a row variable. CONTEXT: PL/pgSQL function inline_code_block line 4 at SQL statement ora_compatible_db=# DROP FUNCTION func; ora_compatible_db=# DROP TYPE rec; --以下示例只有当数据库兼容模式为ORA时可以执行。 ora_compatible_db=# CREATE OR REPLACE PACKAGE pkg_type AS type table_of_index_int is table of integer index by integer; --创建integer类型 type table_of_index_int01 is table of table_of_index_int index by integer; --创建嵌套integer类型 type table_of_index_var is table of integer index by varchar(5); --创建varchar类型 type table_of_index_var01 is table of table_of_index_var index by varchar(5); --创建嵌套varchar类型 END pkg_type; / --创建一个返回table of integer index by integer类型结果的函数。 ora_compatible_db=# CREATE OR REPLACE FUNCTION func_001(a in out pkg_type.table_of_index_int, b in out pkg_type.table_of_index_var) --#add in & inout #defult value RETURN pkg_type.table_of_index_int AS table_of_index_int_val pkg_type.table_of_index_int; table_of_index_var_val pkg_type.table_of_index_var; BEGIN for i in 1..2 loop table_of_index_int_val(i) := i; a(i) := i; table_of_index_var_val(i) := i; b(i) := i; end loop; raise info '%',table_of_index_int_val; raise info '%',table_of_index_var_val; raise info '%',a; raise info '%',b; RETURN table_of_index_int_val; END; / ora_compatible_db=# DECLARE table_of_index_int_val pkg_type.table_of_index_int; table_of_index_var_val pkg_type.table_of_index_var; BEGIN func_001(table_of_index_int_val,table_of_index_var_val); END; / --创建一个含有IN/OUT类型参数的函数。 ora_compatible_db=# CREATE OR REPLACE FUNCTION func_001(a in out date, b in out date) --#add in & inout #defult value RETURN integer AS BEGIN raise info '%', a; raise info '%', b; RETURN 1; END; / ora_compatible_db=# DECLARE date1 date := '2022-02-02'; date2 date := '2022-02-02'; BEGIN func_001(date1, date2); END; / --创建一个含有IN/OUT类型参数的函数。 ora_compatible_db=# CREATE OR REPLACE FUNCTION func_001(a in out INT, b in out date) --#add in & inout #defult value RETURN INT AS BEGIN raise info '%', a; raise info '%', b; RETURN a; END; / ora_compatible_db=# DECLARE date1 int := 1; date2 date := '2022-02-02'; BEGIN func_001(date1, date2); END; / INFO: 1 CONTEXT: PL/SQL function inline_code_block line 5 at SQL statement INFO: 2022-02-02 00:00:00 CONTEXT: PL/SQL function inline_code_block line 5 at SQL statement ANONYMOUS BLOCK EXECUTE --删除函数。 ora_compatible_db=# DROP FUNCTION func_001; --删除package。 ora_compatible_db=# DROP PACKAGE pkg_type; --切换回初始数据库,并删除测试数据库。请用真实的数据库名替换postgres。 ora_compatible_db=# \c postgees gaussdb=# DROP DATABASE ora_compatible_db;
  • 注意事项 如果创建函数时参数或返回值带有精度,不进行精度检测。 创建函数时,函数定义中对表对象的操作建议都显式指定模式,否则可能会导致函数执行异常。 在创建函数时,函数内部通过SET语句设置current_schema和search_path无效。执行完函数后的search_path和current_schema与执行函数前的search_path和current_schema保持一致。 如果函数参数中带有出参,想要出参生效,必须设置GUC参数behavior_compat_options = 'proc_outparam_override';SELECT、CALL调用函数时,必须要在出参位置提供实参进行调用,否则函数调用失败。 兼容PostgreSQL风格的函数或者带有PACKAGE属性的函数支持重载。在指定REPLACE的时候,如果参数个数、类型、返回值有变化,不会替换原有函数,而是会建立新的函数。 不能创建仅形参名字不同(函数名和参数列表类型都一样)的重载函数。 不能创建与存储过程拥有相同名称和参数列表的函数。 不支持形参仅在自定义ref cursor类型和sys_refcursor类型不同的重载。 不支持仅返回的数据类型不同的函数重载。 不支持仅默认值不同的函数重载。 重载的函数在调用时变量需要明确具体的类型。 ORA兼容模式的数据库,建立ORA风格的函数;PG兼容模式的数据库,建立PG风格的函数。不建议混合创建。 函数如果支持重载,需要添加PACKAGE关键字。 在函数内部使用未声明的变量,函数被调用时会报错。 SELECT调用可以指定不同参数来进行同名函数调用。语法CALL不支持调用不带有PACKAGE属性的同名函数。 在创建function时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。 在普通集群模式下,暂不支持将返回值、参数以及变量设置为建在非系统默认安装Node Group的表,sql function内部语句暂不支持对建在非系统默认安装Node Group的表操作。 新创建的函数默认会给PUBLIC授予执行权限(详见GRANT)。用户默认继承PUBLIC角色权限,因此其他用户也会有函数的执行权限并可以查看函数的定义,另外执行函数时还需要具备函数所在schema的USAGE权限。用户在创建函数时可以选择收回PUBLIC默认执行权限,然后根据需要将执行权限授予其他用户,为了避免出现新函数能被所有人访问的时间窗口,应在一个事务中创建函数并且设置函数执行权限。开启数据库对象隔离属性后,普通用户只能查看有权限执行的函数定义。 函数定义时如果指定为IMMUTABLE和SHIPPABLE类型,应该尽量避免函数中存在INSERT,UPDATE,DELETE,MERGE和DDL操作,因为上述操作应该由CN判断对应的执行节点,否则执行结果可能产生错误。如果在声明为IMMUTABLE和SHIPPABLE类型的函数中下推执行了DDL,可能会导致各节点数据库对象不一致。修复此类问题可以在CN上创建VOLATILE PL/SQL函数,函数定义中使用execute语句动态执行用于修复系统对象的DDL,再使用EXECUTE DIRECT ON语法在指定的DN上执行修复函数调用,从而解决引入的问题。 在函数内部调用其它无参数的函数时,可以省略括号,直接使用函数名进行调用。 当GUC参数behavior_compat_options的取值不包含proc_outparam_override时,被匿名块或存储过程直接调用的函数的OUT、IN OUT出参不能使用复合类型,并且RETURN值会被当做OUT出参的第一个值导致调用失败,想正确使用OUT、IN OUT出参,需设置GUC参数behavior_compat_options = 'proc_outparam_override',见示例。 在函数内部调用其他有出参的函数,如果在赋值表达式中调用时,需要设置GUC参数behavior_compat_options = 'proc_outparam_override' ,并提前定义与出参类型相同的变量,然后将变量作为出参调用带有出参的其他函数,出参才能生效。否则,被调函数的出参会被忽略。 在打开GUC参数proc_outparam_override后,函数返回值为setof类型时,out出参不会生效。 兼容Oracle风格的函数支持参数注释的查看与导出、导入。 兼容Oracle风格的函数支持介于IS/AS与plsql_body之间的注释的查看与导出、导入。 被授予CREATE ANY FUNCTION权限的用户,可以在用户模式下创建/替换函数。 函数默认为SECURITY INVOKER权限,如果想将默认行为改为SECURITY DEFINER权限,需要设置GUC参数behavior_compat_options='plsql_security_definer'。
  • 语法格式 兼容PostgreSQL风格的创建自定义函数语法。 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 function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ]} [, ...] ] ) [ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_name column_type } [, ...] )] LANGUAGE lang_name [ {IMMUTABLE | STABLE | VOLATILE } | {SHIPPABLE | NOT SHIPPABLE} | WINDOW | [ NOT ] LEAKPROOF | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER} | {fenced | not fenced} | {PACKAGE} | COST execution_cost | ROWS result_rows | SET configuration_parameter { {TO | =} value | FROM CURRENT } ][...] { AS 'definition' | AS 'obj_file', 'link_symbol' }; 兼容O风格的创建自定义函数的语法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CREATE [ OR REPLACE ] FUNCTION function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ] } [, ...] ] ) RETURN rettype [ DETERMINISTIC ] [ {IMMUTABLE | STABLE | VOLATILE } | {SHIPPABLE | NOT SHIPPABLE} | {PACKAGE} | {FENCED | NOT FENCED} | [ NOT ] LEAKPROOF | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER} | COST execution_cost | ROWS result_rows | SET configuration_parameter { {TO | =} value | FROM CURRENT } | LANGUAGE lang_name ][...] { IS | AS } plsql_body /
  • ADM_PROCEDURES ADM_PROCEDURES视图显示数据库中所有存储过程、函数和触发器的信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_PROCEDURES字段 名称 类型 描述 owner character varying(64) 存储过程、函数、触发器或包的所有者。 object_name character varying(64) 存储过程、函数或触发器的名称。若为包中函数或存储过程,则为包名。 procedure_name character varying(128) 若object_name为包名,则为包中函数或存储过程名称,否则为空。 object_id oid 存储过程、函数、触发器或包的OID。 subprogram_id numeric 包中函数或存储过程的位置。 overload character varying(40) 该函数是该名称的第n个重载函数。 object_type character varying(13) 对象的类型。 aggregate character varying(3) 是否为聚合函数。 YES:是。 NO:不是。 pipelined character varying(3) 暂不支持,值为NO。 impltypeowner character varying(128) 实现类型的所有者。 impltypename character varying(128) 实现类型的名称。 parallel character varying(3) 暂不支持,值为NO。 interface character varying(3) 暂不支持,值为NO。 deterministic character varying(3) 暂不支持,值为NO。 authid character varying(12) 使用的权限类型。 DEFINER:使用创建者权限。 CURRENT_USER:使用调用者权限。 因该字段与保留关键字冲突,调用该字段需加视图名。 result_cache character varying(3) 暂不支持,值为NULL。 origin_con_id character varying(256) 暂不支持,值为0。 polymorphic character varying(5) 暂不支持,值为NULL。 argument_number smallint 存储过程的入参个数。 父主题: 其他系统视图
  • 原型 1 2 3 4 5 6 7 SQLRETURN SQLColAttibute(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAtrriburePtr, SQLSMALLINT BufferLength, SQLSMALLINT *StringLengthPtr, SQLLEN *NumericAttributePtr);
  • 参数 表1 SQLColAttribute参数 关键字 参数说明 StatementHandle 语句句柄。 ColumnNumber 要检索字段的列号,起始为1,依次递增。 FieldIdentifier IRD中ColumnNumber行的字段。 CharacterAttributePtr 输出参数:一个缓冲区指针,返回FieldIdentifier字段值。 BufferLength 如果FieldIdentifier是一个ODBC定义的字段,而且CharacterAttributePtr指向一个字符串或二进制缓冲区,则此参数为该缓冲区的长度。 如果FieldIdentifier是一个ODBC定义的字段,而且CharacterAttributePtr指向一个整数,则会忽略该字段。 StringLengthPtr 输出参数:缓冲区指针,存放*CharacterAttributePtr中字符类型数据的字节总数,对于非字符类型,忽略BufferLength的值。 NumericAttributePtr 输出参数:指向一个整型缓冲区的指针,返回IRD中ColumnNumber行FieldIdentifier字段的值。
  • LOCAL_PREPARE_STATEMENT_STATUS LOCAL_PREPARE_STATEMENT_STATUS视图显示当前节点的GPC全局计划缓存状态对应的prepare statement信息,如表1所示。 表1 LOCAL_PREPARE_STATEMENT_STATUS字段 名称 类型 描述 nodename text 所属节点名称。 cn_sess_id bigint 其来自的cn的sessionid。 cn_node_id integer 其来自的cn的node_id。 cn_time_line integer 其来自的cn的重启次数。 statement_name text 其statement name。 refcount integer 其对应的plancache的被引用次数。 is_shared bool 其对应plancache是否共享。 query text 对应的query语句。 父主题: Global Plancache
  • DB_TAB_COLUMNS DB_TAB_COLUMNS视图显示当前用户可访问的表和视图的列的描述信息。该视图同时存在于PG_CATALOG和SYS Schema下。该视图所有用户可访问,显示当前用户可访问的所有信息。 表1 DB_TAB_COLUMNS字段 名称 类型 描述 owner character varying(64) 表的所有者。 table_name character varying(64) 表的名称。 column_name character varying(64) 列的名称。 data_type character varying(128) 列的数据类型。 data_type_mod character varying(3) 暂不支持,值为NULL。 data_type_owner character varying(128) 列的数据类型的所有者。 data_length integer 列的字节长度。 data_precision integer 数据类型的精度。对于numeric数据类型有效,其他类型为NULL。 data_scale integer 小数点右边的位数。对于numeric数据类型有效,其他类型为0。 nullable bpchar 该列是否允许为空。取值范围: y:允许。 n:不允许。对于主键约束和非空约束,该值为n。 column_id integer 创建表时列的序号。 default_length numeric 列的默认值字节长度。 data_default text 列的默认值。 num_distinct numeric 列中不同值的数量。 low_value raw 列中的最小值。 high_value raw 列中的最大值。 density numeric 列密度。 num_nulls numeric 列中空值数。 num_buckets numeric 列的直方图的桶数。 last_analyzed date 上次分析的日期。 sample_size numeric 用于分析此列的样本量。 character_set_name character varying(44) 暂不支持,值为NULL。 char_col_decl_length numeric 字符类型列的声明长度。 global_stats character varying(3) 暂不支持,值为NO。 user_stats character varying(3) 暂不支持,值为NO。 avg_col_len numeric 列的平均长度(单位字节)。 char_length numeric 列的长度(以字符计),只对varchar,nvarchar2,bpchar,char类型有效。 char_used character varying(1) 暂不支持,varchar、bpchar与char类型值为B;nvarchar2类型值为C;其余值为NULL。 v80_fmt_image character varying(3) 暂不支持,值为NULL。 data_upgraded character varying(3) 暂不支持,值为YES。 histogram character varying(15) 直方图是否存在以及其类型: NONE:不存在直方图。 FREQUENCY:频率直方图。 EQUI_W IDT H:等宽直方图。 default_on_null character varying(3) 暂不支持,值为NULL。 identity_column character varying(3) 暂不支持,值为NULL。 evaluation_edition character varying(128) 暂不支持,值为NULL。 unusable_before character varying(128) 暂不支持,值为NULL。 unusable_beginning character varying(128) 暂不支持,值为NULL。 collation character varying(100) 列的排序规则。因该字段与保留关键字冲突,调用该字段需加视图名。 comments text 注释。 schema character varying(64) 列所属的名称空间的名称。 父主题: 其他系统视图
  • GS_BUCKET_LOCKS GS_BUCKET_LOCKS视图存储各打开事务所持有的bucket锁信息。仅支持分布式下的CN查询。 表1 GS_BUCKET_LOCKS字段 名称 类型 引用 描述 node_name text - 节点名称。 database oid PG_DATABASE.oid 被锁定对象所在数据库的OID。 virtualtransaction text - 持有此锁或者在等待此锁的事务的虚拟ID。 pid bigint - 持有或者等待这个锁的服务器线程的逻辑ID。如果锁是被一个预备事务持有的,则为NULL。 sessionid bigint - 持有或者等待这个锁的会话ID。 modegs_seg_segments text - 这个线程持有的或者是期望的锁模式。 可能取值为:AccessShareLock、AccessExclusiveLock。 granted boolean - 如果锁是持有锁,则为TRUE。 如果锁是等待锁,则为FALSE。 fastpath boolean - 如果通过fast-path获得锁,则为TRUE;如果通过库级别锁信息获得锁或者两阶段提交时的锁,则为FALSE。 global_sessionid text - 全局会话ID。 bucketlist text - 被锁定的bucket列表。 bucket_group smallint - 被锁定的bucket所在的bucket组。 父主题: 其他系统视图
  • 参数说明 database_name 需要修改属性的数据库名称。 取值范围:字符串,要符合标识符命名规范。 connlimit 数据库可以接收的最大并发连接数(管理员用户连接除外)。 取值范围:[-1, 2^31-1]的整数,建议填写1~50的整数。-1(缺省)表示没有限制。 new_name 数据库的新名称。 取值范围:字符串,要符合标识符命名规范,且最大长度不超过63个字符。若超过63个字符,数据库会截断并保留前63个字符当做数据库名称。当数据库名称中包含大写字母时数据库会自动转换为小写字母,如果需要创建包含大写字母的数据库名称,则需要使用双引号进行声明。 标识符需要为小写字母(a~z)、大写字母(A~Z)、下划线(_)、数字(0~9)或美元符号($),且必须以字母或下划线开头。 new_owner 数据库的新所有者。 取值范围:字符串,有效的用户名。 new_tablespace 数据库新的默认表空间,该表空间为数据库中已经存在的表空间。默认的表空间为pg_default。 取值范围:字符串,有效的表空间名。 configuration_parameter 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 当前版本不支持设置数据库级别参数。 value 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 取值范围:字符串。 DEFAULT OFF RESET 用户指定的值:需要满足修改参数的取值限制。 FROM CURRENT 取当前会话中的值设置为configuration_parameter的值。 time_zone 设置database_name的数据库的时区值,需要有对应的数据库的权限。 取值范围:字符串。 系统支持的时区和其相应的缩写。 -15:59~+15:00 RESET configuration_parameter 重置指定的数据库会话参数值。 当前版本不支持重置数据库级别参数。 RESET ALL 重置全部的数据库会话参数值。 当前版本不支持重置数据库级别参数。 group_name hashbucket表绑定的node group名字,普通用户只支持绑定到installation node group上且不支持修改。 修改数据库默认表空间,会将旧表空间中的所有表和索引转移到新表空间中,该操作不会影响其他非默认表空间中的表和索引。 修改的数据库会话参数值,将在下一次会话中生效。 执行完参数设置后,需要手动执行CLEAN CONNECTION清理旧连接,否则可能存在集群节点间参数值不一致。
  • 语法格式 修改数据库的最大连接数。 1 2 ALTER DATABASE database_name [ WITH ] CONNECTION LIMIT connlimit; 修改数据库名称。 1 2 ALTER DATABASE database_name RENAME TO new_name; 禁止重命名templatea。 修改数据库所有者。 1 2 ALTER DATABASE database_name OWNER TO new_owner; 修改数据库默认表空间。 1 2 ALTER DATABASE database_name SET TABLESPACE new_tablespace; 如果该数据库中的某些表或对象已经创建在new_tablespace下,则无法将该数据库的默认表空间修改为new_tablespace,执行会报错。
  • 注意事项 只有数据库的所有者或者被授予了数据库ALTER权限的用户才能执行ALTER DATABASE命令,系统管理员默认拥有此权限。针对所要修改属性的不同,还有以下权限约束: 修改数据库名称,必须拥有CREATEDB权限。 修改数据库所有者,当前用户必须是该DATABASE的所有者或者系统管理员,必须拥有CREATEDB权限,且该用户是新所有者角色的成员。 修改数据库默认表空间,该用户必须拥有新表空间的CREATE权限。这个语句会从物理上将一个数据库原来缺省表空间上的表和索引移至新的表空间。注意不在缺省表空间的表和索引不受此影响。 不能重命名当前使用的数据库,如果需要重新命名,须连接至其他数据库上。 不允许将其他模式重命名为templatem,不允许将templatem模式重命名为其他名称。
共100000条
提示

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