华为云用户手册

  • 示例 --创建并切换至测试数据库。 gaussdb=# CREATE DATABASE my_compatible_db DBCOMPATIBILITY 'B'; gaussdb=# \c my_compatible_db --开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。 my_compatible_db=# START TRANSACTION; my_compatible_db=# SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY; my_compatible_db=# COMMIT; --设置当前会话的事务隔离级别、读写模式。 --在sql_compatibility = 'B'场景下,b_format_behavior_compat_options设置为set_session_transaction。 my_compatible_db=# SET b_format_behavior_compat_options TO set_session_transaction; my_compatible_db=# SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY; --给sql_compatibility = 'B'的数据库设置全局会话的事务隔离级别、读写模式(当前只能在sql_compatibility = 'B'场景下)。 gaussdb=# SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY; --切换回初始数据库,并删除测试数据库。请用真实的数据库名替换postgres。 my_compatible_db=# \c postgres gaussdb=# DROP DATABASE my_compatible_db;
  • 语法格式 设置事务的隔离级别、读写模式。 { SET [ LOCAL | SESSION | GLOBAL ] TRANSACTION|SET SESSION CHARACTERIS TICS AS TRANSACTION } { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ } | { READ WRITE | READ ONLY } };
  • 参数说明 LOCAL 声明该命令只在当前事务中有效。 SESSION 声明这个命令只对当前会话起作用。 SET SESSION TRANSACTION语句需要在sql_compatibility = 'B'场景下,设置GUC参数b_format_behavior_compat_options为set_session_transaction后生效,作用等同于SET SESSION CHARACTERISTI CS 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:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 READ UNCOMMITTED:读未提交隔离级别,指定后的行为和READ COMMITTED行为一致。 REPEATABLE READ:可重复读隔离级别,仅仅能看到事务开始之前提交的数据,不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 SERIALIZABLE: GaussDB 目前功能上不支持此隔离级别,等价于REPEATABLE READ。 READ WRITE | READ ONLY 指定事务访问模式(读/写或者只读)。
  • GLOBAL_CONFIG_SETTINGS GLOBAL_CONFIG_SETTINGS显示各节点数据库运行时参数的相关信息,如表1所示。 表1 GLOBAL_CONFIG_SETTINGS的字段 名称 类型 描述 node_name text 节点名称。 name text 参数名称。 setting text 参数当前值。 unit text 参数的隐式结构。 category text 参数的逻辑组。 short_desc text 参数的简单描述。 extra_desc text 参数的详细描述。 context text 设置参数值的上下文,包括internal、postmaster、sighup、backend、superuser和user。 vartype text 参数类型,包括bool、enum、integer、real和string。 source text 参数的赋值方式。 min_val text 参数最小值。如果参数类型不是数值型,那么该字段值为null。 max_val text 参数最大值。如果参数类型不是数值型,那么该字段值为null。 enumvals text[] enum类型参数合法值。如果参数类型不是enum型,那么该字段值为null。 boot_val text 数据库启动时参数默认值。 reset_val text 数据库重置时参数默认值。 sourcefile text 设置参数值的配置文件。如果参数不是通过配置文件赋值,那么该字段值为null。 sourceline integer 设置参数值的配置文件的行号。如果参数不是通过配置文件赋值,那么该字段值为null。 父主题: Configuration
  • MY_TAB_STATISTICS MY_TAB_STATISTICS视图显示数据库中有关当前用户拥有的表的统计信息。所有用户均可访问该视图,该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 MY_TAB_STATISTICS字段 名称 类型 描述 table_name character varying(128) 表名。 partition_name character varying(128) 暂不支持,值为NULL。 partition_position numeric 暂不支持,值为NULL。 subpartition_name character varying(128) 暂不支持,值为NULL。 subpartition_position numeric 暂不支持,值为NULL。 object_type character varying(12) 对象类型: TABLE PARTITION SUBPARTITION num_rows numeric 对象中的行数。 blocks numeric 暂不支持,值为NULL。 empty_blocks numeric 暂不支持,值为NULL。 avg_space numeric 暂不支持,值为NULL。 chain_cnt numeric 暂不支持,值为NULL。 avg_row_len integer 平均行长,包括行开销。 avg_space_freelist_blocks numeric 暂不支持,值为NULL。 num_freelist_blocks numeric 暂不支持,值为NULL。 avg_cached_blocks numeric 暂不支持,值为NULL。 avg_cache_hit_ratio numeric 暂不支持,值为NULL。 im_imcu_count numeric 暂不支持,值为NULL。 im_block_count numeric 暂不支持,值为NULL。 im_stat_update_time timestamp(6) without time zone 暂不支持,值为NULL。 scan_rate numeric 暂不支持,值为NULL。 sample_size numeric 分析表格时使用的样本量。 last_analyzed timestamp with time zone 最近分析表的日期。数据库重启后,数据会丢失。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 stattype_locked character varying(5) 暂不支持,值为NULL。 stale_stats character varying(7) 暂不支持,值为NULL。 notes character varying(25) 暂不支持,值为NULL。 scope character varying(7) 暂不支持,默认值SHARED。 父主题: 其他系统视图
  • ODBC接口参考 ODBC接口是一套提供给用户的API函数,本节将对部分常用接口做具体描述,若涉及其他接口可参考msdn(网址:https://msdn.microsoft.com/en-us/library/windows/desktop/ms714177(v=vs.85).aspx)中ODBC Programmer's Reference项的相关内容。 SQLAllocEnv SQLAllocConnect SQLAllocHandle SQLAllocStmt SQLBindCol SQLBindParameter SQLColAttribute SQLConnect SQLDisconnect SQLExecDirect SQLExecute SQLFetch SQLFreeStmt SQLFreeConnect SQLFreeHandle SQLFreeEnv SQLPrepare SQLGetData SQLGetDiagRec SQLSetConnectAttr SQLSetEnvAttr SQLSetStmtAttr 父主题: 基于ODBC开发
  • 注意事项 状态可以是多个值之一。但是,在异步连接过程之外只能看到其中两个:CONNECTION_OK和CONNECTION_BAD。与数据库的良好连接状态为CONNECTION_OK,与数据库连接失败状态为CONNECTION_BAD。通常,“正常”状态将一直保持到PQfinish,但通信失败可能会导致状态过早变为CONNECTION_BAD。在这种情况下,应用程序可以尝试通过调用进行恢复PQreset。
  • 返回值 ConnStatusType:连接状态的枚举,包括: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CONNECTION_STARTED 等待进行连接。 CONNECTION_MADE 连接成功;等待发送。 CONNECTION_AWAITING_RESPONSE 等待来自服务器的响应。 CONNECTION_AUTH_OK 已收到认证;等待后端启动结束。 CONNECTION_SSL_STARTUP 协商SSL加密。 CONNECTION_SETENV 协商环境驱动的参数设置。 CONNECTION_OK 连接正常。 CONNECTION_BAD 连接故障。
  • STATEMENT_RESPONSETIME_PERCENTILE 获取数据库SQL响应时间P80,P95分布信息,如表1所示。 表1 STATEMENT_RESPONSETIME_PERCENTILE的字段 名称 类型 描述 p80 bigint 数据库80%的SQL的响应时间(单位:微秒)。 p95 bigint 数据库95%的SQL的响应时间(单位:微秒)。 dbid oid 当前数据库的OID,如果在PDB中查询为当前PDB的dbid,否则dbid为0表示查询结果为当前节点的SQL响应时间P80,P95分布信息。 示例: -- 在CDB中可以查询当前节点的SQL响应时间分布,此时对应dbid为0。 gaussdb=# select * from dbe_perf.STATEMENT_RESPONSETIME_PERCENTILE; p80 | p95 | dbid ------+------+------ 2803 | 6518 | 0 (1 row) -- 在PDB中查询当前PDB的SQL响应时间分布,此时对应dbid为当前PDB的dbid。 gaussdb=# \c pdb1 pdb1=# select * from dbe_perf.STATEMENT_RESPONSETIME_PERCENTILE; p80 | p95 | dbid ------+------+------------ 6211 | 7348 | 1255163054 (1 row) 父主题: Query
  • javax.sql.ConnectionPoolDataSource javax.sql.ConnectionPoolDataSource是数据源连接池接口。 表1 对javax.sql.ConnectionPoolDataSource的支持情况 方法名 返回值类型 支持JDBC4 支持计划外ALT getPooledConnection() PooledConnection Yes Yes getPooledConnection(String user,String password) PooledConnection Yes Yes 父主题: JDBC接口参考
  • PG_SYNONYM PG_SYNONYM系统表存储同义词对象名与其他数据库对象名间的映射信息。 表1 PG_SYNONYM字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 synname name 同义词名称。 synnamespace oid 包含该同义词名称空间的OID。PUBLIC同义词名称空间的OID为0。 synowner oid 同义词的所有者,通常是创建它的用户OID。PUBLIC同义词的所有者为0。 synobjschema name 关联对象指定的模式名。 synobjname name 关联对象名。 syndblinkname name 关联DATABASE LINK对象名。 父主题: 其他系统表
  • 参数说明 table_name 分区表名。 取值范围:已存在的分区表名。 partition_name 分区名。 取值范围:已存在的分区名。 tablespacename 指定分区要移动到哪一个表空间。 取值范围:已存在的表空间名。 partition_value 分区键值。 通过PARTITION FOR ( partition_value [, ...] )子句指定的这一组值,可以唯一确定一个分区。 取值范围:需要进行操作的分区的分区键的取值范围。 UNUSABLE LOCAL INDEXES 设置该分区上的所有索引不可用。 REBUILD UNUSABLE LOCAL INDEXES 重建该分区上的所有索引。 { ENABLE | DISABLE } ROW MOVEMET 行迁移开关。 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 取值范围: ENABLE:打开行迁移开关。 DISABLE:关闭行迁移开关。 默认是打开状态。 ordinary_table_name 进行迁移的普通表的名称。 取值范围:已存在的普通表名。 { WITH | WITHOUT } VALIDATION 在进行数据迁移时,是否检查普通表中的数据满足指定分区的分区键范围。 取值范围: WITH:对于普通表中的数据要检查是否满足分区的分区键范围,如果有数据不满足,则报错。 WITHOUT:对于普通表中的数据不检查是否满足分区的分区键范围。 默认是WITH状态。 由于检查比较耗时,特别是当数据量很大的情况下。所以在保证当前普通表中的数据满足分区的分区键范围时,可以加上WITHOUT来指明不进行检查。 VERBOSE 在VALIDATION是WITH状态时,如果检查出普通表有不满足要交换分区的分区键范围的数据,那么把这些数据插入到正确的分区,如果路由不到任何分区,再报错。 只有在VALIDATION是WITH状态时,才可以指定VERBOSE。 partition_new_name 分区的新名称。 取值范围:字符串,要符合标识符命名规范。 UPDATE GLOBAL INDEX 如果使用该参数,则会更新分区表上的所有全局索引,以确保使用全局索引可以查询出正确的数据。如果不使用该参数,则分区表上的所有全局索引将会失效。 SET PARTITIONING { AUTOMATIC | MANUAL } 开启或关闭列表分区的自动扩展功能。使用AUTOMATIC关键字时为开启自动扩展功能,使用MANUAL关键字时为关闭自动扩展功能。 SET INTERVAL ( [ interval_expr ] ) 用于实现间隔分区与范围分区之间的互转,间隔分区相当于开启了自动扩展功能后的范围分区。interval_expr缺省时,将间隔分区转为范围分区;否则将范围分区转为间隔分区。其中,interval_expr为自动创建分区的间隔,需要符合partition_key的字段类型,目前只支持数值类型和日期/时间类型,例如:1、'1 day'、'1 month'。
  • 语法格式 修改分区表分区包括修改表分区主语法、修改表分区名称的语法、重置分区ID和开启/关闭分区自动扩展功能的语法。 修改表分区主语法。 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ]; 其中action统指如下分区维护子语法。当存在多个分区维护子句时,保证了分区的连续性,无论这些子句的排序如何,GaussDB总会先执行DROP PARTITION再执行ADD PARTITION操作,最后顺序执行其它分区维护操作。 move_clause | exchange_clause | row_clause | merge_clause | modify_clause | split_clause | add_clause | drop_clause | truncate_clause | ilm_clause | set_partitioning_clause move_clause子语法用于移动分区到新的表空间。 MOVE PARTITION { partion_name | FOR ( partition_value [, ...] ) } TABLESPACE tablespacename exchange_clause子语法用于把普通表的数据迁移到指定的分区。 EXCHANGE PARTITION { ( partition_name ) | partition_name | FOR ( partition_value [, ... ] ) } WITH TABLE {[ ONLY ] ordinary_table_name | ordinary_table_name * | ONLY ( ordinary_table_name )} [ { WITH | WITHOUT } VALIDATION ] [ VERBOSE ] [ UPDATE GLOBAL INDEX ] 进行交换的普通表和分区必须满足如下条件: 普通表和分区的列数相同,对应列的信息严格一致,包括:列名、列的数据类型、列约束、列的Collation信息、列的存储参数、列的压缩信息等。 普通表和分区的表压缩信息严格一致。 普通表索引和分区Local索引个数相同,且对应索引的信息严格一致。 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。 普通表不可以是临时表,分区表只能是范围分区表,列表分区表,哈希分区表或间隔分区表。 在内置安全策略开关开启的情况下,普通表和分区表上不可以有动态数据脱敏,行访问控制约束。 完成交换后,普通表和分区的数据被置换,同时普通表和分区的表空间信息被置换。此时,普通表和分区的统计信息变得不可靠,需要对普通表和分区重新执行analyze。 由于非分区键不能建立本地唯一索引,只能建立全局唯一索引,所以如果普通表含有唯一索引时,可能会导致无法交换数据。 如果需要进行数据交换操作,可以通过创建中间表的方式。先将分区数据插入到中间表,truncate分区,普通表数据插入分区表,drop普通表,重命名中间表的方式完成数据交换操作。 对于普通表和分区表都是Ustore的场景,如果普通表的Ubtree索引类型(RCR或者PCR,默认为RCR)和分区表本地的Ubtree索引类型(RCR或PCR,默认为RCR)不一致,会导致无法完成数据交换的操作。 如果在普通表/分区表上进行了DROP COLUMN操作,被删除的列依然物理存在,则需要保证普通表和分区的被删除列严格对齐才能交换成功。 EXCHANGE PARTITION { ( partition_name ) | partition_name | FOR ( partition_value [, ... ] ) }操作在B模式数据库(即sql_compatibility = 'B')下可用,其他模式下仅EXCHANGE PARTITION { ( partition_name ) | FOR ( partition_value [, ... ] ) }可用。 在B模式数据库(即sql_compatibility = 'B')下,当partition_name为一级分区名时,进行交换的是一级分区和普通表;当partition_name为二级分区时, 进行交换的是二级分区和普通表。 不支持在二级分区表中交换一级分区和普通表。 row_clause子语法用于设置分区表的行迁移开关。 { ENABLE | DISABLE } ROW MOVEMENT merge_clause子语法用于把多个分区合并成一个分区。一个命令中合并的源分区上限为300。 MERGE PARTITIONS { partition_name } [, ...] INTO PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] [ UPDATE GLOBAL INDEX ] 对于范围分区/间隔分区,MERGE分区要求源分区的范围连续递增,且MERGE后的分区名可以与最后一个源分区名相同;对于列表分区,则源分区无顺序要求,且MERGE后的分区名可以与任一源分区名相同。如果MERGE后的分区名与源分区名相同,视为同一个分区。 未打开guc参数enable_ilm的情况下,如果使用merge_clause子语法把多个带有ilm policy的分区合并成一个分区,新分区不继承ilm policy。 USTORE存储引擎表不支持在事务块/存储过程中执行ALTER TABLE MERGE PARTITIONS的操作。 modify_clause子语法用于设置分区索引是否可用。 MODIFY PARTITION partition_name { UNUSABLE LOCAL INDEXES | REBUILD UNUSABLE LOCAL INDEXES | COLVIEW [ PRIORITY { HIGH | LOW | NONE } ] | NOCOLVIEW [ PRIORITY { HIGH | LOW | NONE } ]} split_clause子语法用于把一个分区切割成多个分区。 SPLIT PARTITION { partition_name | FOR ( partition_value [, ...] ) } { split_point_clause | no_split_point_clause } [ UPDATE GLOBAL INDEX ] SPLIT后的分区名可以与源分区名相同,将视为不同的分区。 未打开guc参数enable_ilm的情况下,如果使用split_clause子语法把一个带有ilm policy的分区分割成多个分区,新分区不继承ilm policy。 范围分区表和间隔分区表指定切割点split_point_clause的语法为: AT ( partition_value ) INTO ( PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] , PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] ) 切割点的大小要位于正在被切割的分区的分区键范围内,指定切割点的方式只能把一个分区切割成两个新分区。 范围分区表和间隔分区表不指定切割点no_split_point_clause的语法为: INTO { ( partition_less_than_item [, ...] ) | ( partition_start_end_item [, ...] ) } 不指定切割点的方式,partition_less_than_item指定的第一个新分区的分区键要大于正在被切割的分区的前一个分区(如果存在)的分区键,partition_less_than_item指定的最后一个分区的分区键要等于正在被切割的分区的分区键。 不指定切割点的方式,partition_start_end_item指定的第一个新分区的起始点(如果存在)必须等于正在被切割的分区的前一个分区(如果存在)的分区键,partition_start_end_item指定的最后一个分区的终止点(如果存在)必须等于正在被切割的分区的分区键。 partition_less_than_item支持的分区键个数最多为16,而partition_start_end_item仅支持1个分区键,其支持的数据类型请参见•PARTITION BY RANGE [COLUMNS] (partition_key)。 在同一语句中partition_less_than_item和partition_start_end_item两者不可同时使用;不同split语句之间没有限制。 分区项partition_less_than_item的语法如下,其中最后一个分区可以不写分区范围定义,即VALUES LESS THAN (partition_value)部分,默认继承源分区范围定义的上界值。 PARTITION partition_name VALUES LESS THAN {( { partition_value | MAXVALUE } [, ...] ) | MAXVALUE } [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] RANGE分区时支持MAXVALUE关键字不带括号,只能支持B模式使用,不支持在二级分区的子分区中使用,不支持在分区字段为多列的场景使用。 分区项partition_start_end_item的语法如下,其约束请参见START END语法描述。 PARTITION partition_name { {START(partition_value) END (partition_value) EVERY (interval_value)} | {START(partition_value) END ({partition_value | MAXVALUE})} | {START(partition_value)} | {END({partition_value | MAXVALUE})} } [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [TABLESPACE tablespace_name] 列表分区表指定切割点split_point_clause的语法如下。 VALUES ( partition_value_list ) INTO ( PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespacename ] , PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespacename ] ) 切割点必须是源分区的一个非空真子集,指定切割点的方式只能把一个分区切割成两个新分区。 列表分区表不指定切割点no_split_point_clause的语法如下,其中最后一个分区不能写分区范围定义,即VALUES (partition_value_list)部分,其范围等于源分区去掉其他子分区后的剩余集合。 INTO ( PARTITION partition_name VALUES (partition_value_list) [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespacename ][, ...] ) COMPRESS ADVANCED ROW: 最后一个新分区不能写分区范围定义,其范围等于源分区去掉其他子分区后的剩余集合。 不指定切割点的方式,每一个新分区都必须是源分区的一个非空真子集,且互不交叉。 add_clause子语法用于为指定的分区表添加一个或多个分区。 ADD {{partition_less_than_item | partition_start_end_item| partition_list_item } | PARTITION({partition_less_than_item | partition_start_end_item | partition_list_item})} PARTITION({partition_less_than_item | partition_start_end_item | partition_list_item})语法只支持B模式下使用。 不支持ALTER TABLE table_name ADD PARTITION (partition_definition1, partition_definition2,…);语法添加多分区。仅支持原有添加多分区语法:ALTER TABLE table_name ADD PARTITION (partition_definition1), ADD PARTITION (partition_definition2), …。 分区项partition_list_item的语法为: PARTITION partition_name VALUES [IN] (list_values_clause) [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] partition_list_item支持最多16个分区键,其支持的数据类型请参见•PARTITION BY LIST [COLUMNS] (partition_key)。 间隔/哈希分区表不支持添加分区。 IN需要在B模式下使用,不支持在二级分区的子分区中使用。 drop_clause子语法用于删除分区表中的指定分区。 DROP PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ] 哈希分区表不支持删除分区。 当分区表只有一个分区时,不能删除该分区。 truncate_clause子语法用于清空分区表中的指定分区。 TRUNCATE PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ] ilm_clause子语法用于为分区添加ILM策略,为数据生命周期管理-OLTP表压缩特性支持语法。 MODIFY PARTITION partition_name ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR ) ] set_partitioning_clause子语法用于开启或关闭列表/范围分区自动扩展功能。 SET PARTITIONING { AUTOMATIC | MANUAL } | SET INTERVAL ( [ interval_expr ] ) 修改表分区名称的语法。 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RENAME PARTITION { partion_name | FOR ( partition_value [, ...] ) } TO partition_new_name; 重置分区ID的语法。 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RESET PARTITION;
  • 注意事项 只有分区表的所有者或者被授予了分区表ALTER权限的用户有权限执行ALTER TABLE PARTITION命令,当三权分立开关关闭时,系统管理员默认拥有此权限。 添加分区的表空间不能是PG_GLOBAL。 添加分区的名称不能与该分区表已有分区的名称相同。 添加分区的分区键值要和分区表的分区键类型一致。 若添加RANGE分区,添加分区键值要大于分区表中最后一个范围分区的上边界。 若添加LIST分区,添加分区键值不能与现有分区键值重复。 不支持添加哈希分区。 如果目标分区表中已有分区数达到了最大值1048575,则不能继续添加分区。 当分区表只有一个分区时,不能删除该分区。 选择分区使用PARTITION FOR(),括号里指定值个数应该与定义分区时使用的列个数相同,并且一一对应。ALTER TABLE操作会处理partition_value落入的分区。 Value分区表不支持Alter Partition操作。 间隔分区表不支持添加分区。 哈希分区表不支持切割分区,不支持合并分区,不支持添加/删除分区。 删除、切割、合并、清空、交换分区的操作会使Global索引失效,可以申明UPDATE GLOBAL INDEX子句同步更新索引。 如果删除、切割、合并、清空、交换分区操作不申明UPDATE GLOBAL INDEX子句,并发的DML业务有可能因为索引不可用而报错。 若设置参数enable_gpi_auto_update为on,即使不申明UPDATE GLOBAL INDEX子句,也会自动更新Global索引。 在为数据对象增加或者变更ILM策略的时候,如果追加了行级表达式,需要注意行表达式目前只支持白名单中列出的函数。具体白名单函数列表参考行表达式函数白名单。 开启范围分区自动扩展要求分区表中不能存在分区键值为MAXVALUE的分区。 开启范围分区自动扩展只支持单分区键。 开启列表分区自动扩展要求分区表中不能存在分区键值为DEFAULT的分区。
  • GS_MY_ILMPOLICIES GS_MY_ILMPOLICIES视图反映ILM策略的概要信息,包含策略名称、类型、启用禁用状态、删除状态。 表1 GS_MY_ILMPOLICIES字段 名称 类型 描述 policy_name character varying(128) ADO策略名称,系统自动生成,规则为:p+策略ID。 policy_type character varying(13) 策略类型。 tablespace character varying(30) 表空间名称,当该策略制定在表空间上时此处有值。当前版本值为null。 enabled character varying(6) 策略是否开启。 deleted character varying(7) 策略是否被删除。 父主题: OLTP表压缩
  • GS_JOB_ATTRIBUTE GS_JOB_ATTRIBUTE系统表提供了DBE_SCHEDULER定时任务的相关属性信息,其中包括定时任务,定时任务类,证书,授权,程序和调度的基本属性。新安装数据库实例普通用户无权限访问。 表1 GS_JOB_ATTRIBUTE字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 job_name text 定时任务,定时任务类,证书,程序和调度的名字,授权的用户名。 attribute_name text 定时任务,定时任务类,证书,程序和调度的属性名,授权的内容。 attribute_value text 定时任务,定时任务类,证书,程序和调度的属性值。 父主题: 其他系统表
  • 连接方式介绍 连接数据库的方式通常是根据安全性、性能、可扩展性和实现复杂度等因素进行选择的。下面是4种方式连接数据库的优缺点以及选择原则: 表1 不同方式的优缺点以及选择原则 连接方式 优点 缺点 选择原则 非加密方式 简单易实现,无需额外的加密和解密操作。 性能较高,因为不需要进行加密/解密操作,减少了数据传输的开销。 安全性较低,数据在传输过程中容易被窃听或篡改。 不适合传输敏感信息,可能违反隐私保护法规。 只适用于内部网络或对安全性要求不高的环境。 SSL方式 提供了加密传输,数据在传输过程中得到保护,安全性较高。 支持客户端/服务器身份验证,增强了安全性。 配置和管理相对复杂,需要证书的颁发和更新。 可能会增加一些性能开销,特别是在加密和解密大量数据时。 适用于对数据传输安全性要求较高的环境,如金融、医疗等行业。 UDS方式 适用于本地通信,不经过网络,传输速度快。 不需要额外的网络开销,不容易受到网络攻击。 仅限于在同一台主机上的进程间通信,无法用于远程连接。 适用于本地通信的场景,如本地服务和应用之间的数据交换。 国密TLS方式 支持国密算法,符合国内对加密算法的法律要求。 提供了与标准TLS相当的安全性,适用于对加密标准有特殊要求的场景。 在国际范围内的应用可能受限,因为其他国家可能不支持国密算法。 可能存在性能开销,因为国密算法相对于传统的加密算法可能更为复杂。 适用于国内的特定行业,如政府、金融等领域,对国内加密标准有法律要求的场景。 父主题: 连接数据库
  • 向量类型的使用 向量类型的使用示例如下: -- 创建含向量类型的表,同时设定数据维度。建表时向量类型必须要指定维度。 gaussdb=# CREATE TABLE t1(id int unique, repr floatvector(4)); gaussdb=# CREATE TABLE t2(id int unique, repr boolvector(3)); -- 插入数据 gaussdb=# INSERT INTO t1 VALUES(0, '[30,12,12,25]'); gaussdb=# INSERT INTO t2 VALUES(1, '[1, 0, 1]');
  • 示例 SHARE ROW EXCLUSIVE --创建SCHEMA。 gaussdb=# CREATE SCHEMA tpcds; --创建表tpcds.reason。 gaussdb=# CREATE TABLE tpcds.reason ( r_reason_sk INTEGER NOT NULL, r_reason_id CHAR(16) NOT NULL, r_reason_desc INTEGER ); --向表中插入多条记录。 gaussdb=# INSERT INTO tpcds.reason VALUES (1, 'AAAAAAAABAAAAAAA', '18'),(5, 'AAAAAAAACAAAAAAA', '362'),(7, 'AAAAAAAADAAAAAAA', '585'); --创建一个新表reason_t1。 gaussdb=# CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason; --开启事务。 gaussdb=# START TRANSACTION; --使用SHARE ROW EXCLUSIVE MODE锁模式锁表。 gaussdb=# LOCK TABLE tpcds.reason_t1 IN SHARE ROW EXCLUSIVE MODE; --在另一个终端执行DELETE操作会发现阻塞。 gaussdb=# DELETE FROM tpcds.reason_t1 WHERE r_reason_sk = 7; --结束事务,释放锁。 gaussdb=# COMMIT; ROW EXCLUSIVE --开启事务。 gaussdb=# START TRANSACTION; --执行update语句后,在被引用的表上请求一个ROW EXCLUSIVE锁。 gaussdb=# UPDATE tpcds.reason_t1 SET r_reason_desc=180 WHERE r_reason_sk=1; --在另外一个终端alter table语句,出现阻塞。 gaussdb=# ALTER TABLE tpcds.reason_t1 ADD r_reason_asc int; --结束事务,释放锁。 gaussdb=# COMMIT; AC CES S EXCLUSIVE --开启事务。 gaussdb=# START TRANSACTION; --执行TRUNCATE语句后,在被引用的表上请求一个ACCESS SHARE锁。 gaussdb=# TRUNCATE tpcds.reason_t1; --在另一个终端执行select语句,出现阻塞。 gaussdb=# SELECT * FROM tpcds.reason_t1; --结束事务,释放锁。 gaussdb=# COMMIT; --删除表tpcds.reason_t1。 gaussdb=# DROP TABLE tpcds.reason_t1; --删除表tpcds.reason。 gaussdb=# DROP TABLE tpcds.reason; --删除SCHEMA。 gaussdb=# DROP SCHEMA tpcds CASCADE;
  • 功能描述 LOCK TABLE命令用于获取表级锁。 GaussDB在为一个引用了表的命令自动请求锁时,尽可能选择最小限制的锁模式。如果用户需要一种更为严格的锁模式,可以使用LOCK命令。例如,一个应用是在Read Committed隔离级别上运行事务,并且它需要保证表中的数据在事务的运行过程中不被修改。为实现这个目的,则可以在查询之前对表使用SHARE锁模式进行锁定。这样将防止数据被并发修改,从而保证后续的查询可以读到已提交的持久化的数据。因为SHARE锁模式与任何写操作需要的ROW EXCLUSIVE模式冲突,并且LOCK TABLE name IN SHARE MODE语句将等到所有当前持有ROW EXCLUSIVE模式锁的事务提交或回滚后才能执行。因此,一旦获得该锁,就不会存在未提交的写操作,并且其他操作也只能等到该锁释放之后才能开始。
  • 参数说明 表1 冲突的锁模式 请求的锁模式/当前锁模式 ACCESS SHARE ROW SHARE ROW EXCLUSIVE SHARE UPDATE EXCLUSIVE SHARE SHARE ROW EXCLUSIVE EXCLUSIVE ACCESS EXCLUSIVE ACCESS SHARE - - - - - - - X ROW SHARE - - - - - - X X ROW EXCLUSIVE - - - - X X X X SHARE UPDATE EXCLUSIVE - - - X X X X X SHARE - - X X - X X X SHARE ROW EXCLUSIVE - - X X X X X X EXCLUSIVE - X X X X X X X ACCESS EXCLUSIVE X X X X X X X X LOCK的参数说明如下所示: name 要锁定的表的名称,可以有模式修饰。 LOCK TABLE命令中声明的表的顺序就是上锁的顺序。 取值范围:已存在的表名。 支持使用DATABASE LINK方式对远端表进行操作,使用方式详情请见DATABASE LINK。 ONLY 如果指定ONLY,只有该表被锁定。如果没有声明,该表和他的所有子表将都被锁定。 ACCESS SHARE 只与ACCESS EXCLUSIVE冲突。 SELECT命令在被引用的表上请求一个这种锁。通常, 任何只读取表而不修改它的命令都请求这种锁模式。 ROW SHARE 与EXCLUSIVE和ACCESS EXCLUSIVE锁模式冲突。 SELECT FOR UPDATE和SELECT FOR SHARE命令会自动在目标表上请求ROW SHARE锁(且所有被引用但不是FOR SHARE/FOR UPDATE的其他表上,还会自动加上ACCESS SHARE锁)。 ROW EXCLUSIVE ROW EXCLUSIVE锁与ROW SHARE锁相同,允许并发读取表,但是禁止修改表中数据。UPDATE、DELETE、INSERT命令会自动在目标表上请求这个锁(且所有被引用的其他表上还会自动加上的ACCESS SHARE锁)。通常情况下,所有会修改表数据的命令都会请求表的ROW EXCLUSIVE锁。 SHARE UPDATE EXCLUSIVE 这个模式保护一个表的模式不被并发修改,以及禁止在目标表上执行垃圾回收命令(VACUUM )。 VACUUM(不带FULL选项)、ANALYZE、CREATE INDEX CONCURRENTLY命令会自动请求这样的锁。 SHARE SHARE锁允许并发的查询,但是禁止对表进行修改。 CREATE INDEX(不带CONCURRENTLY选项)语句会自动请求这种锁。 SHARE ROW EXCLUSIVE SHARE ROW EXCLUSIVE锁禁止对表进行任何的并发修改,而且是独占锁,因此一个会话中只能获取一次。 任何SQL语句都不会自动请求这个锁模式。 EXCLUSIVE EXCLUSIVE锁允许对目标表进行并发查询,但是禁止任何其他操作。 这个模式只允许并发加ACCESS SHARE锁,也就是说,只有对表的读动作可以和持有这个锁模式的事务并发执行。 任何SQL语句都不会在用户表上自动请求这个锁模式。然而在某些操作的时候,会在某些系统表上请求它。 ACCESS EXCLUSIVE 这个模式保证其所有者(事务)是可以访问该表的唯一事务。 ALTER TABLE、DROP TABLE、TRUNCATE、REINDEX命令会自动请求这种锁。 在LOCK TABLE命令没有明确声明需要的锁模式时,它是缺省锁模式。 NOWAIT 声明LOCK TABLE不去等待任何冲突的锁释放,如果无法立即获取该锁,该命令退出并且发出一个错误信息。 在不指定NOWAIT的情况下获取表级锁时,如果有其他互斥锁存在的话,则等待其他锁的释放。
  • 注意事项 LOCK TABLE只能在一个事务块的内部有用,因为锁在事务结束时就会被释放。出现在任意事务块外面的LOCK TABLE都会报错。 如果没有声明锁模式,缺省为最严格的模式ACCESS EXCLUSIVE。 LOCK TABLE ... IN ACCESS SHARE MODE需要在目标表上有SELECT权限。所有其他形式的LOCK需要UPDATE或DELETE权限。 没有UNLOCK TABLE命令,锁总是在事务结束时释放。 LOCK TABLE只处理表级的锁,因此那些带“ROW”字样的锁模式都是有歧义的。这些模式名称通常可理解为用户试图在一个被锁定的表中获取行级的锁。同样,ROW EXCLUSIVE模式也是一个可共享的表级锁。注意,只要是涉及到LOCK TABLE ,所有锁模式都有相同的语意,区别仅在于规则中锁与锁之间是否冲突,规则请参见表1。 如果没有打开xc_maintenance_mode参数,那么对系统表申请ACCESS EXCLUSIVE级别锁将报错。
  • 语法格式 LOCK [ TABLE ] {[ ONLY ] name [, ...]| {name [ * ]} [, ...]} [ IN {ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE} MODE ] [ NOWAIT ];
  • DBE_PLDEBUGGER.info_breakpoints debug端调试过程中,调用info_breakpoints,查看当前的函数断点,如表1所示。 表1 info_breakpoints返回值列表 名称 类型 描述 breakpointno OUT integer 断点编号。 funcoid OUT oid 函数ID。 lineno OUT integer 行号。 query OUT text 断点内容。 enable OUT boolean 是否有效。 父主题: DBE_PLDEBUGGER Schema
  • PG_USER_MAPPING PG_USER_MAPPING系统表存储从本地用户到远程的映射。 需要有系统管理员权限才可以访问此系统表。普通用户可以使用视图PG_USER_MAPPINGS进行查询。 表1 PG_USER_MAPPING字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 umuser oid PG_AUTHID.oid 被映射的本地用户的OID,如果用户映射是公共的则为0。 umserver oid PG_FOREIGN_SERVER.oid 包含这个映射的外部服务器的OID。 umoptions text[] - 用户映射指定选项,使用“keyword=value”格式的字符串。 父主题: 用户和权限管理
  • PG_GTT_RELSTATS PG_GTT_RELSTATS视图可用来查看当前会话所有全局临时表的基本信息,调用pg_get_gtt_relstats()函数。 表1 PG_GTT_RELSTATS字段 名称 类型 描述 schemaname name schema名称。 tablename name 全局临时表名称。 relfilenode oid 文件对象的ID。 relpages integer 全局临时表的磁盘页面数。 reltuples real 全局临时表的记录数。 relallvisible integer 被标识为全可见的页面数。 relfrozenxid xid 该表中所有在这个之前的事务ID已经被一个固定的(frozen)事务ID替换。 relminmxid xid 预留接口,暂未启用。 父主题: 其他系统视图
  • GS_ILM GS_ILM系统表提供了ILM策略的主体信息,其中包括策略名称、策略属主、策略类型、策略编号和策略状态。 表1 GS_ILM字段 名称 类型 描述 pidx integer 策略序号,全局唯一以1开始的流水号。 creator oid 策略属主。 name name 策略名称,目前不支持自定义名称,默认名称为p+pidx。 ptype "char" 策略类型: m:DATA MOVEMENT。 flag smallint 取值范围: 0:策略整体启用状态。 1:策略整体被禁用。 父主题: OLTP表压缩
  • SUMMARY_STAT_USER_FUNCTIONS 显示数据库各节点的用户自定义函数的相关统计信息的汇总求和结果,如表1所示。 表1 SUMMARY_STAT_USER_FUNCTIONS字段 名称 类型 描述 schemaname name Schema的名称。 funcname name 用户自定义函数的名称。 calls numeric 该函数被调用的次数。 total_time double precision 调用此函数花费的总时间,包含调用其它函数的时间(单位:毫秒)。 self_time double precision 调用此函数本身花费的时间,不包含调用其它函数的时间(单位:毫秒)。 父主题: Object
  • GS_LOGICAL_DICTIONARY GS_LOGICAL_DICTIONARY系统表记录逻辑解码数据字典信息表。 表1 GS_LOGICAL_DICTIONARY字段 字段名称 字段类型 说明 status integer 表示逻辑解码数据字典是否有效可用。 restart_lsn bigint unsigned 预留字段。 restart_lsn_time timestamp with time zone 基线化完成时间。 dictionary_csn_min bigint unsigned 使用的最小版本号。 last_clean_time timestamp with time zone 数据字典表最后一次清理的时间。 last_clean_result bool 数据字典表最后一次清理的结果。 originid integer 元组的来源标识符。 last_flush_csn bigint unsigned 上一次元信息修改的CSN。 父主题: 逻辑解码
  • java.sql.ResultSetMetaData java.sql.ResultSetMetaData是对ResultSet对象相关信息的具体描述。 表1 对java.sql.ResultSetMetaData的支持情况 方法名 返回值类型 支持JDBC4 支持计划外ALT getCatalogName(int column) String Yes Yes getColumnClassName(int column) String Yes Yes getColumnCount() int Yes Yes getColumnDisplaySize(int column) int Yes Yes getColumnLabel(int column) String Yes Yes getColumnName(int column) String Yes Yes getColumnType(int column) int Yes Yes getColumnTypeName(int column) String Yes Yes getPrecision(int column) int Yes Yes getScale(int column) int Yes Yes getSchemaName(int column) String Yes Yes getTableName(int column) String Yes Yes isAutoIncrement(int column) boolean Yes Yes isCaseSensitive(int column) boolean Yes Yes isCurrency(int column) boolean Yes Yes isDefinitelyWritable(int column) boolean Yes Yes isNullable(int column) int Yes Yes isReadOnly(int column) boolean Yes Yes isSearchable(int column) boolean Yes Yes isSigned(int column) boolean Yes Yes isWritable(int column) boolean Yes Yes uppercaseAttributeName为true时,下面接口会将查询结果转为大写,可转换范围为26个英文字母。 public String getColumnName(int column) public String getColumnLabel(int column) 父主题: JDBC接口参考
共100000条