华为云用户手册

  • 注意事项 CREATE OPERATOR CLASS定义一个新的操作符类。 一个操作符类定义一种特定的数据类型如何与一种索引一起使用。操作符类声明特定的操作符可以为这种数据类型以及索引方法提供特定的角色或者 "策略"。当索引列选择定义的操作符类时,操作符类还声明索引方法使用的支持程序。所有操作符类使用的函数和操作符都必须在创建操作符类之前定义。 如果指定了模式,那么操作符类就在指定的模式中创建。 否则就在当前模式中创建。在同一个模式中的两个操作符类可以有同样的名字, 但它们必须用于不同的索引方法。 定义操作符类的用户将成为其所有者。目前,创建用户必须是超级用户。 CREATE OPERATOR CLASS 既不检查这个类定义是否包含所有索引方法需要的操作符以及函数, 也不检查这些操作符和函数是否形成一个自包含的集合。 相关的操作符类可以集合成操作符族。 添加一个新的操作符类到一个已经存在的操作符族, 在CREATE OPERATOR CLASS中指定FAMILY选项。 没有这个选项时,新建的类会放置到与它同名的族中(如果不存在则创建它)。
  • 参数说明 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 目标表的名称(可以有模式修饰)。 取值范围:已存在的表名。 partition_clause 指定分区删除操作 PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } 关键字详见SELECT一节介绍 示例详见CREATE TABLE SUBPARTITION alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 using_list using子句。 condition 一个返回Boolean值的表达式,用于判断哪些行需要被删除。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。 WHERE CURRENT OF cursor_name 当前不支持,仅保留语法接口。 LIMIT子句 关键字详见SELECT一节介绍。 output_expr DELETE命令删除行之后计算输出结果的表达式。该表达式可以使用表的任意字段。可以使用*返回被删除行的所有字段。 output_name 一个字段的输出名称。 取值范围:字符串,符合标识符命名规范。
  • 语法格式 [ WITH [ RECURSIVE ] with_query [, ...] ] DELETE [/*+ plan_hint */] [FROM] [ ONLY ] table_name [partition_clause] [ * ] [ [ AS ] alias ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ LIMIT { row_count } ] [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];
  • PG_ATTRDEF PG_ATTRDEF系统表存储列的默认值。 表1 PG_ATTRDEF字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 adrelid oid 该列的所属表。 adnum smallint 该列的数目。 adbin pg_node_tree 字段缺省值或生成表达式的内部表现形式。 adsrc text 可读缺省值或生成表达式的内部表现形式。 adgencol "char" 标识该列是否为生成列。取值为's'表示该列为生成列,取值为'\0'表示该列为普通列,默认值为'\0'。 父主题: 系统表
  • GS_LABELS GS_LABELS视图显示所有已配置的资源标签信息。需要有系统管理员或安全策略管理员权限才可以访问此视图。 表1 GS_LABELS字段 名称 类型 描述 labelname name 资源标签的名称。 labeltype name 资源标签的类型。对应系统表GS_POLICY_LABEL中的labeltype字段。 fqdntype name 数据库资源的类型。如table、schema、index等。 schemaname name 数据库资源所属的schema名称。 fqdnname name 数据库资源名称。 columnname name 数据库资源列名称,若标记的数据库资源不为表的列则该项为空。 父主题: 系统视图
  • 执行计划 以如下SQL语句为例: 1 SELECT * FROM t1, t2 WHERE t1.c1 = t2.c2; 执行EXPLAIN的输出为: 执行计划层级解读(纵向): 第一层:Seq Scan on t2 表扫描算子,用Seq Scan的方式扫描表t2。这一层的作用是把表t2的数据从buffer或者磁盘上读上来输送给上层节点参与计算。 第二层:Hash Hash算子,作用是把下层计算输送上来的算子计算hash值,为后续hash join操作做数据准备。 第三层:Seq Scan on t1 表扫描算子,用Seq Scan的方式扫描表t1。这一层的作用是把表t1的数据从buffer或者磁盘上读上来输送给上层节点参与hash join计算。 第四层:Hash Join join算子,主要作用是将t1表和t2表的数据通过hash join的方式连接,并输出结果数据。 执行计划中的主要关键字说明: 表访问方式 Seq Scan 全表顺序扫描。 Index Scan 优化器决定使用两步的规划:最底层的规划节点访问一个索引,找出匹配索引条件的行的位置,然后上层规划节点真实地从表中抓取出那些行。独立地抓取数据行比顺序地读取它们的开销高很多,但是因为并非所有表的页面都被访问了,这么做实际上仍然比一次顺序扫描开销要少。使用两层规划的原因是,上层规划节点在读取索引标识出来的行位置之前,会先将它们按照物理位置排序,这样可以最小化独立抓取的开销。 如果在WHERE里面使用的好几个字段上都有索引,那么优化器可能会使用索引的AND或OR的组合。但是这么做要求访问两个索引,因此与只使用一个索引,而把另外一个条件只当作过滤器相比,这个方法未必是更优。 根据索引排序机制的差异,索引扫描可以分为以下几类。 Bitmap Index Scan 使用位图索引抓取数据页。 Index Scan using index_name 使用简单索引搜索,该方式按照索引键的顺序在索引表中抓取数据。该方式最常用于在大数据量表中只抓取少量数据的情况,或者通过ORDER BY条件匹配索引顺序的查询,以减少排序时间。 Index-Only Scan 当需要的所有信息都包含在索引中时,仅索引扫描便可获取所有数据,不需要引用表。 Bitmap Heap Scan 从其他操作创建的位图中读取页面,过滤掉不符合条件的行。位图堆扫描可避免随机I/O,加快读取速度。 TID Scan 通过TupleID扫描表。 Index Ctid Scan 通过Ctid上的索引对表进行扫描。 CTE Scan CTE对子查询的操作进行评估并将查询结果临时存储,相当于一个临时表。CTE Scan算子对该临时表进行扫描。 Foreign Scan 从远程数据源读取数据。 Function Scan 获取函数返回的结果集,将它们作为从表中读取的行并返回。 Sample Scan 查询并返回采样数据。 Subquery Scan 读取子查询的结果。 Values Scan 作为VALUES命令的一部分读取常量。 WorkTable Scan 工作表扫描。在操作中间阶段读取,通常是使用WITH RECURSIVE声明的递归操作。 CS tore Index Ctid Scan 按照索引的条件进行扫描,返回满足条件的tid集合。 CStore Index Heap Scan 实现tid集合的交、差、并运算,并通过集合的结果获取对应元组。 表连接方式 Nested Loop 嵌套循环,适用于被连接的数据子集较小的查询。在嵌套循环中,外表驱动内表,外表返回的每一行都要在内表中检索找到它匹配的行,因此整个查询返回的结果集不能太大(不能大于10000),要把返回子集较小的表作为外表,而且在内表的连接字段上建议要有索引。 (Sonic) Hash Join 哈希连接,适用于数据量大的表的连接方式。优化器使用两个表中较小的表,利用连接键在内存中建立hash表,然后扫描较大的表并探测散列,找到与散列匹配的行。Sonic和非Sonic的Hash Join的区别在于所使用hash表结构不同,不影响执行的结果集。 Merge Join 归并连接,通常情况下执行性能差于哈希连接。如果源数据已经被排序过,在执行融合连接时,并不需要再排序,此时融合连接的性能优于哈希连接。 运算符 sort 对结果集进行排序。 filter EXPLAIN输出显示WHERE子句当作一个"filter"条件附属于顺序扫描计划节点。这意味着规划节点为它扫描的每一行检查该条件,并且只输出符合条件的行。预计的输出行数降低了,因为有WHERE子句。不过,扫描仍将必须访问所有 10000 行,因此开销没有降低;实际上它还增加了一些(确切的说,通过10000 * cpu_operator_cost)以反映检查WHERE条件的额外CPU时间。 LIMIT LIMIT限定了执行结果的输出记录数。如果增加了LIMIT,那么不是所有的行都会被检索到。 Append 合并子操作的结果。 Aggregate 将查询行产生的结果进行组合。可以是GROUPBY、UNION、SELECT DISTINCT子句等函数的组合。 BitmapAnd 位图的AND操作,通过该操作组成匹配更复杂条件的位图。 BitmapOr 位图的OR操作,通过该操作组成匹配更复杂条件的位图。 Gather 将并行线程的数据汇总。 Group 对行进行分组,以进行GROUP BY操作。 GroupAggregate 聚合GROUP BY操作的预排序行。 Hash 对查询行进行散列操作,以供父查询使用。通常用于执行JOIN操作。 HashAggregate 使用哈希表聚合GROUP BY的结果行。 Merge Append 以保留排序顺序的方式对子查询结果进行组合,可用于组合表分区中已排序的行。 Recursive Union 对递归函数的所有步骤进行并集操作。 SetOp 集合运算,如INTERSECT或EXCEPT。 Unique 从有序的结果集中删除重复项。 HashSetOp 一种用于 INTERSECT 或 EXCEPT 等集合操作的策略,它使用 Append 来避免预排序的输入。 LockRows 锁定有问题的行以阻止其他查询写入,但允许读。 Materialize 将子查询的结果存储在内存里,以方便父查询快速访问获取。 Result 在不进行扫描的情况下返回一个值(比如硬编码的值)。 WindowAgg 窗口聚合函数,一般由OVER语句触发。 Merge 归并操作。 StartWith Operator 层次查询算子,用于执行递归查询操作。 Index Cond 索引扫描条件。 Cstore Index And 实现tid集合的交运算,和CStore Index Heap Scan搭配使用。 Cstore Index Or 实现tid集合的并运算,和CStore Index Heap Scan搭配使用。 其他关键字 Partitioned 对具体分区的操作。 Partition Iterator 分区迭代器,通常代表子查询是对分区的操作。 InitPlan 非相关子计划。
  • GLOBAL_STATIO_SYS_TABLES GLOBAL_STATIO_SYS_TABLES视图显示各节点的命名空间中所有系统表的I/O状态信息。 表1 GLOBAL_STATIO_SYS_TABLES字段 名称 类型 描述 node_name name 节点名称。 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表索引命中缓冲区数(如果存在)。 父主题: Cache/IO
  • PG_TS_CONFIG PG_TS_CONFIG系统表包含表示文本搜索配置的记录。一个配置指定一个特定的文本搜索解析器和一个为了每个解析器的输出类型使用的字典的列表。 解析器在PG_TS_CONFIG记录中显示,但是字典映射的标记是由PG_TS_CONFIG_MAP里面的辅助记录定义的。 表1 PG_TS_CONFIG字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 cfgname name - 文本搜索配置名。 cfgnamespace oid PG_NAMESPACE.oid 包含这个配置的名称空间的OID。 cfgowner oid PG_AUTHID.oid 配置的所有者。 cfgparser oid PG_TS_PARSER.oid 这个配置的文本搜索解析器的OID。 cfoptions text[] - 分词相关配置选项。 父主题: 系统表
  • DB_COL_COMMENTS DB_COL_COMMENTS视图显示当前用户可访问的表中字段的注释信息。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 DB_COL_COMMENTS字段 名称 类型 描述 owner character varying(64) 表的所有者。 table_name character varying(64) 表名。 column_name character varying(64) 列名。 comments text 注释。 父主题: 系统视图
  • STAT_USER_FUNCTIONS STAT_USER_FUNCTIONS视图显示命名空间中用户自定义函数(函数语言为非内部语言)的状态信息。 表1 STAT_USER_FUNCTIONS字段 名称 类型 描述 funcid oid 函数标识。 schemaname name schema的名称。 funcname name 用户自定义函数的名称。 calls bigint 函数被调用的次数。 total_time double precision 调用此函数花费的总时间,包含调用其它函数的时间(单位:毫秒)。 self_time double precision 调用此函数自己花费的时间,不包含调用其它函数的时间(单位:毫秒)。 父主题: Object
  • 提示信息函数 report_application_error 描述:PL执行过程中,可以使用此函数来抛ERROR。 返回值类型:void 表1 report_application_error参数说明 参数 类型 说明 是否必选 log text error消息的内容。 是 code int4 error消息对应的error code,范围为:-20999 ~ -20000。 否 示例: openGauss=# CREATE OR REPLACE FUNCTION GET_RESULT_UNKNOWN( openGauss(# IN context_id int, /*context_id*/ openGauss(# IN col_type text /*col_type*/ openGauss(# )RETURNS INTEGER openGauss-# AS $$ openGauss$# BEGIN openGauss$# if col_type is NULL then openGauss$# PG_CATALOG.REPORT_APPLICATION_ERROR('invalid input for the third parameter col_type should not be null'); openGauss$# end if; openGauss$# PG_CATALOG.REPORT_APPLICATION_ERROR('UnSupport data type for column_value(context: '||context_id||', '||PG_CATALOG.QUOTE_LITERAL(col_type)||')'); openGauss$# return -1; openGauss$# END; openGauss$# $$ LANGUAGE plpgsql; CREATE FUNCTION openGauss=# CALL GET_RESULT_UNKNOWN(NULL, NULL); ERROR: invalid input for the third parameter col_type should not be null CONTEXT: SQL statement "CALL pg_catalog.report_application_error('invalid input for the third parameter col_type should not be null')" PL/pgSQL function get_result_unknown(integer,text) line 4 at PERFORM 父主题: 函数和操作符
  • 示例 --创建一个普通表。 openGauss=# CREATE TABLE my_table (c1 int, c2 int); --创建全量物化视图。 openGauss=# CREATE MATERIALIZED VIEW my_mv AS SELECT * FROM my_table; --创建增量物化视图。 openGauss=# CREATE INCREMENTAL MATERIALIZED VIEW my_imv AS SELECT * FROM my_table; --基表写入数据。 openGauss=# INSERT INTO my_table VALUES(1,1),(2,2); --对全量物化视图my_mv进行全量刷新。 openGauss=# REFRESH MATERIALIZED VIEW my_mv; --对增量物化视图my_imv进行全量刷新。 openGauss=# REFRESH MATERIALIZED VIEW my_imv; --删除增量物化视图。 openGauss=# DROP MATERIALIZED VIEW my_imv; --删除全量物化视图。 openGauss=# DROP MATERIALIZED VIEW my_mv; --删除表my_table。 openGauss=# DROP TABLE my_table;
  • GLOBAL_STATIO_USER_SEQUEN CES GLOBAL_STATIO_USER_SEQUENCES视图显示各节点的命名空间中所有用户关系表类型为序列的I/O状态信息。 表1 GLOBAL_STATIO_USER_SEQUENCES字段 名称 类型 描述 node_name name 节点名称。 relid oid 序列OID。 schemaname name 序列中模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列中缓存命中数。 父主题: Cache/IO
  • 常用方法 表1 PGReplicationConnection常用方法 方法名 返回值类型 描述 throws createReplicationSlot() ChainedCreateReplicationSlotBuilder 用于创建逻辑复制槽。 - dropReplicationSlot(String slotName) void 用于删除逻辑复制槽。 SQLException,IOException replicationStream() ChainedStreamBuilder 用户开启逻辑复制。 -
  • PGReplicationConnection的继承关系 PGReplicationConnection是逻辑复制的接口,实现类是PGReplicationConnectionImpl,该类位于com.huawei.opengauss.jdbc.replication Package中,该类的声明如下: public class PGReplicationConnection implements PGReplicationConnection
  • 执行SQL语句 通过连接对象,使用PQexec函数执行SQL查询语句。可以执行各种类型的SQL查询,例如SELECT查询、插入数据、更新数据、删除数据等。但如果同时执行多个SQL语句作为一个事务,应该使用事务控制功能,例如执行BEGIN、COMMIT、ROLLBACK 等SQL语句来控制事务的开始、提交和回滚。同时也需要注意执行SQL查询后的错误处理。 示例如下(完整示例请参考数据库建连、执行SQL并返回结果): /* * 连接成功后 * 测试实例涉及游标的使用时候必须使用事务块 * 把全部放在一个 "select * from pg_database" * PQexec() 里,过于简单,不推荐使用 */ /* 开始一个事务块 */ res = PQexec(conn, "BEGIN"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } /* * 在结果不需要的时候PQclear PGresult,以避免内存泄漏 */ PQclear(res); /* * 从系统表 pg_database(数据库的系统目录)里抓取数据 */ res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } PQclear(res); res = PQexec(conn, "FETCH ALL in myportal"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } 父主题: 开发步骤
  • MY_INDEXES MY_INDEXES视图显示当前用户的索引信息。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_INDEXES字段 名称 类型 描述 owner character varying(64) 索引的所有者。 index_name character varying(64) 索引名称。 table_name character varying(64) 索引对应的表名。 uniqueness text 表示这个索引是否为唯一索引。 partitioned character(3) 表示这个索引是否具有分区表的性质。 generated character varying(1) 表示这个索引的名称是否为系统生成。 父主题: 系统视图
  • 返回值 PQresultStatus:命令执行结果的枚举,包括: 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 PQresultStatus可以返回下面数值之一: PGRES_EMPTY_QUERY 发送给服务器的字串是空的。 PGRES_COMMAND_OK 成功完成一个不返回数据的命令。 PGRES_TUPLES_OK 成功执行一个返回数据的查询(比如SELECT或者SHOW)。 PGRES_COPY_OUT (从服务器)Copy Out (拷贝出)数据传输开始。 PGRES_COPY_IN Copy In(拷贝入)(到服务器)数据传输开始。 PGRES_BAD_RESPONSE 服务器的响应无法理解。 PGRES_NONFATAL_ERROR 发生了一个非致命错误(通知或者警告)。 PGRES_FATAL_ERROR 发生了一个致命错误。 PGRES_COPY_BOTH 拷贝入/出(到和从服务器)数据传输开始。这个特性当前只用于流复制, 所以这个状态不会在普通应用中发生。 PGRES_SINGLE_TUPLE PGresult包含一个来自当前命令的结果元组。 这个状态只在查询选择了单行模式时发生。
  • 参数 表1 SQLAllocHandle参数 关键字 参数说明 HandleType 由SQLAllocHandle分配的句柄类型。必须为下列值之一: SQL_HANDLE_ENV(环境句柄) SQL_HANDLE_DBC(连接句柄) SQL_HANDLE_STMT(语句句柄) SQL_HANDLE_DESC(描述句柄) 申请句柄顺序为,先申请环境句柄,再申请连接句柄,最后申请语句句柄,后申请的句柄都要依赖它前面申请的句柄。 InputHandle 将要分配的新句柄的类型。 如果HandleType为SQL_HANDLE_ENV,则这个值为SQL_NULL_HANDLE。 如果HandleType为SQL_HANDLE_DBC,则这一定是一个环境句柄。 如果HandleType为SQL_HANDLE_STMT或SQL_HANDLE_DESC,则它一定是一个连接句柄。 OutputHandlePtr 输出参数:一个缓冲区的指针,此缓冲区以新分配的数据结构存放返回的句柄。
  • 注意事项 当分配的句柄并非环境句柄时,如果SQLAllocHandle返回的值为SQL_ERROR,则它会将OutputHandlePtr的值设置为SQL_NULL_HDBC、SQL_NULL_HSTMT或SQL_NULL_HDESC。之后,通过调用带有适当参数的SQLGetDiagRec,其中HandleType和Handle被设置为IntputHandle的值,可得到相关的SQLSTATE值,通过SQLSTATE值可以查出调用此函数的具体信息。
  • 原型 1 2 3 4 5 6 SQLRETURN SQLGetData(SQLHSTMT StatementHandle, SQLUSMALLINT Col_or_Param_Num, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN *StrLen_or_IndPtr);
  • 参数 表1 SQLGetData参数 关键字 参数说明 StatementHandle 语句句柄,通过SQLAllocHandle获得。 Col_or_Param_Num 要返回数据的列号。结果集的列按增序从1开始编号。书签列的列号为0。 TargetType TargetValuePtr缓冲中的C数据类型的类型标识符。若TargetType为SQL_ARD_TYPE,驱动使用ARD中SQL_DESC_CONCISE_TYPE字段的类型标识符。若为SQL_C_DEFAULT,驱动根据源的SQL数据类型选择缺省的数据类型。 TargetValuePtr 输出参数:指向返回数据所在缓冲区的指针。 BufferLength TargetValuePtr所指向缓冲区的长度。 StrLen_or_IndPtr 输出参数:指向缓冲区的指针,在此缓冲区中返回长度或标识符的值。
  • GS_TOTAL_NODEGROUP_MEMORY_DETAIL GS_TOTAL_NODEGROUP_MEMORY_DETAIL返回当前数据库逻辑实例使用内存的信息,单位为MB,若GUC参数enable_memory_limit设置为off,则该视图不能使用。 表1 GS_TOTAL_NODEGROUP_MEMORY_DETAIL字段 名称 类型 描述 ngname text 逻辑实例名称。 memorytype text 内存类型,包括以下几种: ng_total_memory:该逻辑实例的总内存大小。 ng_used_memory:该逻辑实例的实际使用内存大小。 ng_estimate_memory:该逻辑实例的估算使用内存大小。 ng_foreignrp_memsize:该逻辑实例的外部资源池的总内存大小。 ng_foreignrp_usedsize:该逻辑实例的外部资源池实际使用内存大小。 ng_foreignrp_peaksize:该逻辑实例的外部资源池使用内存的峰值。 ng_foreignrp_mempct:该逻辑实例的外部资源池占该逻辑实例总内存大小的百分比。 ng_foreignrp_estmsize:该逻辑实例的外部资源池估算使用内存大小。 memorymbytes integer 内存类型分配内存的大小。 父主题: 系统视图
  • Information Schema 信息模式本身是一个名为information_schema的模式。这个模式自动存在于所有数据库中。信息模式由一组视图构成,它们包含定义在当前数据库中对象的信息。这个模式的拥有者是初始数据库用户,但是所有用户仅有使用权限,没有创建表、函数等对象的权限。 信息模式兼容PG,包括:constraint_table_usage, domain_constraints, domain_udt_usage, domains, enabled_roles, key_column_usage, parameters, referential_constraints, applicable_roles, administrable_role_authorizations, attributes, character_sets, check_constraint_routine_usage, check_constraints, collations, collation_character_set_applicability, column_domain_usage, column_privileges, column_udt_usage, columns, constraint_column_usage, role_column_grants, routine_privileges, role_routine_grants, routines, schemata, sequences, table_constraints, table_privileges, role_table_grants, tables, triggered_update_columns, triggers, udt_privileges, role_udt_grants, usage_privileges, role_usage_grants, user_defined_types, view_column_usage, view_routine_usage, view_table_usage, views, data_type_privileges, element_types, column_options, foreign_data_wrapper_options, foreign_data_wrappers, foreign_server_options, foreign_servers, foreign_table_options, foreign_tables, user_mapping_options, user_mappings, sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles。 下面章节只显示未在上述描述内的视图信息。 _PG_FOREIGN_DATA_WRAPPERS _PG_FOREIGN_SERVERS _PG_FOREIGN_TABLE_COLUMNS _PG_FOREIGN_TABLES _PG_USER_MAPPINGS INFORMATION_SCHEMA_CATALOG_NAME 父主题: Schema
  • 注意事项 当参数enable_copy_server_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable_copy_server_files打开时,允许具有SYSADMIN权限的用户或继承了内置角色gs_role_copy_files权限的用户执行,但默认禁止对数据库配置文件,密钥文件,证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。同时enable_copy_server_files打开时,管理员可以通过guc参数safe_data_path设置普通用户可以导入导出的路径必须为设置路径的子路径,未设置此guc参数时候(默认情况),不对普通用户使用的路径进行拦截。 COPY只能用于表,不能用于视图。 COPY TO需要读取的表的select权限,COPY FROM需要插入的表的INSERT权限。 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为那些字段插入缺省值。 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(\.)表示输入结束。 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。 数据的结束可以用一个只包含反斜杠和句点(\.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。 COPY FROM中\N为空字符串,如果要输入实际数据值\N ,使用\\N。
  • 示例 --创建SCHEMA。 openGauss=# CREATE SCHEMA tpcds; --创建tpcds.ship_mode表。 openGauss=# CREATE TABLE tpcds.ship_mode ( SM_SHIP_MODE_SK INTEGER NOT NULL, SM_SHIP_MODE_ID CHAR(16) NOT NULL, SM_TYPE CHAR(30) , SM_CODE CHAR(10) , SM_CARRIER CHAR(20) , SM_CONTRACT CHAR(20) ) ; --向tpcds.ship_mode表插入一条数据。 openGauss=# INSERT INTO tpcds.ship_mode VALUES (1,'a','b','c','d','e'); --将tpcds.ship_mode中的数据复制到/home/omm/ds_ship_mode.dat文件中。 openGauss=# COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat'; --将tpcds.ship_mode 输出到STDOUT。 openGauss=# COPY tpcds.ship_mode TO STDOUT; --将tpcds.ship_mode 的数据输出到STDOUT,使用参数如下:分隔符为','(delimiter ','),编码格式为UTF8(encoding 'utf8')。 openGauss=# COPY tpcds.ship_mode TO STDOUT WITH (delimiter ',', encoding 'utf8'); --将tpcds.ship_mode 的数据输出到STDOUT,使用参数如下:导入格式为CSV(format 'CSV'),引号包围SM_SHIP_MODE_SK字段的导出内容(force_quote(SM_SHIP_MODE_SK))。 openGauss=# COPY tpcds.ship_mode TO STDOUT WITH (format 'CSV', force_quote(SM_SHIP_MODE_SK)); --创建tpcds.ship_mode_t1表。 openGauss=# CREATE TABLE tpcds.ship_mode_t1 ( SM_SHIP_MODE_SK INTEGER NOT NULL, SM_SHIP_MODE_ID CHAR(16) NOT NULL, SM_TYPE CHAR(30) , SM_CODE CHAR(10) , SM_CARRIER CHAR(20) , SM_CONTRACT CHAR(20) ) ; --从STDIN复制数据到表tpcds.ship_mode_t1。 openGauss=# COPY tpcds.ship_mode_t1 FROM STDIN; --从/home/omm/ds_ship_mode.dat文件复制数据到表tpcds.ship_mode_t1。 openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat'; --从/home/omm/ds_ship_mode.dat文件复制数据到表tpcds.ship_mode_t1,应用TRANSFORM表达式转换,取SM_TYPE列左边10个字符插入到表中。 openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' TRANSFORM (SM_TYPE AS LEFT(SM_TYPE, 10)); --从/home/omm/ds_ship_mode.dat文件复制数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为TEXT(format 'text'),分隔符为'\t'(delimiter E'\t'),忽略多余列(ignore_extra_data 'true'),不指定转义(noescaping 'true')。 openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' WITH(format 'text', delimiter E'\t', ignore_extra_data 'true', noescaping 'true'); --从/home/omm/ds_ship_mode.dat文件复制数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header)。 openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' FIXED FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)) header ignore_extra_data; --删除表和SCHEMA。 openGauss=# DROP TABLE tpcds.ship_mode; openGauss=# DROP TABLE tpcds.ship_mode_t1; openGauss=# DROP SCHEMA tpcds;
  • 语法格式 从一个文件拷贝数据到一个表。 COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | STDIN } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ LOG ERRORS ] [ REJECT LIMIT 'limit' ] [ WITH ( option [, ...] ) ] | copy_option | TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ) | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [ copy_option [ ...] ] 的无冲突项可以任意排列组合。 把一个表的数据拷贝到一个文件。 COPY table_name [ ( column_name [, ...] ) ] TO { 'filename' | STDOUT } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ WITH ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY query {(SELECT) | (VALUES)} TO { 'filename' | STDOUT } [ WITHOUT ESCAPING ] [ WITH ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY TO语法形式约束如下: (query)与[USING] DELIMITERS不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定[USING] DELIMITERS语法子句。 对于FIXED FORMATTER语法后面跟随的copy_option是以空格进行分隔的。 copy_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [ copy_option [ ...] ] 的无冲突项可以任意排列组合。 其中可选参数option子句语法为: FORMAT 'format_name' | OIDS [ boolean ] | DELIMITER 'delimiter_character' | NULL 'null_string' | HEADER [ boolean ] | USEEOF [ boolean ] | FILEHEADER 'header_file_string' | FREEZE [ boolean ] | QUOTE 'quote_character' | ESCAPE 'escape_character' | EOL 'newline_character' | NOESCAPING [ boolean ] | FORCE_QUOTE { ( column_name [, ...] ) | * } | FORCE_NOT_NULL ( column_name [, ...] ) | ENCODING 'encoding_name' | IGNORE_EXTRA_DATA [ boolean ] | FILL_MISSING_FIELDS [ boolean ] | COMPATIBLE_ILLEGAL_CHARS [ boolean ] | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string' 其中可选参数copy_option子句语法为: OIDS | NULL 'null_string' | HEADER | USEEOF | FILEHEADER 'header_file_string' | FREEZE | FORCE_NOT_NULL column_name [, ...] | FORCE_QUOTE { column_name [, ...] | * } | BINARY | CSV | QUOTE [ AS ] 'quote_character' | ESCAPE [ AS ] 'escape_character' | EOL 'newline_character' | ENCODING 'encoding_name' | IGNORE_EXTRA_DATA | FILL_MISSING_FIELDS [ { 'one' | 'multi' } ] | COMPATIBLE_ILLEGAL_CHARS | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string' | SKIP int_number | WHEN { ( start - end ) | column_name } { = | != } 'string' | SEQUENCE ( { column_name ( integer [, incr] ) [, ...] } ) | FILLER ( { column_name [, ...] } ) | CONSTANT ( { column_name 'constant_string' [, ...] } )
  • GLOBAL_TRANSACTIONS_PREPARED_XA CTS 显示数据库主节点当前准备好进行两阶段提交的事务的信息汇总。 表1 GLOBAL_TRANSACTIONS_PREPARED_XACTS字段 名称 类型 描述 transaction xid 预备事务的数字事务标识。 gid text 赋予该事务的全局事务标识。 prepared timestamp with time zone 事务准备好提交的时间。 owner name 执行该事务的用户的名称。 database name 执行该事务所在的数据库名。 父主题: Transaction
  • 自治事务 自治事务(Autonomous Transaction),在主事务执行过程中新启的独立的事务。自治事务的提交和回滚不会影响主事务已提交的数据,同时自治事务也不受主事务影响。 自治事务在存储过程、函数、匿名块和package中定义,用PRAGMA AUTONOMOUS_TRANSACTION关键字来声明。 存储过程支持自治事务 匿名块支持自治事务 函数支持自治事务 Package支持自治事务 规格约束
  • ADM_HIST_SQLSTAT ADM_HIST_SQLSTAT视图描述当前节点的执行语句的信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。 表1 ADM_HIST_SQLSTAT字段 名称 类型 描述 INSTANCE_NUMBER integer 快照的实例编号。 SQL_ID bigint 查询标识。 PLAN_HASH_VALUE bigint 归一化SQL ID。 MODULE text 包含第一次解析 SQL 语句时正在执行的模块的名称。 ELAPSED_TIME_DELTA bigint 有效的DB时间花费,多线程将累加(单位:微秒)。 CPU_TIME_DELTA bigint CPU时间(单位:微秒)。 EXECUTIONS_DELTA integer 自从它被带入库缓存以来在此对象上发生的执行次数增量。 IOWAIT_DELTA bigint I/O上的时间花费(单位:微秒)。 APWAIT_DELTA integer 应用程序等待时间的Delta值。 ROWS_PROCESSED_DELTA bigint SELECT返回的结果集行数。 SNAP_ID integer 唯一快照ID。 父主题: 系统视图
共100000条
提示

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