华为云用户手册

  • GLOBAL_STATIO_ALL_TABLES GLOBAL_STATIO_ALL_TABLES视图将包含各节点的数据库中每个表(包括TOAST表)的I/O的统计。 表1 GLOBAL_STATIO_ALL_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
  • 字符串操作符 SQL定义了一些字符串函数,在这些函数里使用关键字而不是逗号来分隔参数。 octet_length(string) 描述:二进制字符串中的字节数。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT octet_length(E'jo\\000se'::bytea) AS RESULT; result -------- 5 (1 row) overlay(string placing string from int [for int]) 描述:替换子串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT overlay(E'Th\\000omas'::bytea placing E'\\002\\003'::bytea from 2 for 3) AS RESULT; result ---------------- \x5402036d6173 (1 row) position(substring in string) 描述:特定子字符串的位置。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT position(E'\\000om'::bytea in E'Th\\000omas'::bytea) AS RESULT; result -------- 3 (1 row) substring(string [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT substring(E'Th\\000omas'::bytea from 2 for 3) AS RESULT; result ---------- \x68006f (1 row) substr(string, from int [, for int]) 描述:截取子串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT substr(E'Th\\000omas'::bytea,2, 3) as result; result ---------- \x68006f (1 row) trim([both] bytes from string) 描述:从string的开头和结尾删除只包含bytes中字节的最长字符串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) AS RESULT; result ---------- \x546f6d (1 row)
  • 二进制字符串函数 GaussDB 也提供了函数调用所使用的常用语法。 btrim(string bytea,bytes bytea) 描述:从string的开头和结尾删除只包含bytes中字节的最长的字符串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea) AS RESULT; result ------------ \x7472696d (1 row) get_bit(string, offset) 描述:从字符串中抽取位。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT get_bit(E'Th\\000omas'::bytea, 45) AS RESULT; result -------- 1 (1 row) get_byte(string, offset) 描述:从字符串中抽取字节。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT get_byte(E'Th\\000omas'::bytea, 4) AS RESULT; result -------- 109 (1 row) set_bit(string,offset, newvalue) 描述:设置字符串中的位。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT set_bit(E'Th\\000omas'::bytea, 45, 0) AS RESULT; result ------------------ \x5468006f6d4173 (1 row) set_byte(string,offset, newvalue) 描述:设置字符串中的字节。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT set_byte(E'Th\\000omas'::bytea, 4, 64) AS RESULT; result ------------------ \x5468006f406173 (1 row) rawcmp 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:integer raweq 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawge 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawgt 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawin 描述:raw数据类型解析函数。 参数:cstring 返回值类型:bytea rawle 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlike 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlt 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawne 描述:比较raw类型是否一样。 参数:raw, raw 返回值类型:boolean rawnlike 描述:比较raw类型与模式是否不匹配。 参数:raw, raw 返回值类型:boolean rawout 描述:RAW类型的输出接口。 参数:bytea 返回值类型:cstring rawsend 描述:转换bytea为二进制类型。 参数:raw 返回值类型:bytea rawtohex 描述:raw格式转换为十六进制。 参数:text 返回值类型:text
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。这种子查询语句结构称为CTE(Common Table Expression)结构,应用这种结构时,执行计划中将存在CTE SCAN的内容。 如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。 其中with_query的详细格式为: with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( {select | values | insert | update | delete} ) with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问子查询的结果集。 column_name指定子查询结果集中显示的列名。 每个子查询可以是SELECT、VALUES、INSERT、UPDATE或DELETE语句。 用户可以使用MATERIALIZED / NOT MATERIALIZED对CTE进行修饰。 如果声明为MATERIALIZED,WITH查询将被物化,生成一个子查询结果集的拷贝,在引用处直接查询该拷贝,因此WITH子查询无法和主干SELECT语句进行联合优化(如谓词下推、等价类传递等),对于此类场景可以使用NOT MATERIALIZED进行修饰,如果WITH查询语义上可以作为子查询内联执行,则可以进行上述优化。 如果用户没有显示声明物化属性则遵守以下规则:如果CTE只在所属SELECT主干中被引用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan的方式物化执行。 plan_hint子句 以/*+ */的形式在UPDATE关键字后,用于对UPDATE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 table_name 要更新的表名,可以使用模式修饰。 取值范围:已存在的表名称。 支持使用DATABASE LINK方式对远端表进行操作,使用方式详情请见DATABASE LINK。 partition_clause 指定分区更新操作 PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } 关键字详见SELECT一节介绍 示例详见CREATE TABLE SUBPARTITION alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 table_list 一个表的表达式列表,与from_list类似,但可以同时声明目标表和关联表,仅在多表更新语法中使用。 column_name 要修改的字段名。 支持使用目标表的别名加字段名来引用这个字段。例如: UPDATE foo AS f SET f.col_name = 'namecol'; 取值范围:已存在的字段名。 expression 赋给字段的值或表达式。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 sub_query 子查询。 使用同一数据库里其他表的信息来更新一个表可以使用子查询的方法。其中SELECT子句具体介绍请参考SELECT。 在UPDATE单列时,支持使用ORDER BY子句与LIMIT子句;而在UPDATE多列时,则不支持使用ORDER BY子句与LIMIT子句。 对于UPDATE t1 SET (c1,c2) = (SELECT c1, c2 FROM t2 ...)形式的UPDATE语句,在执行计划中,对于每一个字段,会生成一个子计划。当更新字段数较多时,子计划数量较多,对性能影响较大。 from_list 一个表的表达式列表,允许在WHERE条件里使用其他表的字段。与在一个SELECT语句的FROM子句里声明表列表类似。 目标表不能出现在from_list里,除非在使用一个自连接(此时它必须以from_list的别名出现)。 condition 一个返回Boolean类型结果的表达式。只有这个表达式返回true的行才会被更新。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为Boolean值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。 WHERE CURRENT OF cursor_name 当cursor指向表的某一行时,可以使用此语法更新cursor当前指向的行。 cursor_name:指定游标的名称。 B兼容模式的数据库不支持使用此语法。 此语法仅支持普通表,不支持分区表。 仅支持在存储过程中使用。 不支持与其他WHERE条件组合使用。 不支持多表更新。 不支持与WITH、USING、ORDER BY、FROM组合使用。 CURSOR对应的SELECT语句必须声明为FOR UPDATE。 CURSOR对应的SELECT语句仅支持单表,不支持LIMIT/OFFSET,不支持带有子查询、子链接。 存储过程中声明为FOR UPDATE的CURSOR,在COMMIT/ROLLBACK后,将无法再次使用。 若CURSOR指向的行已经不存在,在A兼容性模式下将报错指定的行不存在(仅UPDATE时报错,DELETE不报错),其他兼容模式下不报错。 ORDER BY子句 关键字详见SELECT章节介绍。 LIMIT子句 关键字详见SELECT章节介绍。 output_expression 在所有需要更新的行都被更新之后,UPDATE命令用于计算返回值的表达式。 取值范围:使用任何TABLE以及FROM中列出的表的字段。*表示返回所有字段。 output_name 字段的返回名称。
  • 语法格式 单表更新: [ WITH [ RECURSIVE ] with_query [, ...] ] UPDATE [/*+ plan_hint */] [ ONLY ] table_name [ partition_clause ] [ * ] [ [ AS ] alias ] SET {column_name = { expression | DEFAULT } |( column_name [, ...] ) = {( { expression | DEFAULT } [, ...] ) |sub_query }}[, ...] [ FROM from_list] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ ORDER BY {expression [ [ ASC | DESC | USING operator ] [ LIMIT { count } ] [ RETURNING {* | {output_expression [ [ AS ] output_name ]} [, ...] }]; 多表更新: [ WITH [ RECURSIVE ] with_query [, ...] ] UPDATE [/*+ plan_hint */] table_list SET {column_name = { expression | DEFAULT } |( column_name [, ...] ) = {( { expression | DEFAULT } [, ...] ) |sub_query }}[, ...] [ FROM from_list] [ WHERE condition ]; where sub_query can be: SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] { * | {expression [ [ AS ] output_name ]} [, ...] } [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY grouping_element [, ...] ] [ HAVING condition [, ...] ] [ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ] [ LIMIT { [offset,] count | ALL } ]
  • 示例 --创建表student1。 gaussdb=# CREATE TABLE student1 gaussdb=#( gaussdb=# stuno int, gaussdb=# classno int gaussdb=#); --插入数据。 gaussdb=# INSERT INTO student1 VALUES(1,1); gaussdb=# INSERT INTO student1 VALUES(2,2); gaussdb=# INSERT INTO student1 VALUES(3,3); --查看数据。 gaussdb=# SELECT * FROM student1; --直接更新所有记录的值。 gaussdb=# UPDATE student1 SET classno = classno*2; --查看数据。 gaussdb=# SELECT * FROM student1; --删除表。 gaussdb=# DROP TABLE student1; --WHERE CURRENT OF cursor_name用例 gaussdb=# CREATE TABLE t1(c1 int, c2 varchar2) WITH (storage_type = 'ustore', fillfactor=100); -- 创建表 gaussdb=# INSERT INTO t1 VALUES(generate_series(1,1000),'abcd'); -- 插入数据 gaussdb=# DECLARE gaussdb-# CURSOR cur1 IS SELECT * FROM t1 WHERE c1 = 1 FOR UPDATE; gaussdb-# va t1%rowtype; gaussdb-# BEGIN gaussdb$# OPEN cur1; gaussdb$# FETCH cur1 INTO va; gaussdb$# UPDATE t1 SET c2 = c2 || c2 WHERE CURRENT OF cur1; -- 使用WHERE CURRENT OF cursor_name更新数据 gaussdb$# CLOSE cur1; gaussdb$# COMMIT; gaussdb$# END; gaussdb$# / gaussdb=# SELECT * FROM t1 WHERE c1 = 1; -- 查询数据 gaussdb=# DROP TABLE t1; --删除表
  • 注意事项 表的所有者、拥有表UPDATE权限的用户或拥有UPDATE ANY TABLE权限的用户,有权更新表中的数据,系统管理员默认拥有此权限。 对expression或condition条件里涉及到的任何表要有SELECT权限。 生成列不能被直接写入。在UPDATE命令中不能为生成列指定值,但是可以指定关键字DEFAULT。 对于多表更新语法,暂时不支持对视图和含有RULE的表进行多表更新。 对于子查询是stream计划的UPDATE语句,不支持并发更新同一行。 不支持用户通过update系统表的方式将数据库编码更改为GB18030_2022字符集或将GB18030_2022字符集数据库更改为其他字符编码,进行更改数据库字符编码的操作会导致存量数据和部分操作异常。若需更改数据库的字符集编码,应当遵循切库流程,进行相关的数据迁移操作。
  • 参数说明 client_master_key_name 密钥对象名。在同一命名空间下,需满足命名唯一性约束。 取值范围:字符串,需符合标识符命名规范。 KEY_STORE 外部密钥管理者。取值见表1。 KEY_PATH 由外部密钥管理者管理某个的密钥,不同密钥管理者格式不同。取值为字符串,详见表1。字符串由单引号或双引号包含,如果字符串长度超过64,则只能使用单引号包含。 ALGORITHM 密钥用于何种加密算法。取值见表1。 表1 针对不同密钥管理者的参数值 KEY_STORE KEY_PATH ALGORITHM huawei_kms 格式:‘{KmsApiUrl}/{密钥ID}' 参考:'https://kms.{项目}.myhuaweicloud.com/v1.0/{项目ID}/kms/{密钥ID}' 示例:'https://kms.cn-north-4.myhuaweicloud.com/v1.0/00000000000000000000000000000000/kms/00000000-0000-0000-0000-000000000000' AES_256
  • default_with_oids 参数说明:在没有声明WITH OIDS和WITHOUT OIDS的情况下,这个选项控制在新创建的表中CREATE TABLE和CREATE TABLE AS是否包含一个OID字段。它还决定SELECT INTO创建的表里面是否包含OID 。 不推荐在用户表中使用OID,故默认设置为off。需要带有OID字段的表应该在创建时声明WITH OIDS 。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示在新创建的表中CREATE TABLE和CREATE TABLE AS可以包含一个OID字段。 off表示在新创建的表中CREATE TABLE和CREATE TABLE AS不可以包含一个OID字段。 默认值:off
  • synchronize_seqscans 参数说明:控制启动同步的顺序扫描。在大约相同的时间内并行扫描读取相同的数据块,共享I/O负载。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示扫描可能从表的中间开始,然后选择"环绕"方式来覆盖所有的行,为了与已经在进行中的扫描活动同步。这可能会造成没有用ORDER BY子句的查询得到行排序造成不可预测的后果。 off表示确保顺序扫描是从表头开始的。 默认值:on
  • standard_conforming_strings 参数说明:控制普通字符串文本('...')中是否按照SQL标准把反斜扛当普通文本。 应用程序通过检查这个参数可以判断字符串文本的处理方式。 建议明确使用转义字符串语法(E'...')来转义字符。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示打开控制功能。 off表示关闭控制功能。 默认值:on
  • escape_string_warning 参数说明:警告在普通字符串中直接使用反斜杠转义。 如果需要使用反斜杠作为转义,可以调整为使用转义字符串语法(E'...')来做转义,因为在每个SQL标准中,普通字符串的默认行为现在将反斜杠作为一个普通字符。 这个变量可以帮助定位需要改变的代码。 使用E转义会导致部分场景下日志记录不全。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 默认值:on
  • quote_all_identifiers 参数说明:当数据库生成SQL时,此选项强制引用所有的标识符(包括非关键字)。这将影响到EXPLAIN的输出及函数的结果,例如pg_get_viewdef。详细说明请参见gs_dump的--quote-all-identifiers选项。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示打开强制引用。 off表示关闭强制引用。 默认值:off
  • backslash_quote 参数说明:控制字符串文本中的单引号是否能够用\'表示。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 在字符串文本符合SQL标准的情况下,\没有任何其他含义。这个参数影响的是如何处理不符合标准的字符串文本,包括明确的字符串转义语法是(E'...')。 取值范围:枚举类型 on表示一直允许使用\'表示。 off表示拒绝使用\'表示。 safe_encoding表示仅在客户端字符集编码不会在多字节字符末尾包含\的ASCII值时允许。 默认值:safe_encoding
  • 参数说明 config_parameter 可设置的运行时参数的名称。可用的运行时参数可以使用SHOW ALL命令查看。 value config_parameter的新值。可以声明为字符串常量、标识符、数字,或者逗号分隔的列表。DEFAULT用于把这些参数设置为它们的缺省值。 DEFAULT OFF RESET 用户指定的值:需要满足修改参数的取值限制 FROM CURRENT 取当前会话中的值设置为configuration_parameter的值。 TIME ZONE timezone 用于指定当前会话的本地时区。 取值范围:有效的本地时区。该选项对应的运行时参数名称为TimeZone,DEFAULT缺省值为PRC。 CURRENT_SCHEMA schema CURRENT_SCHEMA用于指定当前的模式。 取值范围:已存在模式名称。如果模式名不存在,会导致CURRENT_SCHEMA值为空。 SCHEMA schema 同CURRENT_SCHEMA。此处的schema是个字符串。 NAMES encoding_name 用于设置客户端的字符编码。等价于set client_encoding to encoding_name。 取值范围:有效的字符编码。该选项对应的运行时参数名称为client_encoding,默认编码为UTF8。 role_name 取值范围:字符串。要符合标识符命名规范。 password 角色的密码。要求符合密码的命名规则。 SESSION AUTHORIZATION 当前会话的用户表示符。 XML OPTION { DOCUMENT | CONTENT } 用于设置XML的解析方式。 取值范围:CONTENT(缺省)、DOCUMENT
  • 语法格式 设置会话的事务参数。 ALTER SESSION SET [ SESSION CHARACTERIS TICS AS ] TRANSACTION { ISOLATION LEVEL { READ COMMITTED } | { READ ONLY | READ WRITE } } [, ...] ; 设置会话的其他运行时参数。 ALTER SESSION SET {{config_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }} | TIME ZONE time_zone | CURRENT_SCHEMA schema | NAMES encoding_name | ROLE role_name PASSWORD 'password' | SESSION AUTHORIZATION { role_name PASSWORD 'password' | DEFAULT } | XML OPTION { DOCUMENT | CONTENT } } ;
  • 示例 下面命令定义一个新操作符:面积相等,用于box数据类型。 gaussdb=# CREATE OPERATOR === ( LEFTARG = box, RIGHTARG = box, PROCEDURE = area_equal_procedure, COMMUTATOR = ===, NEGATOR = !==, RESTRICT = area_restriction_procedure, JOIN = area_join_procedure, HASHES, MERGES );
  • 语法格式 CREATE OPERATOR name ( PROCEDURE = function_name [, LEFTARG = left_type ] [, RIGHTARG = right_type ] [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ] [, RESTRICT = res_proc ] [, JOIN = join_proc ] [, HASHES ] [, MERGES ] )
  • 参数说明 name 要定义的操作符。可用的字符见上文。其名字可以用模式修饰, 比如CREATE OPERATOR myschema.+ (...)。如果没有模式, 则在当前模式中创建操作符。同一个模式中的两个操作符可以同名, 只要同名的操作符在不同的数据类型间进行操作。这是一个重载过程。 function_name 用于实现该操作符的函数。 left_type 操作符左边的参数数据类型,如果存在的话。如果是左目操作符,这个参数可以省略。 right_type 操作符右边的参数数据类型,如果存在的话。如果是右目操作符,这个参数可以省略。 com_op 该操作符对应的交换操作符。 neg_op 该操作符对应的负操作符。 res_proc 此操作符约束选择性评估函数。 join_proc 此操作符连接选择性评估函数。 HASHES 表明此操作符支持 Hash 连接。 MERGES 表明此操作符可以支持一个融合连接。 使用OPERATOR()语法在com_op 或者其它可选参数里给出一个模式修饰的操作符名,比如: COMMUTATOR = OPERATOR(myschema.===) ,
  • V_INSTANCE V_INSTANCE视图显示当前数据库的实例信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 V_INSTANCE字段 名称 类型 描述 instance_number oid 当前数据库oid。 instance_name character varying(16) 当前数据库名。 host_name character varying(64) 主机名。 version character varying(17) 暂不支持,值为NULL。 version_legacy character varying(17) 暂不支持,值为NULL。 version_full character varying(17) 暂不支持,值为NULL。 startup_time timestamp(0) without time zone 暂不支持,值为NULL。 status character varying(12) 暂不支持,值为NULL。 parallel character varying(3) 暂不支持,值为NULL。 thread# numeric 暂不支持,值为NULL。 archiver character varying(7) 暂不支持,值为NULL。 log_switch_wait character varying(15) 暂不支持,值为NULL。 logins character varying(10) 暂不支持,值为NULL。 shutdown_pending character varying(3) 暂不支持,值为NULL。 database_status character varying(17) 暂不支持,值为NULL。 instance_role character varying(18) 暂不支持,值为NULL。 active_state character varying(9) 暂不支持,值为NULL。 blocked character varying(3) 暂不支持,值为NULL。 con_id numeric 暂不支持,值为NULL。 instance_mode character varying(11) 暂不支持,值为NULL。 edition character varying(7) 暂不支持,值为NULL。 family character varying(80) 暂不支持,值为NULL。 database_type character varying(15) 暂不支持,值为NULL。 父主题: 系统视图
  • PG_CLASS PG_CLASS系统表存储数据库对象信息及其之间的关系。 表1 PG_CLASS字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 relname name 表、索引、视图等对象的名称。 relnamespace oid 包含这个关系的名称空间的OID。 reltype oid 对应这个表的行类型的数据类型(索引为零,因为索引没有pg_type记录)。 reloftype oid 复合类型的OID,0表示其他类型。 relowner oid 关系所有者。 relam oid 如果行是索引,则就是所用的访问模式(B-tree等)。 relfilenode oid 这个关系在磁盘上的文件的名称,如果没有则为0。 reltablespace oid 这个关系存储所在的表空间。如果为零,则意味着使用该数据库的缺省表空间。如果关系在磁盘上没有文件,则这个字段没有什么意义。 relpages double precision 以页(大小为BLCKSZ)为单位的此表在磁盘上的大小,它只是优化器用的一个近似值。 reltuples double precision 表中行的数目,只是优化器使用的一个估计值。 relallvisible integer 被标识为全可见的表中的页的数量。此字段是优化器用来做SQL执行优化使用的。VACUUM、ANALYZE和一些DDL语句(例如,CREATE INDEX)会引起此字段更新。 reltoastrelid oid 与此表关联的TOAST表的OID ,如果没有则为0。 TOAST表在一个从属表里“离线”存储大字段。 reltoastidxid oid 对于TOAST表是它的索引的OID,如果不是TOAST表则为0。 relhasindex boolean 如果它是一个表而且至少有(或者最近有过)一个索引,则为真。 它是由CREATE INDEX设置的,但DROP INDEX不会立即将它清除。如果VACUUM进程检测一个表没有索引,将会把它将清理relhasindex字段,将值设置为假。 relisshared boolean 如果该表在数据库中由所有数据库共享则为真。只有某些系统表(比如pg_database)是共享的。 relpersistence "char" p:表示永久表。 u:表示非日志表。 t:表示临时表。 g:表示全局临时表。 relkind "char" r:表示普通表。 i:表示索引。 I:表示分区表GLOBAL索引。 S:表示序列。 L:表示长序列。 v:表示视图。 c:表示复合类型。 t:表示TOAST表。 f:表示外表。 m:表示物化视图。 relnatts smallint 关系中用户字段数目(除了系统字段以外)。在13.2.48 PG_ATTRIBUTE里肯定有相同数目对应行。 relchecks smallint 表里的检查约束的数目,参阅13.2.55 PG_CONSTRAINT表。 relhasoids boolean 如果为关系中每行都生成一个OID则为真,否则为假。 relhaspkey boolean 如果这个表有一个(或者曾经有一个)主键则为真,否则为假。 relhasrules boolean 如表有规则就为真。是否有规则可参考系统表13.2.90 PG_REWRITE。 relhastriggers boolean True表示表中有触发器,或者曾经有过触发器。系统表13.2.102 PG_TRIGGER中记录了表和视图的触发器。 relhassubclass boolean 如果有(或者曾经有)任何继承的子表为真,否则为假。 relcmprs tinyint 表示是否启用表的压缩特性。需要特别注意,当且仅当批量插入才会触发压缩,普通的CRUD并不能够触发压缩。 0表示其他不支持压缩的表(主要是指系统表,不支持压缩属性的修改操作)。 1表示表数据的压缩特性为NOCOMPRESS或者无指定关键字。 2表示表数据的压缩特性为COMPRESS。 relhasclusterkey boolean 是否有局部聚簇存储。 true:表示有。 false:表示没有。 relrowmovement boolean 针对分区表进行update操作时,是否允许行迁移。 true:表示允许行迁移。 false:表示不允许行迁移。 parttype "char" 表或者索引是否具有分区表的性质。 p:表示带有分区表性质。 n:表示没有分区表特性。 s:表示该表为二级分区表。 relfrozenxid xid32 该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。该字段用于跟踪此表是否需要为了防止事务ID重叠(或者允许收缩pg_clog)而进行清理。如果该关系不是表则为零(InvalidTransactionId)。 为保持前向兼容,保留此字段,新增relfrozenxid64用于记录此信息。 relacl aclitem[] 访问权限。aclitem类型说明可以参考aclitem类型。 查询的回显结果为以下形式: 1 user1=privs/user2 表示user2赋予user1的权限为privs 1 =privs/user3 表示user3赋予public角色的权限为privs 其中user1,user2和user3为数据库中已存在的用户/角色名,privs为数据库中支持的权限。权限的参数说明请参见表2。 reloptions text[] 表或索引的访问方法,使用"keyword=value"格式的字符串。 relreplident "char" 逻辑解码中解码列的标识: d = 默认 (主键,如果存在)。 n = 无。 f = 所有列。 i = 索引的indisreplident被设置或者为默认。 relfrozenxid64 xid 该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。该字段用于跟踪此表是否需要为了防止事务ID重叠(或者允许收缩pg_clog)而进行清理。如果该关系不是表则为零(InvalidTransactionId)。 对于全局临时表,该字段无实际意义。各会话的全局临时表的relfrozenxid64可在pg_catalog.pg_gtt_relstats视图中查看。 relbucket oid 当前表是否包含hash bucket分片。有效的OID指向pg_hashbucket表中记录的具体分片信息。NULL表示不包含hash bucket分片。 relbucketkey int2vector 表示hash分区列信息,NULL表示不包含。 relminmxid xid 该表中所有在这个之前的多事务ID已经被一个事务ID替换。该字段用于跟踪该表是否需要为了防止多事务ID重叠或者允许收缩pg_clog而进行清理。如果该关系不是表则为零(InvalidTransactionId)。 表2 权限的参数说明 参数 参数说明 r SELECT(读) w UPDATE(写) a INSERT(插入) d DELETE D TRUNCATE x REFEREN CES t TRIGGER X EXECUTE U USAGE C CREATE c CONNECT T TEMPORARY A ALTER P DROP m COMMENT i INDEX v VACUUM * 给前面权限的授权选项 父主题: 系统表
  • MY_SYS_PRIVS MY_SYS_PRIVS视图显示授予当前用户的系统权限信息。默认所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_SYS_PRIVS字段 名称 类型 描述 grantee character varying(128) 被授予权限的用户或角色的名称。 privilege character varying(40) 系统权限。 admin_option character varying(3) 该授权是否包含ADMIN选项。 YES:包含ADMIN选项。 NO:不包含ADMIN选项。 common character varying(3) 暂不支持,值为NULL。 inherited character varying(3) 暂不支持,值为NULL。 父主题: 系统视图
  • 示例 示例:调用系统函数。 gaussdb=# EXPLAIN SELECT * FROM generate_series(2,4); QUERY PLAN ------------------------------------------------------------------------ Function Scan on generate_series (cost=0.00..10.00 rows=1000 width=4) (1 row)
  • GLOBAL_MEMORY_NODE_DETAIL 显示当前数据库中所有正常节点下的内存使用情况。 表1 GLOBAL_MEMORY_NODE_DETAIL字段 名称 类型 描述 nodename text 节点名称。 memorytype text 内存使用的名称。 max_process_memory:数据库节点可用内存的最大值。 process_used_memory:进程所使用的内存大小。 max_dynamic_memory:最大动态内存。 dynamic_used_memory:已使用的动态内存。 dynamic_peak_memory:内存的动态峰值。 dynamic_used_shrctx:已使用的动态共享内存上下文。 dynamic_peak_shrctx:共享内存上下文的动态峰值。 max_shared_memory:最大共享内存。 shared_used_memory:已使用的共享内存。 max_sctpcomm_memory:TCP代理通信所允许使用的最大内存。 sctpcomm_used_memory:TCP代理通信已使用的内存大小。 sctpcomm_peak_memory:TCP代理通信的内存峰值。 other_used_memory:其他已使用的内存大小。 gpu_max_dynamic_memory:GPU最大动态内存。 gpu_dynamic_used_memory:GPU已使用的动态内存。 gpu_dynamic_peak_memory:GPU内存的动态峰值。 pooler_conn_memory:连接池申请内存计数。 pooler_freeconn_memory:连接池空闲连接的内存计数。 storage_compress_memory:存储模块压缩使用的内存大小。 udf_reserved_memory:UDF预留的内存大小。 memorymbytes integer 内存使用的大小,单位为MB。 父主题: Memory
  • PG_STAT_DATABASE_CONFLI CTS PG_STAT_DATABASE_CONFLICTS视图显示数据库冲突状态的统计信息。 表1 PG_STAT_DATABASE_CONFLICTS字段 名称 类型 描述 datid oid 数据库标识。 datname name 数据库名称。 confl_tablespace bigint 冲突的表空间的数目。 confl_lock bigint 冲突的锁数目。 confl_snapshot bigint 冲突的快照数目。 confl_bufferpin bigint 冲突的缓冲区数目。 confl_deadlock bigint 冲突的死锁数目。 父主题: 系统视图
  • global_streaming_hadr_rto_and_rpo_stat global_streaming_hadr_rto_and_rpo_stat视图显示流式容灾的主数据库实例和备数据库实例日志流控信息(只可在主数据库实例的主DN使用,备DN以及备数据库实例上均不可获取到统计信息)。 表1 global_streaming_hadr_rto_and_rpo_stat参数说明 参数 类型 描述 hadr_sender_node_name text 节点的名称,包含主数据库实例和备数据库实例首备。 hadr_receiver_node_name text 备数据库实例首备名称。 current_rto int 流控的信息,当前主备数据库实例的日志rto时间(单位:秒)。 target_rto int 流控的信息,目标主备数据库实例间的rto时间(单位:秒)。 current_rpo int 流控的信息,当前主备数据库实例的日志rpo时间(单位:秒)。 target_rpo int 流控的信息,目标主备数据库实例间的rpo时间(单位:秒)。 rto_sleep_time int RTO流控信息,为了达到目标rto,预期主机walsender所需要的睡眠时间(单位:微秒)。 rpo_sleep_time int RPO流控信息,为了达到目标rpo,预期主机xlogInsert所需要的睡眠时间(单位:微秒)。 父主题: RTO & RPO
  • 检索查询 对于常用的检索查询,嵌入式SQL提供了常规命令SELECT和FETCH的特殊变体。这些命令使用特殊的INTO子句,用以指定检索出来的数值存储在哪些宿主变量里。SELECT用于返回单行的查询,FETCH用于使用游标返回多行的查询。 使用SELECT /* * 假定有这个表: * CREATE TABLE test1 (a int, b varchar(50)); */ EXEC SQL BEGIN DECLARE SECTION; int v1; VARCHAR v2; EXEC SQL END DECLARE SECTION; ... EXEC SQL SELECT a, b INTO :v1, :v2 FROM test; INTO子句出现在选择列表和FROM子句之间。选择列表和INTO后面列表的元素(也叫目标列表)个数必须相同。 使用FETCH EXEC SQL BEGIN DECLARE SECTION; int v1; VARCHAR v2; EXEC SQL END DECLARE SECTION; ... EXEC SQL DECLARE foo CURSOR FOR SELECT a, b FROM test; ... do { ... EXEC SQL FETCH NEXT FROM foo INTO :v1, :v2; ... } while (...); 这里的INTO子句出现在所有SQL子句后面。 父主题: 宿主变量
  • 约束说明 job只能通过dbe_task高级包提供的接口进行创建、更新、删除操作,因为高级包的接口中会考虑所有数据库主节点间job信息的同步和pg_job与pg_job_proc表主键的关联操作,如果通过DML语句对pg_job表进行增删改,会导致job信息在数据库主节点间不一致和系统表无法关联变更的混乱问题,会严重影响job内部的管理。 由于用户创建的每个任务和数据库主节点绑定,当任务运行过程中,该数据库主节点故障,则该任务的状态无法实时刷新,仍为’r’状态,需要等数据库主节点启动正常后才能刷新为’s’状态。如果在任务未执行时数据库主节点故障,则该数据库主节点上的任务都得不到正常的调度和执行,需要人为干预让该数据库主节点恢复正常,或进行节点删除/替换、job才能正常的调度和执行。 job在定时执行过程中,需要在当前job所属的数据库主节点上实时更新该job的运行状态、最近执行开始时间、最近执行结束时间、下次开始时间、失败次数(如果job执行失败)等相关参数信息到pg_job系统表中,并同步到其他数据库主节点,保证job信息的一致性。如果其他数据库主节点存在节点故障,那么job所属数据库主节点会同步超时重发的处理,导致job执行时间变长,但数据库主节点间同步超时失败后,原数据库主节点上pg_job表中job的相关信息仍然能正常更新,且job能正常执行成功。当故障数据库主节点恢复正常后,可能出现该数据库主节点上pg_job表中当前job的执行时间、运行状态等参数与原数据库主节点上不一致的情况,需要原数据库主节点上再次执行该job后才能保证job信息的同步。 对于并发同时有多个job到达执行时间的场景,由于会为每个job创建一个线程来执行job,由于系统内部启动每个线程的时间会有延迟,因此会导致同时并发执行的job的开始时间有延迟,每个job的延迟时间在0.1ms左右。
  • 参数说明 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 如果使用该参数,则会更新分区表上的所有全局索引,以确保使用全局索引可以查询出正确的数据;如果不使用该参数,则分区表上的所有全局索引将会失效。
  • 注意事项 只有分区表的所有者或者被授予了分区表ALTER权限的用户有权限执行ALTER TABLE PARTITION命令,系统管理员默认拥有此权限。 添加分区的表空间不能是PG_GLOBAL。 添加分区的名称不能与该分区表已有分区的名称相同。 添加分区的分区键值要和分区表的分区键的类型一致。 若添加RANGE分区,添加分区键值要大于分区表中最后一个范围分区的上边界。 若添加LIST分区,添加分区键值不能与现有分区键值重复。 不支持添加HASH分区。 如果目标分区表中已有分区数达到了最大值1048575,则不能继续添加分区。 当分区表只有一个分区时,不能删除该分区。 选择分区使用PARTITION FOR(),括号里指定值个数应该与定义分区时使用的列个数相同,并且一一对应。 Value分区表不支持相应的Alter Partition操作。 间隔分区表不支持添加分区。 哈希分区表不支持切割分区,不支持合成分区,不支持添加和删除分区。 删除、切割、合并、清空、交换分区的操作会使Global索引失效,可以申明UPDATE GLOBAL INDEX子句同步更新索引。 如果删除、切割、合并、清空、交换分区操作不申明UPDATE GLOBAL INDEX子句,并发的DML业务有可能因为索引不可用而报错。 若设置参数enable_gpi_auto_update为on,即使不申明UPDATE GLOBAL INDEX子句,也会自动更新Global索引。
共100000条
提示

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