华为云用户手册

  • best_agg_plan 参数说明:本参数用于控制优化器生成hashagg计划的类型。对于stream下的Agg操作,优化器会生成三种计划: hashagg+gather(redistribute)+hashagg。 redistribute+hashagg(+gather)。 hashagg+redistribute+hashagg(+gather)。 参数类型:整型 参数单位:无 取值范围:0 ~ 3 0:优化器会根据以上三种计划的估算cost选择最优的一种计划生成。 1:强制生成第一种计划。 2:如果group by列可以重分布,强制生成第二种计划,否则生成第一种计划。 3:如果group by列可以重分布,强制生成第三种计划,否则生成第一种计划。 默认值:0 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:无
  • agg_redistribute_enhancement 参数说明:进行聚集操作时,如果包含多个group by列且均不为分布列,进行重分布时会选择某一group by列进行重分布。本参数控制选择重分布列的策略。 参数类型:布尔型 参数单位:无 取值范围: on:表示会选择估算distinct值最多的一个可重分布列作为重分布列。 off:表示会选择第一个可重分布列作为重分布列。 默认值:off 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:无
  • enable_seqscan 参数说明:控制优化器对顺序扫描规划类型的使用。完全消除顺序扫描是不可能的,但是关闭这个变量会让优化器在存在其他方法的时候优先选择其他方法。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用。 off:表示不使用。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:无
  • enable_stream_concurrent_update 参数说明:控制优化器在并发更新场景下对stream的使用,该参数受限于enable_stream_operator参数。如果出现并发update冲突,有一定可能会出现报错,可以通过本参数控制。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许优化器对update语句生成stream计划。 off:表示优化器对update语句仅能生成非stream计划。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:无
  • enable_change_hjcost 参数说明:控制优化器在Hash Join代价估算路径选择时,是否使用将内表运行时代价排除在Hash Join节点运行时代价外的估算方式。如果使用,则有利于选择条数少,但运行代价大的表做内表。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用。 off:表示不使用。 默认值:off 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:无
  • enable_stream_operator 参数说明:控制优化器对stream的使用。当enable_stream_operator参数关闭时,会有大量关于计划不能下推的日志记录到日志文件中。如果用户不需要这些日志内容,建议用户在enable_stream_operator参数关闭时,也同时关闭enable_unshipping_log参数。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用。 off:表示不使用。 默认值: 独立部署:off
  • enable_stream_recursive 参数说明:控制是否将with-recursive关联查询下推DN分布式执行。 参数类型:布尔型 参数单位:无 取值范围: on:表示支持使用with-recursive关联查询下推DN分布式执行。 off:表示不支持使用with_recursive下推。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:无
  • max_recursive_times 参数说明:控制with recursive的最大迭代次数。 参数类型:整型 参数单位:无 取值范围:0~2147483647 默认值:200 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:对于with recursive语句,此参数用于避免陷入死循环,层次查询可用nocycle跳出循环。若要更改,请在理解参数含义后谨慎操作,避免因误操作产生意料之外的风险。
  • enable_nestloop 参数说明:控制优化器对内表全表扫描嵌套循环连接规划类型的使用。完全消除嵌套循环连接是不可能的,但是关闭这个变量就会让优化器在存在其他方法的时候优先选择其他方法。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用。 off:表示不使用。 默认值:off 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。
  • GLOBAL_STAT_BAD_BLOCK 获得数据库各节点的表、索引等文件的读取失败信息(不同节点下各文件的读取失败信息不进行汇总求和),如表1所示。 表1 GLOBAL_STAT_BAD_BLOCK字段 名称 类型 描述 node_name text 节点名称。 databaseid integer database的oid。 tablespaceid integer tablespace的oid。 relfilenode integer relation的file node。 forknum integer fork编号。 error_count integer error的数量。 first_time timestamp with time zone 页面损坏第一次出现的时间。 last_time timestamp with time zone 页面损坏最后出现的时间。 父主题: Object
  • SUMMARY_TRANSACTIONS_PREPARED_XACTS 显示集群中各CN节点当前准备好进行两阶段提交的事务的信息汇总,如表1所示。 表1 SUMMARY_TRANSACTIONS_PREPARED_XACTS字段 名称 类型 描述 transaction xid 预备事务的数字事务标识。 gid text 赋予该事务的全局事务标识。 prepared timestamp with time zone 事务准备好提交的时间。 owner name 执行该事务的用户的名称。 database name 执行该事务所在的数据库名。 父主题: Transaction
  • ADM_TYPE_ATTRS ADM_TYPE_ATTRS视图描述当前数据库对象类型的属性。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_TYPE_ATTRS字段 名称 类型 描述 owner oid 该类型的所有者。 type_name name 数据类型名称。 attr_name name 字段名。 attr_type_mod integer 记录创建新表时支持类型特定的数据(比如一个varchar字段的最大长度)。它传递给类型相关的输入和长度转换函数作为第三个参数。其值对那些不需要ATTTYPMOD的类型通常为-1。 attr_type_owner oid 该类型属性的所有者。 attr_type_name name 数据类型属性名称。该字段记录的是转换后的类型名。 length smallint 对于定长类型是该类型内部表现形式的字节数目。对于变长类型是负数。 -1表示一种“变长”(有长度字属性的数据)。 -2表示这是一个NULL结尾的C字符串。 precision integer 数字类型的精度。 scale integer 数字类型的范围。 character_set_name character(1) 属性的字符集名称(c或n)。 c:CHAR_CS。 n:NCHAR_CS。 attr_no smallint 属性编号。 inherited character(1) 属性是否继承自超级类型(Y或N)。 attr_length integer 记录创建新表时支持类型特定的数据(比如一个varchar字段的最大长度)。对于raw类型,因内核实现原因,暂未记录。 父主题: 其他系统视图
  • 伪类型 GaussDB数据类型中包含一系列特殊用途的类型,这些类型按照类别被称为伪类型。伪类型不能作为字段的数据类型,但是可以用于声明函数的参数或者结果类型。 当一个函数不仅是简单地接受并返回某种SQL数据类型的情况下伪类型是很有用的。表1列出了所有的伪类型。 表1 伪类型 名称 描述 any 表示函数接受任何输入数据类型。 anyelement 表示函数接受任何数据类型。 anyarray 表示函数接受任意数组数据类型。 anynonarray 表示函数接受任意非数组数据类型。 anyenum 表示函数接受任意枚举数据类型。 anyrange 表示函数接受任意范围数据类型。 cstring 表示函数接受或者返回一个空结尾的C字符串。 internal 表示函数接受或者返回一种服务器内部的数据类型。 language_handler 声明一个过程语言调用句柄返回language_handler。 fdw_handler 声明一个外部数据封装器返回fdw_handler。 record 标识函数返回一个未声明的行类型。 trigger 声明一个触发器函数返回trigger。 void 表示函数不返回数值。 opaque 一个已经过时的类型,以前用于所有上面这些用途。 声明用C编写的函数(不管是内置的还是动态装载的)都可以接受或者返回任何这样的伪数据类型。当伪类型作为参数类型使用时,用户需要保证函数的正常运行。 用过程语言编写的函数只能使用实现语言允许的伪类型。目前,过程语言都不允许使用作为参数类型的伪类型,并且只允许使用void和record作为结果类型。一些多态的函数还支持使用anyelement、anyarray、anynonarray、anyenum和anyrange类型。 每一个被声明为anyelement的位置(参数或返回值)都允许具有任意特定的实际数据类型,但是在任何给定的查询中必须全部是相同的实际类型。 伪类型internal用于声明只能在数据库系统内部调用的函数,这些函数不能直接在SQL查询里调用。如果函数至少有一个internal类型的参数,则不能从SQL里调用它。建议不要创建任何声明返回internal的函数,除非其至少有一个internal类型的参数。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 --创建表。 gaussdb=# CREATE TABLE t1 (a int); --插入两条数据。 gaussdb=# INSERT INTO t1 values(1),(2); --创建函数showall()。 gaussdb=# CREATE OR REPLACE FUNCTION showall() RETURNS SETOF record AS $$ SELECT count(*) from t1; $$ LANGUAGE SQL; --调用函数showall()。 gaussdb=# SELECT showall(); showall --------- (2) (1 row) --删除函数。 gaussdb=# DROP FUNCTION showall(); --删除表。 gaussdb=# DROP TABLE t1; 父主题: 数据类型
  • 参数说明 关键字PUBLIC表示一个隐式定义的拥有所有角色的组。 权限类别和参数说明,请参见GRANT的参数说明。 任何特定角色拥有的特权包括直接授予该角色的特权、从该角色作为其成员的角色中得到的权限以及授予给PUBLIC的权限。因此,从PUBLIC收回SELECT特权并不一定会意味着所有角色都会失去在该对象上的SELECT特权,那些直接被授予的或者通过另一个角色被授予的角色仍然会拥有它。类似地,从一个用户收回SELECT后,如果PUBLIC仍有SELECT权限,该用户还是可以使用SELECT。 指定GRANT OPTION FOR时,只撤销对该权限授权的权力,而不撤销该权限本身。 如用户A拥有某个表的UPDATE权限,及WITH GRANT OPTION选项,同时A把这个权限赋予了用户B,则用户B持有的权限称为依赖性权限。当用户A持有的权限或者授权选项被撤销时,依赖性权限仍然存在,但如果声明了CASCADE,则所有依赖性权限都被撤销。 一个用户只能撤销由它自己直接赋予的权限。例如,如果用户A被指定授权(WITH ADMIN OPTION)选项,且把一个权限赋予了用户B,然后用户B又赋予了用户C,则用户A不能直接将C的权限撤销。但是,用户A可以撤销用户B的授权选项,并且使用CASCADE。这样,用户C的权限就会自动被撤销。另外一个例子:如果A和B都赋予了C同样的权限,则A可以撤销他自己的授权选项,但是不能撤销B的,因此C仍然拥有该权限。 如果执行REVOKE的角色持有的权限是通过多层成员关系获得的,则具体是哪一个包含的角色执行的该命令是不确定的。在这种场合下,建议的方法是使用SET ROLE成为特定角色,然后执行REVOKE,否则可能导致删除了不想删除的权限,或者是任何权限都没有删除。
  • 示例 从用户tom收回角色jerry的权限: 1 2 gaussdb=# REVOKE jerry FROM tom; REVOKE ROLE 从用户tom收回对模式jerry下表t1的SELECT权限: 1 2 gaussdb=# REVOKE SELECT ON TABLE jerry.t1 FROM tom; REVOKE 从用户tom收回对模式jerry下函数fun1的EXECUTE权限: 1 2 gaussdb=# REVOKE EXECUTE ON FUNCTION jerry.fun1() FROM tom; REVOKE 从用户tom收回对数据库DB1的CONNECT权限: 1 2 gaussdb=# REVOKE CONNECT ON database DB1 FROM tom; REVOKE 更多示例请参见GRANT的示例。
  • 语法格式 回收指定表或视图上权限。 1 2 3 4 5 6 7 REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM }[, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收表上指定字段权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )}[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定序列上权限。 1 2 3 4 5 6 7 REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE | ALTER | DROP | COMMENT }[, ...] | ALL [ PRIVILEGES ] } ON { [ SEQUENCE ] sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定数据库上权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定域上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON DOMAIN domain_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定客户端加密主密钥上的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { USAGE | DROP } [, ...] | ALL [PRIVILEGES] } ON CLIENT_MASTER_KEYS client_master_keys_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定列加密密钥上的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { USAGE | DROP } [, ...] | ALL [PRIVILEGES]} ON COLUMN_ENCRYPTION_KEYS column_encryption_keys_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定目录上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { READ | WRITE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON DIRECTORY directory_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定外部数据源上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER fdw_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定外部服务器上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定函数上权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定存储过程上权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON { PROCEDURE {proc_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL PROCEDURE IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定过程语言上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定大对象上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定模式上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定表空间上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定类型上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TYPE type_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定子集群上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE | COMPUTE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON NODE GROUP group_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收子集群的create权限时,会默认回收usage和compute权限。 回收directory对象的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { READ | WRITE } [, ...] | ALL [PRIVILEGES] } ON DIRECTORY directory_name [, ...] FROM {[GROUP] role_name | PUBLIC} [, ...] [ CASCADE | RESTRICT ]; 按角色回收角色上的权限。 1 2 3 REVOKE [ ADMIN OPTION FOR ] role_name [, ...] FROM role_name [, ...] [ CASCADE | RESTRICT ]; 回收角色上的sysadmin权限。 1 REVOKE ALL { PRIVILEGES | PRIVILEGE } FROM role_name; 回收ANY权限。 1 2 3 4 5 6 7 8 REVOKE [ ADMIN OPTION FOR ] { CREATE ANY TABLE | ALTER ANY TABLE | DROP ANY TABLE | SELECT ANY TABLE | INSERT ANY TABLE | UPDATE ANY TABLE | DELETE ANY TABLE | CREATE ANY SEQUENCE | CREATE ANY INDEX | CREATE ANY FUNCTION | EXECUTE ANY FUNCTION | CREATE ANY TYPE | ALTER ANY TYPE | DROP ANY TYPE | ALTER ANY SEQUENCE | DROP ANY SEQUENCE | SELECT ANY SEQUENCE | ALTER ANY INDEX | DROP ANY INDEX | CREATE ANY SYNONYM | DROP ANY SYNONYM | CREATE ANY TRIGGER | ALTER ANY TRIGGER | DROP ANY TRIGGER } [, ...] FROM [ GROUP ] role_name [, ...];
  • 参数说明 TABLE | TABLES TABLE和TABLES可以互相替换使用,与语句中操作表的个数无关。 table_name TO new_table_name [, table_name2 TO new_table_name2, ...] table_name、table_name2等为需要修改的表名。 new_table_name、new_table_name2等为修改后的新表名。 TO为中间连接词。
  • 修改表示例 单表修改名称 gaussdb=# CREATE TABLE aa(c1 int, c2 int); gaussdb=# RENAME TABLE aa TO test_alt1; gaussdb=# DROP TABLE test_alt1; 多个表修改名称 gaussdb=# CREATE TABLE aa(c1 int, c2 int); gaussdb=# CREATE TABLE bb(c1 int, c2 int); gaussdb=# RENAME TABLE aa TO test_alt1, bb TO test_alt2; gaussdb=# DROP TABLE test_alt1,test_alt2;
  • 参数说明 LOCAL 声明该命令只在当前事务中有效。 SESSION 声明这个命令只对当前会话起作用。 SET SESSION TRANSACTION语句需要在sql_compatibility = 'B'场景下,设置GUC参数b_format_behavior_compat_options为set_session_transaction后生效,作用等同于SET SESSION CHARACTERISTICS AS TRANSACTION语句。 GLOBAL 声明这个命令对当前数据库的全局会话生效。 作用范围:在sql_compatibility = 'B'场景下生效。对后续连接的会话生效。 SESSION CHARACTERISTICS 声明这个命令只对当前会话起作用。 ISOLATION LEVEL 指定事务隔离级别,该参数决定当一个事务中存在其他并发运行事务时能够看到什么数据。 在事务中第一个数据修改语句(SELECT、INSERT、DELETE、UPDATE、FETCH、COPY)执行之后,当前事务的隔离级别就不能再次设置。 事务块内SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL对当前事务不生效,需要COMMIT之后才生效。 取值范围: READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 REPEATABLE READ:可重复读隔离级别,仅仅能看到事务开始之前提交的数据,不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 SERIALIZABLE:GaussDB目前功能上不支持此隔离级别,等价于REPEATABLE READ。 READ WRITE | READ ONLY 指定事务访问模式(读/写或者只读)。
  • 语法格式 设置事务的隔离级别、读写模式。 { SET [ LOCAL | SESSION | GLOBAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION } { ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE | REPEATABLE READ } | { READ WRITE | READ ONLY } };
  • 示例 --创建并切换至测试数据库。 gaussdb=# CREATE DATABASE mysql_compatible_db DBCOMPATIBILITY 'B'; gaussdb=# \c mysql_compatible_db --开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。 gaussdb=# START TRANSACTION; gaussdb=# SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY; gaussdb=# COMMIT; --设置当前会话的事务隔离级别、读写模式。 --在sql_compatibility = 'B'场景下,b_format_behavior_compat_options设置为set_session_transaction。 gaussdb=# SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; gaussdb=# SET SESSION TRANSACTION READ ONLY; --给sql_compatibility = 'B'的数据库设置全局会话的事务隔离级别、读写模式(当前只能在sql_compatibility = 'B'场景下)。 gaussdb=# SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; gaussdb=# SET GLOBAL TRANSACTION READ ONLY; --切换回初始数据库,并删除测试数据库。请用真实的数据库名替换postgres。 gaussdb=# \c postgres gaussdb=# DROP DATABASE mysql_compatible_db;
  • GS_ILM_POLICY GS_ILM_POLICY系统表提供了记录策略动作类型、判定条件等。 表1 GS_ILM_POLICY字段 名称 类型 描述 pidx integer 策略序号。 action "char" 策略动作,仅支持压缩(‘c’)。 ctype "char" 压缩类型,仅支持高级行压缩(‘a’)。 condition "char" 判定条件类型,仅支持LAST MODIFICATION(‘m’)。 days smallint 判定天数量。 scope "char" 策略作用域,仅支持Row(‘r’)。 predicate pg_node_tree 策略行级表达式。 父主题: OLTP表压缩
  • 示例 --创建adt1策略。 gaussdb=# CREATE AUDIT POLICY adt1 PRIVILEGES CREATE; CREATE AUDIT POLICY --删除审计策略adt1。 gaussdb=# DROP AUDIT POLICY adt1; DROP AUDIT POLICY --删除一个不存在的审计策略adt0,提示删除失败,该审计策略不存在。 gaussdb=# DROP AUDIT POLICY adt0; ERROR: adt0 policy does not exist, drop failed
  • 关闭数据库连接 在使用数据库连接完成相应的数据操作后,需要关闭数据库连接。 关闭数据库连接可以直接调用close方法。 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection(sourceURL, userName, password); conn.close(); 父主题: 基于JDBC开发
  • 示例 下面列举了基本的匿名块程序: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 --空语句块 gaussdb=# BEGIN NULL; END; / --将信息打印到控制台: gaussdb=# BEGIN dbe_output.print_line('hello world!'); END; / hello world! ANONYMOUS BLOCK EXECUTE --将变量内容打印到控制台: gaussdb=# DECLARE my_var VARCHAR2(30); BEGIN my_var :='world'; dbe_output.print_line('hello'||my_var); END; / helloworld ANONYMOUS BLOCK EXECUTE
  • shared_preload_libraries 参数说明:此参数用于声明一个或者多个在服务器启动的时候预先装载的共享库,多个库名称之间用逗号分隔,仅sysadmin用户可以访问。比如'$libdir/mylib'会在加载标准库目录中的库文件之前预先加载mylib.so(某些平台上可能是mylib.sl)库文件。 可以用这个方法预先装载GaussDB的存储过程库,通常是使用'$libdir/plXXX'语法。XXX只能是pgsql、perl、tcl、python之一。 通过预先装载一个共享库并在需要的时候初始化他,可以避免第一次使用这个库的加载时间。但是启动每个服务器进程的时间可能会增加,即使进程从来没有使用过这些库。因此建议对那些将被大多数会话使用的库才使用这个选项。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 如果被声明的库不存在,GaussDB服务将会启动失败。 每一个支持GaussDB的库都有一个特殊的标记用于保证兼容性。因此,不支持GaussDB的库不能用这种方法加载。 取值范围:字符串 默认值:security_plugin
  • DB_TAB_PRIVS DB_TAB_PRIVS视图记录当前用户可访问的所有对象的授权信息。所有用户都可以访问该视图。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_TAB_PRIVS字段 名称 类型 描述 grantor character varying(128) 执行授权的用户名。 grantee character varying(128) 被授予权限的用户或角色的名称。 table_schema character varying(128) 对象的模式。 table_name character varying(128) 对象的名称。 privilege character varying(40) 对象上的权限,包括USAGE、UPDATE、DELETE、INSERT、CONNECT、SELECT、EXECUTE。 grantable character varying(3) 该授权是否包含GRANT选项。 YES:包含GRANT选项。 NO:不包含GRANT选项。 type character varying(24) 对象的类型,包括NODE GROUP、COLUMN_ENCRYPTION_KEY、PACKAGE、COLUMN、TABLE、VIEW、SEQUENCE、TYPE、INDEX、DATABASE、DIRECTORY、FOREIGN DATA WRAPPER、FOREIGN SERVER、LANGUAGE、LARGE OBJECT、SCHEMA、TEMPLATE、FUNCTION、PROCEDURE、TABLESPACE。 hierarchy character varying(3) 暂不支持,值为NULL。 common character varying(3) 暂不支持,值为NULL。 inherited character varying(3) 暂不支持,值为NULL。 父主题: 用户和权限管理
  • ADM_SOURCE ADM_SOURCE视图显示数据库中所有存储过程、函数、触发器的定义信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_SOURCE字段 名称 类型 描述 owner name 对象的所有者。 name name 对象的名字。 type name 对象的类型。取值范围:function、procedure、trigger。 line numeric 此行在定义信息中的行号。 text text 存储对象的文本来源。 origin_con_id character varying(256) 暂不支持,值为0。 父主题: 其他系统视图
  • ADM_TAB_COL_STATISTICS ADM_TAB_COL_STATISTICS视图显示从ADM_TAB_COLUMNS 中提取的列统计信息和直方图信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。该视图在LOW_VALUE、HIGH_VALUE字段,由于底层表结构不同原因,与A数据库取值有差异,当LOW_VALUE为高频值时,GaussDB的LOW_VALUE为次小值。当HIGH_VALUE为高频值时,GaussDB的HIGH_VALUE为次高值。HISTOGRAM字段,由于统计方式不同原因,与A数据库取值有差异,GaussDB只支持两种类型直方图frequency,equi-width。SCOPE字段,由于GaussDB不支持全局临时表统计原因,与A数据库取值有差异,GaussDB只支持本地临时表信息统计,默认置SHARED。 表1 ADM_TAB_COL_STATISTICS字段 名称 类型 描述 owner character varying(128) 表的所有者。 table_name character varying(128) 表名。 column_name character varying(128) 列名。 num_distinct numeric 列中不同值的数量。 low_value raw 列中的低值。 high_value raw 列中的高值。 density numeric 如果COLUMN_NAME上有直方图,则此列将显示直方图中跨越少于2个端点的值的选择性。它不代表跨越2个或更多端点的值的选择性。 如果COLUMN_NAME上没有可用的直方图,则该列的值为1/NUM_DISTINCT。 num_nulls numeric 列中空值数。 num_buckets numeric 列的直方图的桶数。 sample_size numeric 用于分析此列的样本量。 last_analyzed timestamp(0) without time zone 最近分析此列的日期。数据库重启后,数据会丢失。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 notes character varying(99) 暂不支持,值为NULL。 avg_col_len numeric 列的平均长度(以字节为单位)。 histogram character varying(15) 直方图是否存在以及存在的类型: NONE:表示不存在直方图。 FREQUENCY:表示频率直方图。 EQUI-WIDTH:表示等宽直方图。 scope character varying(7) 对于在除全局临时表之外的任何表上收集的统计信息,该值是SHARED(表示统计信息在所有会话之间共享)。 schema character varying(64) 列所属的名称空间的名称。 父主题: 其他系统视图
  • 条件表达式函数 coalesce(expr1, expr2, ..., exprn) 描述: 返回参数列表中第一个非NULL的参数值。 COALESCE(expr1, expr2) 等价于CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END。 示例: 1 2 3 4 5 gaussdb=# SELECT coalesce(NULL,'hello'); coalesce ---------- hello (1 row) 备注: 如果表达式列表中的所有表达式都等于NULL,则本函数返回NULL。 它常用于在显示数据时用缺省值替换NULL。 和CASE表达式一样,COALESCE不会计算不需要用来判断结果的参数;即在第一个非空参数右边的参数不会被计算。 decode(base_expr, compare1, value1, Compare2,value2, … default) 描述:把base_expr与后面的每个compare(n) 进行比较,如果匹配返回相应的value(n)。如果没有发生匹配,则返回default。 示例: 1 2 3 4 5 gaussdb=# SELECT decode('A','A',1,'B',2,0); case ------ 1 (1 row) 备注:不支持对xml数据类型的操作。 nullif(expr1, expr2) 描述:当且仅当expr1和expr2相等时,NULLIF才返回NULL,否则它返回expr1。 nullif(expr1, expr2) 逻辑上等价于CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END。 nullif(expr1, expr2)函数为映射函数,故pg_proc系统表中无法查到对应函数定义。 示例: 1 2 3 4 5 gaussdb=# SELECT nullif('hello','world'); nullif -------- hello (1 row) 备注:不支持对xml数据类型的操作。 如果两个参数的数据类型不同,则: 若两种数据类型之间存在隐式转换,则以其中优先级较高的数据类型为基准将另一个参数隐式转换成该类型,转换成功则进行计算,转换失败则返回错误。如: 1 2 3 4 5 gaussdb=# SELECT nullif('1234'::VARCHAR,123::INT4); nullif -------- 1234 (1 row) 1 2 gaussdb=# SELECT nullif('1234'::VARCHAR,'2012-12-24'::DATE); ERROR: invalid input syntax for type timestamp: "1234" 若两种数据类型之间不存在隐式转换,则返回错误。如: 1 2 3 4 5 6 gaussdb=# SELECT nullif(1::bit, '1'::MONEY); ERROR: operator does not exist: bit = money LINE 1: SELECT nullif(1::bit, '1'::MONEY); ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. CONTEXT: referenced column: nullif nvl( expr1 , expr2 ) 描述: 如果expr1为NULL,则返回expr2。 如果expr1非NULL,则返回expr1。 示例: 1 2 3 4 5 gaussdb=# SELECT nvl('hello','world'); nvl ------- hello (1 row) 备注:参数expr1和expr2可以为任意类型,当NVL的两个参数不属于同类型时,看第二个参数是否可以向第一个参数进行隐式转换,如果可以则返回第一个参数类型。如果第二个参数不能向第一个参数进行隐式转换而第一个参数可以向第二个参数进行隐式转换,则返回第二个参数的类型。如果两个参数之间不存在隐式类型转换并且也不属于同一类型则报错。 nvl2( expr1 , expr2,expr3 ) 描述: 如果expr1为NULL,则返回expr3。 如果expr1非NULL,则返回expr2。 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。 示例: 1 2 3 4 5 gaussdb=# SELECT nvl2('hello','world','other'); case ------- world (1 row) 备注:参数expr2和expr3可以为任意类型, 当NVL2的后面两个参数不属于同类型时,看expr3参数是否可以向expr2参数进行隐式转换,如果不能隐式转换,会返回错误。如果第一个参数是数值类型,函数将第一个参数和其他参数都转换为numeric类型,然后进行比较,对于不能转换的,提示出错信息;第一个参数是其他类型的,函数将其他参数都转换为第一个参数的类型进行比较,对于不能转换的,提示出错信息。 greatest(expr1 [, ...]) 描述:获取并返回参数列表中值最大的表达式的值。 返回值类型: 示例: 1 2 3 4 5 gaussdb=# SELECT greatest(1*2,2-3,4-1); greatest ---------- 3 (1 row) 1 2 3 4 5 gaussdb=# SELECT greatest('HARRY', 'HARRIOT', 'HAROLD'); greatest ---------- HARRY (1 row) 备注:不支持对xml数据类型的操作。 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下: 如果参数中有任意一个参数的值为null,函数返回null。 如果第一个参数是数值类型,函数将第一个参数和其他参数都转换为numeric类型,然后进行比较,对于不能转换的,提示出错信息;第一个参数是其他类型的,函数将其他参数都转换为第一个参数的类型进行比较,对于不能转换的,提示出错信息。 least(expr1 [, ...]) 描述:获取并返回参数列表中值最小的表达式的值。 示例: 1 2 3 4 5 gaussdb=# SELECT least(1*2,2-3,4-1); least ------- -1 (1 row) 1 2 3 4 5 gaussdb=# SELECT least('HARRY','HARRIOT','HAROLD'); least -------- HAROLD (1 row) 备注:不支持对xml数据类型的操作。 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下: 如果参数中有任意一个参数的值为null,函数返回null。 如果第一个参数是数值类型,函数将第一个参数和其他参数都转换为numeric类型,然后进行比较,对于不能转换的,提示出错信息;第一个参数是其他类型的,函数将其他参数都转换为第一个参数的类型进行比较,对于不能转换的,提示出错信息。 EMPTY_BLOB() 描述:使用EMPTY_BLOB在INSERT或UPDATE语句中初始化一个BLOB变量,取值为NULL。 返回值类型:BLOB 示例: 1 2 3 4 5 6 --新建表 gaussdb=# CREATE TABLE blob_tb(b blob,id int) DISTRIBUTE BY REPLICATION; --插入数据 gaussdb=# INSERT INTO blob_tb VALUES (empty_blob(),1); --删除表 gaussdb=# DROP TABLE blob_tb; 备注:使用DBE_LOB.GET_LENGTH求得的长度为0。 EMPTY_CLOB() 描述:使用EMPTY_CLOB在INSERT或UPDATE语句中初始化一个CLOB变量,取值为空。 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。 返回值类型:CLOB 示例: 1 2 3 4 5 6 --新建表 gaussdb=# CREATE TABLE clob_tb(c clob,id int); --插入数据 gaussdb=# INSERT INTO clob_tb VALUES (empty_clob(),1); --删除表 gaussdb=# DROP TABLE clob_tb; 备注:使用DBE_LOB.GET_LENGTH求得的长度为0。 lnnvl(condition) 描述:lnnvl用于某个查询语句的WHERE子句中,如果条件为true就返回false,如果条件为unknown或者false,就返回true。 condition:必须为逻辑表达式。但不能用于复合条件如AND、OR或者BETWEEN。 返回类型:Boolean 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 --新建表 gaussdb=# CREATE TABLE student_demo (name VARCHAR2(20), grade NUMBER(10,2)); CREATE TABLE --插入数据 gaussdb=# INSERT INTO student_demo VALUES ('name0',0); INSERT 0 1 gaussdb=# INSERT INTO student_demo VALUES ('name1',1); INSERT 0 1 gaussdb=# INSERT INTO student_demo VALUES ('name2',2); INSERT 0 1 --调用lnnvl gaussdb=# SELECT * FROM student_demo WHERE LNNVL(name = 'name1'); name | grade -------+------- name0 | 0.00 name2 | 2.00 (2 rows) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下,才支持lnnvl函数。
共100000条