华为云用户手册

  • PG_STATIO_USER_TABLES PG_STATIO_USER_TABLES视图显示命名空间中所有用户关系表的I/O状态信息。 表1 PG_STATIO_USER_TABLES字段 名称 类型 描述 relid oid 表OID。 schemaname name 该表的模式名。 relname name 表名。 heap_blks_read bigint 从该表中读取的磁盘块数。 heap_blks_hit bigint 该表命中缓存数。 idx_blks_read bigint 从表中所有索引读取的磁盘块数。 idx_blks_hit bigint 表中所有索引命中缓存数。 toast_blks_read bigint 从该表的TOAST表读取的磁盘块数(如果存在)。 toast_blks_hit bigint 该表的TOAST表命中缓存数(如果存在)。 tidx_blks_read bigint 从该表的TOAST表索引读取的磁盘块数(如果存在)。 tidx_blks_hit bigint 该表的TOAST表索引命中缓存数(如果存在)。 父主题: 系统视图
  • GLOBAL_CKPT_STATUS GLOBAL_CKPT_STATUS视图用于显示整个集群所有实例的检查点信息和各类日志刷页情况。 表1 GLOBAL_CKPT_STATUS字段 名称 类型 描述 node_name text 实例名称。 ckpt_redo_point text 当前实例的检查点。 ckpt_clog_flush_num bigint 从启动到当前时间clog刷盘页面数。 ckpt_csnlog_flush_num bigint 从启动到当前时间csnlog刷盘页面数。 ckpt_multixact_flush_num bigint 从启动到当前时间multixact刷盘页面数。 ckpt_predicate_flush_num bigint 从启动到当前时间predicate刷盘页面数。 ckpt_twophase_flush_num bigint 从启动到当前时间twophase刷盘页面数。 父主题: Utility
  • 语法格式 1 2 3 4 5 6 7 8 CREATE [ UN LOG GED ] TABLE table_name [ (column_name [, ...] ) ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ TABLESPACE tablespace_name ] [ DISTRIBUTE BY { REPLICATION | { [HASH ] ( column_name ) } } ] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ] AS query [ WITH [ NO ] DATA ];
  • 功能描述 根据查询结果创建表。 CREATE TABLE AS创建一个表并且用来自SELECT命令的结果填充该表。该表的字段和SELECT输出字段的名称及数据类型相关。不过用户可以通过明确地给出一个字段名称列表来覆盖SELECT输出字段的名称。 CREATE TABLE AS对源表进行一次查询,然后将数据写入新表中,而查询视图结果会根据源表的变化而有所改变。相比之下,每次做查询的时候,视图都重新计算定义它的SELECT语句。
  • 参数说明 UNLOGGED 指定表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是,它也是不安全的,在冲突或异常关机导致数据库重启后,非日志表数据会被清空。非日志表中的内容也不会被复制到备用服务器中。在该类表中创建的索引也不会被自动记录。 使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。 故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。 GLOBAL | LOCAL 创建临时表时可以在TEMP或TEMPORARY前指定GLOBAL或LOCAL关键字。目前这两个关键字的设立,仅是为了兼容SQL标准,实际上无论指定GLOBAL还是LOCAL, GaussDB 都会创建本地临时表。 TEMPORARY | TEMP 如果指定TEMP或TEMPORARY关键字,则创建的表为临时表。临时表只在当前会话可见,本会话结束后会自动删除。因此,在除当前会话连接的CN以外的其他CN故障时,仍然可以在当前会话上创建和使用临时表。由于临时表只在当前会话创建,对于涉及对临时表操作的DDL语句,会产生DDL失败的报错。因此,建议DDL语句中不要对临时表进行操作。TEMP和TEMPORARY等价。 临时表通过每个会话独立的以pg_temp开头的schema来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg_temp,pg_toast_temp开头的schema。 如果建表时不指定TEMPORARY/TEMP关键字,而指定表的schema为当前会话的pg_temp_开头的schema,则该表会被创建为临时表。 临时表只对当前会话可见,因此不支持与\parallel on并行执行一起使用。 临时表不支持DN故障或者主备切换。 table_name 要创建的表名。 取值范围:字符串,要符合标识符命名规范。 column_name 新表中要创建的字段名。 取值范围:字符串,要符合标识符命名规范。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。参数的详细说明如下所示。 FILLFACTOR 一个表的填充因子(fillfactor)是一个介于10和100之间的百分数。100(完全填充)是默认值。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是最佳选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。该参数只对行存表有效。 取值范围:10~100 ORIENTATION 取值范围: COLUMN:表的数据将以列式存储。 ROW(缺省值):表的数据将以行式存储。 hashbucket 创建hash bucket存储。本参数仅支持行存表和行存range表。 取值范围:on/off 默认值:off 当前版本hashbucket表相关DDL操作性能受限,不建议频繁对hashbucket表进行DDL操作。 TABLESPACE tablespace_name 指定新表将要在tablespace_name表空间内创建。如果没有声明,将使用默认表空间。 DISTRIBUTE BY 指定表如何在节点之间分布或者复制。 REPLICATION:表的每一行存在所有数据节点( DN )中,即每个数据节点都有完整的表数据。 HASH (column_name ) :对指定的列进行Hash,通过映射,把数据分布到指定DN。 当指定DISTRIBUTE BY HASH (column_name)参数时,创建主键和唯一索引必须包含“ column_name”列。 缺省值:HASH(column_name),column_name取表的主键列(如果有的话)或首个数据类型支持作为分布列的列。 column_name的数据类型必须是以下类型之一: INTEGER TYPES:TINYINT,SMALLINT,INT,BIGINT,NUMERIC/DECIMAL CHARACTER TYPES: CHAR,BPCHAR,VARCHAR,VARCHAR2,NVARCHAR2 DATE/TIME TYPES: DATE,TIME,TIMETZ,TIMESTAMP,TIMESTAMPTZ,INTERVAL,SMALLDATETIME TO { GROUP groupname | NODE ( nodename [, ... ] ) } TO GROUP指定创建表所在的Node Group。TO NODE主要供内部扩容工具使用,一般用户不应该使用。 AS query 一个SELECT VALUES命令或者一个运行预备好的SELECT或VALUES查询的EXECUTE命令。 [ WITH [ NO ] DATA ] 创建表时,是否也插入查询到的数据。默认是要数据,选择“NO”参数时,则不要数据。
  • GLOBAL_COMM_DELAY GLOBAL_COMM_DELAY视图展示所有DN的TCP代理通信库时延状态。 表1 GLOBAL_COMM_DELAY字段 名称 类型 描述 node_name text 节点名称。 remote_name text 连接对端节点名称。 remote_host text 连接对端IP地址。 stream_num integer 当前物理连接使用的stream逻辑连接数量。 min_delay integer 当前物理连接一分钟内探测到的最小时延(单位:微秒)。 说明: 负数结果无效,请重新等待时延状态更新后再执行。 average integer 当前物理连接一分钟内探测时延的平均值(单位:微秒)。 max_delay integer 当前物理连接一分钟内探测到的最大时延(单位:微秒)。 父主题: Comm
  • 返回值 SQL_SUC CES S:表示调用正确。 SQL_SUCCESS_WITH_INFO:表示会有一些警告信息。 SQL_NEED_DATA:在执行SQL语句前没有提供足够的参数。 SQL_ERROR:表示比较严重的错误,如:内存分配失败、建立连接失败等。 SQL_INVALID_HANDLE:表示调用无效句柄。其他API的返回值同理。 SQL_STILL_EXECUTING:表示语句正在执行。 SQL_NO_DATA:表示SQL语句不返回结果集。
  • 参数说明 index_name 要修改的索引名。 new_name 新的索引名。 取值范围:字符串,且符合标识符命名规范。 tablespace_name 表空间的名称。 取值范围:已存在的表空间。 storage_parameter 索引方法特定的参数名。 value 索引方法特定的存储参数的新值。根据参数的不同,这可能是一个数字或单词。 new_index_partition_name 新索引分区名。 index_partition_name 索引分区名。 new_tablespace 新表空间。
  • 语法格式 重命名表索引的名称。 1 2 ALTER INDEX [ IF EXISTS ] index_name RENAME TO new_name; 修改表索引的所属空间。 1 2 ALTER INDEX [ IF EXISTS ] index_name SET TABLESPACE tablespace_name; 修改表索引的存储参数。 1 2 ALTER INDEX [ IF EXISTS ] index_name SET ( {storage_parameter = value} [, ... ] ); 重置表索引的存储参数。 1 2 ALTER INDEX [ IF EXISTS ] index_name RESET ( storage_parameter [, ... ] ) ; 设置表索引或索引分区不可用。 1 2 ALTER INDEX [ IF EXISTS ] index_name [ MODIFY PARTITION index_partition_name ] UNUSABLE; 重建表索引或索引分区。 1 2 ALTER INDEX index_name REBUILD [ PARTITION index_partition_name ]; 重命名索引分区。 1 2 ALTER INDEX [ IF EXISTS ] index_name RENAME PARTITION index_partition_name TO new_index_partition_name; 修改索引分区的所属表空间。 1 2 ALTER INDEX [ IF EXISTS ] index_name MOVE PARTITION index_partition_name TABLESPACE new_tablespace;
  • 功能描述 ALTER INDEX用于修改现有索引的定义。 它有几种子形式: IF EXISTS 如果指定的索引不存在,则发出一个notice而不是error。 RENAME TO 只改变索引的名称。对存储的数据没有影响。 SET TABLESPACE 这个选项会改变索引的表空间为指定表空间,并且把索引相关的数据文件移动到新的表空间里。 SET ( { STORAGE_PA RAM ETER = value } [, ...] ) 改变索引的一个或多个索引方法特定的存储参数。 需要注意的是索引内容不会被这个命令立即修改,根据参数的不同,可能需要使用REINDEX重建索引来获得期望的效果。 RESET ( { storage_parameter } [, ...] ) 重置索引的一个或多个索引方法特定的存储参数为缺省值。与SET一样,可能需要使用REINDEX来完全更新索引。 [ MODIFY PARTITION index_partition_name ] UNUSABLE 用于设置表或者索引分区上的索引不可用。 REBUILD [ PARTITION index_partition_name ] 用于重建表或者索引分区上的索引。 RENAME PARTITION 用于重命名索引分区 MOVE PARTITION 用于修改索引分区的所属表空间。
  • 示例 下面列举了基本的匿名块程序: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 --空语句块 openGauss=# BEGIN NULL; END; / --将信息打印到控制台: openGauss=# BEGIN dbe_output.print_line('hello world!'); END; / --将变量内容打印到控制台: openGauss=# DECLARE my_var VARCHAR2(30); BEGIN my_var :='world'; dbe_output.print_line('hello'||my_var); END; /
  • SUMMARY_STAT_DATABASE_CONFLI CTS 显示集群内汇聚的数据库冲突状态的统计信息。 表1 SUMMARY_STAT_DATABASE_CONFLICTS字段 名称 类型 描述 datname name 数据库名称。 confl_tablespace bigint 冲突的表空间的数目。 confl_lock bigint 冲突的锁数目。 confl_snapshot bigint 冲突的快照数目。 confl_bufferpin bigint 冲突的缓冲区数目。 confl_deadlock bigint 冲突的死锁数目。 父主题: Object
  • DB_INDEXES DB_INDEXES视图显示当前用户可访问的索引信息。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_INDEXES字段 名称 类型 描述 owner character varying(64) 索引的所有者。 index_name character varying(64) 索引名。 table_name character varying(64) 索引对应的表名。 uniqueness text 表示这个索引是否为唯一索引。 partitioned character(3) 表示这个索引是否具有分区表的性质。 generated character varying(1) 表示这个索引的名称是否为系统生成。 父主题: 系统视图
  • 参数 表1 SQLGetDiagRec参数 关键字 参数说明 HandleType 句柄类型标识符,它说明诊断所要求的句柄类型。必须为下列值之一: SQL_HANDLE_ENV SQL_HANDLE_DBC SQL_HANDLE_STMT SQL_HANDLE_DESC Handle 诊断数据结构的句柄,其类型由HandleType来指出。如果HandleType是SQL_HANDLE_ENV,Handle可以是共享的或非共享的环境句柄。 RecNumber 指出应用从查找信息的状态记录。状态记录从1开始编号。 SQLState 输出参数:指向缓冲区的指针,该缓冲区存储着有关RecNumber的五字符的SQLSTATE码。 NativeErrorPtr 输出参数:指向缓冲区的指针,该缓冲区存储着本地的错误码。 MessageText 指向缓冲区的指针,该缓冲区存储着诊断信息文本串。 BufferLength MessageText的长度。 TextLengthPtr 输出参数:指向缓冲区的指针,返回MessageText中的字节总数。如果返回字节数大于BufferLength,则MessageText中的诊断信息文本被截断成BufferLength减去NULL结尾字符的长度。
  • 注意事项 SQLGetDiagRec不发布自己的诊断记录。它用下列返回值来报告它自己的执行结果: SQL_SUCCESS:函数成功返回诊断信息。 SQL_SUCCESS_WITH_INFO:*MessageText太小以致不能容纳所请求的诊断信息。没有诊断记录生成。 SQL_INVALID_HANDLE:由HandType和Handle所指出的句柄是不合法句柄。 SQL_ERROR:RecNumber小于等于0或BufferLength小于0。 如果调用ODBC函数返回SQL_ERROR或SQL_SUCCESS_WITH_INFO,可调用SQLGetDiagRec返回诊断信息值SQLSTATE,SQLSTATE值的如下表。 表2 SQLSTATE值 SQLSATATE 错误 描述 HY000 一般错误 未定义特定的SQLSTATE所产生的一个错误。 HY001 内存分配错误 驱动程序不能分配所需要的内存来支持函数的执行或完成。 HY008 取消操作 调用SQLCancel取消执行语句后,依然在StatementHandle上调用函数。 HY010 函数系列错误 在为执行中的所有数据参数或列发送数据前就调用了执行函数。 HY013 内存管理错误 不能处理函数调用,可能由当前内存条件差引起。 HYT01 连接超时 数据源响应请求之前,连接超时。 IM001 驱动程序不支持此函数 调用了StatementHandle相关的驱动程序不支持的函数
  • 原型 1 2 3 4 5 6 7 8 SQLRETURN SQLGetDiagRec(SQLSMALLINT HandleType SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR *SQLState, SQLINTEGER *NativeErrorPtr, SQLCHAR *MessageText, SQLSMALLINT BufferLength SQLSMALLINT *TextLengthPtr);
  • GS_DB_PRIVILEGES GS_DB_PRIVILEGES系统视图记录ANY权限的授予情况,每条记录对应一条授权信息。 表1 GS_DB_PRIVILEGES字段 名称 类型 描述 rolename name 用户名。 privilege_type text 用户拥有的ANY权限,取值参考表1。 admin_option text 是否具有privilege_type列记录的ANY权限的再授权权限。 yes:表示具有。 no:表示不具有。 父主题: 系统视图
  • GLOBAL_WORKLOAD_TRANSACTION 显示各节点上的workload的负载信息。 表1 GLOBAL_WORKLOAD_TRANSACTION字段 名称 类型 描述 node_name name 节点名称。 workload name 负载的名称。 commit_counter bigint 用户事务commit数量。 rollback_counter bigint 用户事务rollback数量。 resp_min bigint 用户事务最小响应时间(单位:微秒)。 resp_max bigint 用户事务最大响应时间(单位:微秒)。 resp_avg bigint 用户事务平均响应时间(单位:微秒)。 resp_total bigint 用户事务总响应时间(单位:微秒)。 bg_commit_counter bigint 后台事务commit数量。 bg_rollback_counter bigint 后台事务rollback数量。 bg_resp_min bigint 后台事务最小响应时间(单位:微秒)。 bg_resp_max bigint 后台事务最大响应时间(单位:微秒)。 bg_resp_avg bigint 后台事务平均响应时间(单位:微秒)。 bg_resp_total bigint 后台事务总响应时间(单位:微秒)。 父主题: Workload
  • STAT_USER_TABLES 显示当前节点所有命名空间中用户自定义普通表的状态信息。 表1 STAT_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更新行数(即没有更新所需的单独索引)。 n_live_tup bigint 估计活跃行数。 n_dead_tup bigint 估计死行数。 last_vacuum timestamp with time zone 最后一次该表是手动清理的(不计算VACUUM FULL)时间。 last_autovacuum timestamp with time zone 上次被autovacuum守护进程清理的时间。 last_analyze timestamp with time zone 上次手动分析该表的时间。 last_autoanalyze timestamp with time zone 上次被autovacuum守护进程分析的时间。 vacuum_count bigint 该表被手动清理的次数(不计算VACUUM FULL)。 autovacuum_count bigint 该表被autovacuum清理的次数。 analyze_count bigint 该表被手动分析的次数。 autoanalyze_count bigint 该表被autovacuum守护进程分析的次数。 父主题: Object
  • SUMMARY_USER_LOGIN SUMMARY_USER_LOGIN用来记录所有CN节点上用户登录和退出次数的相关信息。 表1 SUMMARY_USER_LOGIN字段 名称 类型 描述 node_name text 节点名称。 user_name text 用户名称。 user_id integer 用户oid(同pg_authid中的oid字段)。 login_counter bigint 登录次数。 logout_counter bigint 退出次数。 父主题: Utility
  • 创建数据库用户 默认只有集群安装时创建的管理员用户可以访问初始数据库,您还可以创建其他数据库用户帐号。 1 openGauss=# CREATE USER joe WITH PASSWORD "*********"; 当结果显示为如下信息,则表示创建成功。 1 CREATE ROLE 如上创建了一个用户名为joe,密码为********的用户。如下命令为设置joe用户为系统管理员。 openGauss=# GRANT ALL PRIVILEGES TO joe; 使用GRANT命令进行相关权限设置,具体操作请参考GRANT。 关于数据库用户的更多信息请参考用户及权限。 父主题: 操作数据库
  • 优化分析2 在以上查询中,supplier、lineitem、partsupp三表做hashjoin的条件为(lineitem.l_suppkey = supplier.s_suppkey) AND (lineitem.l_partkey = partsupp.ps_partkey),此hashjoin条件中存在两个过滤条件,这前一个过滤条件中的lineitem.l_suppkey和后一个过滤条件中的lineitem.l_partkey同为lineitem表的两列,这两列存在强相关的关联关系。在这种情况,估算hashjoin条件的选择率时,如果使用cost_param的bit1为0时,实际是将AND的两个过滤条件分别计算的2个选择率的值相乘来得到hashjoin条件的选择率,导致行数估算不准确,查询性能较差。所以需要将cost_param的bit1为1时,选择最小的选择率作为总的选择率估算行数比较准确,查询性能较好,优化后的计划如下图所示:
  • 现象描述2 当cost_param的bit1(set cost_param=2)为1时,表示求多个过滤条件(Filter)的选择率时,选择最小的作为总的选择率,而非两者乘积,此方法在过滤条件的列之间关联性较强时估算更加准确。下面查询的例子是cost_param的bit1为1时的优化场景。 表结构如下所示: 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 CREATE TABLE NATION ( N_NATIONKEY INT NOT NULL , N_NAME CHAR(25) NOT NULL , N_REGIONKEY INT NOT NULL , N_COMMENT VARCHAR(152) ) distribute by replication; CREATE TABLE SUPPLIER ( S_SUPPKEY BIGINT NOT NULL , S_NAME CHAR(25) NOT NULL , S_ADDRESS VARCHAR(40) NOT NULL , S_NATIONKEY INT NOT NULL , S_PHONE CHAR(15) NOT NULL , S_ACCTBAL DECIMAL(15,2) NOT NULL , S_COMMENT VARCHAR(101) NOT NULL ) distribute by hash(S_SUPPKEY); CREATE TABLE PARTSUPP ( PS_PARTKEY BIGINT NOT NULL , PS_SUPPKEY BIGINT NOT NULL , PS_AVAILQTY BIGINT NOT NULL , PS_SUPPLYCOST DECIMAL(15,2)NOT NULL , PS_COMMENT VARCHAR(199) NOT NULL )distribute by hash(PS_PARTKEY); 查询语句如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 set cost_param=2; explain verbose select nation, sum(amount) as sum_profit from ( select n_name as nation, l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount from supplier, lineitem, partsupp, nation where s_suppkey = l_suppkey and ps_suppkey = l_suppkey and ps_partkey = l_partkey and s_nationkey = n_nationkey ) as profit group by nation order by nation; 当cost_param的bit1为0时,执行计划如下图所示:
  • 语法 语法请参见图1。 图1 call_procedure::= using_clause子句的语法参见图2。 图2 using_clause::= 对以上语法格式的解释如下: CALL procedure_name,调用存储过程。 [:placeholder1,:placeholder2,…],存储过程参数占位符列表。占位符个数与参数个数相同。 USING [IN|OUT|IN OUT] bind_argument,用于指定存放传递给存储过程参数值的变量。bind_argument前的修饰符与对应参数的修饰符一致。
  • 示例 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 --创建存储过程proc_add。 openGauss=# CREATE OR REPLACE PROCEDURE proc_add ( param1 in INTEGER, param2 out INTEGER, param3 in INTEGER ) AS BEGIN param2:= param1 + param3; END; / openGauss=# DECLARE input1 INTEGER:=1; input2 INTEGER:=2; statement VARCHAR2(200); param2 INTEGER; BEGIN --声明调用语句 statement := 'call proc_add(:col_1, :col_2, :col_3)'; --执行语句 EXECUTE IMMEDIATE statement USING IN input1, OUT param2, IN input2; dbe_output.print_line('result is: '||to_char(param2)); END; / --删除存储过程 openGauss=# DROP PROCEDURE proc_add;
  • PG_VARIABLE_INFO PG_VARIABLE_INFO视图用于查询集群中当前节点的xid、oid的状态。 表1 PG_VARIABLE_INFO字段 名称 类型 描述 node_name text 节点名称。 next_oid oid 该节点下一次生成的oid。 next_xid xid 该节点下一次生成的事务号。 oldest_xid xid 该节点最旧的事务号。 xid_vac_limit xid 强制autovacuum的临界点。 oldest_xid_db oid 该节点datafrozenxid最小的数据库oid。 last_extend_csn_logpage xid 最后一次扩展csnlog的页面号。 start_extend_csn_logpage xid csnlog扩展的起始页面号。 next_commit_seqno xid 该节点下次生成的csn号。 latest_completed_xid xid 该节点提交或者回滚后节点上的最新事务号。 startup_max_xid xid 该节点关机前的最后一个事务号。 父主题: 系统视图
  • SUMMARY_STATIO_ALL_INDEXES SUMMARY_STATIO_ALL_INDEXES视图包含集群中的每个索引行, 显示特定索引I/O的统计汇总结果。 表1 SUMMARY_STATIO_ALL_INDEXES字段 名称 类型 描述 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read numeric 从索引中读取的磁盘块数。 idx_blks_hit numeric 索引命中缓存数。 父主题: Cache/IO
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。 如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。 – with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问子查询的结果集。 – column_name指定子查询结果集中显示的列名。 – 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 – 用户可以使用MATERIALIZED / NOT MATERIALIZED对CTE进行修饰。 如果声明为MATERIALIZED,WITH查询将被物化,生成一个子查询结果集的拷贝,在引用处直接查询该拷贝,因此WITH子查询无法和主干SELECT语句进行联合优化(如谓词下推、等价类传递等),对于此类场景可以使用NOT MATERIALIZED进行修饰,如果WITH查询语义上可以作为子查询内联执行,则可以进行上述优化。 如果用户没有显示声明物化属性则遵守以下规则:如果CTE只在所属主干语句中被引用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan的方式物化执行。 plan_hint子句 以/*+ */的形式在DELETE关键字后,用于对DELETE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 ONLY 如果指定ONLY则只有该表被删除;如果没有声明,则该表和它的所有子表将都被删除。 table_name 目标表的名称(可以有模式修饰)。 取值范围:已存在的表名。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 using_list using子句。 condition 一个返回Boolean值的表达式,用于判断哪些行需要被删除。建议不要使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。 WHERE CURRENT OF cursor_name 当前不支持,仅保留语法接口。 output_expr DELETE命令删除行之后计算输出结果的表达式,该表达式可以使用表的任意字段,可以使用*返回被删除行的所有字段。 output_name 一个字段的输出名称。 取值范围:字符串,符合标识符命名规范。
  • 语法格式 1 2 3 4 5 [ WITH [ RECURSIVE ] with_query [, ...] ] DELETE [/*+ plan_hint */] [FROM] [ ONLY ] table_name [ * ] [ [ AS ] alias ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];
  • 操作步骤 方法一: 声明字段类型为序列整型来定义标识符字段。例如: 1 2 3 4 5 openGauss=# CREATE TABLE T1 ( id serial, name text ); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 方法二: 创建序列,并通过nextval('sequence_name')函数指定为某一字段的默认值。这种方式更灵活,可以为序列定义cache,一次预申请多个序列值,减少与GTM的交互次数,来提高性能。 创建序列 1 openGauss=# CREATE SEQUENCE seq1 cache 100; 当结果显示为如下信息,则表示创建成功。 1 CREATE SEQUENCE 指定为某一字段的默认值,使该字段具有唯一标识属性。 1 2 3 4 5 openGauss=# CREATE TABLE T2 ( id int not null default nextval('seq1'), name text ); 当结果显示为如下信息,则表示默认值指定成功。 1 CREATE TABLE 指定序列与列的归属关系。 将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。 1 openGauss=# ALTER SEQUENCE seq1 OWNED BY T2.id; 当结果显示为如下信息,则表示指定成功。 1 ALTER SEQUENCE 除了为序列指定了cache,方法二所实现的功能基本与方法一类似。但是一旦定义cache,序列将会产生空洞(序列值为不连贯的数值,如:1.4.5),并且不能保序。另外为某序列指定从属列后,该列删除,对应的sequence也会被删除。 虽然数据库并不限制序列只能为一列产生默认值,但建议不要多列共用同一个序列。 当前版本只支持在定义表的时候指定自增列,或者指定某列的默认值为nextval('seqname'), 不支持在已有表中增加自增列或者增加默认值为nextval('seqname')的列。
共100000条