华为云用户手册

  • 注意事项 清除(PURGE)操作支持:表(PURGE TABLE)、索引(PURGE INDEX)、回收站(PURGE RECYCLEBIN)。 执行PURGE操作的权限要求如下: PURGE TABLE:用户必须是表的所有者,且用户必须拥有表所在模式的USAGE权限,系统管理员默认拥有此权限。 PURGE INDEX:用户必须是索引的所有者,用户必须拥有索引所在模式的USAGE权限,系统管理员默认拥有此权限。 PURGE RECYCLEBIN:普通用户只能清理回收站中当前用户拥有的对象,且用户必须拥有对象所在模式的USAGE权限,系统管理员默认可以清理回收站所有对象。
  • 示例 -- 创建角色tpcds。 gaussdb=# CREATE ROLE tpcds IDENTIFIED BY '*********'; -- 创建表空间reason_table_space gaussdb=# CREATE TABLESPACE REASON_TABLE_SPACE1 owner tpcds RELATIVE location 'tablespace/tsp_reason1'; -- 创建SCHEMA。 gaussdb=# CREATE SCHEMA tpcds; -- 在表空间创建表tpcds.reason_t1 gaussdb=# CREATE TABLE tpcds.reason_t1 ( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100) ) with(storage_type=ustore) tablespace reason_table_space1; -- 在表空间创建表tpcds.reason_t2 gaussdb=# CREATE TABLE tpcds.reason_t2 ( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100) ) with(storage_type=ustore) tablespace reason_table_space1; -- 在表空间创建表tpcds.reason_t3 gaussdb=# CREATE TABLE tpcds.reason_t3 ( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100) ) with(storage_type=ustore) tablespace reason_table_space1; -- 对表tpcds.reason_t1创建索引 gaussdb=# CREATE INDEX index_t1 on tpcds.reason_t1(r_reason_id); gaussdb=# DROP TABLE tpcds.reason_t1; gaussdb=# DROP TABLE tpcds.reason_t2; gaussdb=# DROP TABLE tpcds.reason_t3; --查看回收站 gaussdb=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN; rcyname | rcyoriginname | rcytablespace -----------------------+---------------+--------------- BIN$16409$2CEE988==$0 | reason_t1 | 16408 BIN$16412$2CF2188==$0 | reason_t2 | 16408 BIN$16415$2CF2EC8==$0 | reason_t3 | 16408 BIN$16418$2CF3EC8==$0 | index_t1 | 0 (4 rows) --PURGE清除表 gaussdb=# PURGE TABLE tpcds.reason_t3; gaussdb=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN; rcyname | rcyoriginname | rcytablespace -----------------------+---------------+--------------- BIN$16409$2CEE988==$0 | reason_t1 | 16408 BIN$16412$2CF2188==$0 | reason_t2 | 16408 BIN$16418$2CF3EC8==$0 | index_t1 | 0 (3 rows) --PURGE清除索引 gaussdb=# PURGE INDEX tpcds.index_t1; gaussdb=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN; rcyname | rcyoriginname | rcytablespace -----------------------+---------------+--------------- BIN$16409$2CEE988==$0 | reason_t1 | 16408 BIN$16412$2CF2188==$0 | reason_t2 | 16408 (2 rows) --PURGE清除回收站所有对象 gaussdb=# PURGE recyclebin; gaussdb=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN; rcyname | rcyoriginname | rcytablespace -----------------------+---------------+--------------- (0 rows) -- 删除SCHEMA。 gaussdb=# DROP SCHEMA tpcds CASCADE;
  • MY_IND_EXPRESSIONS MY_IND_EXPRESSIONS视图显示当前用户下基于函数的表达式索引的信息。所有用户都可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 MY_IND_EXPRESSIONS字段 名称 类型 描述 table_owner character varying(64) 表的所有者。 table_name character varying(64) 表名。 index_owner character varying(64) 索引的所有者。 index_name character varying(64) 索引名。 column_expression text 定义列的基于函数的索引表达式。 column_position smallint 索引中列的位置。 父主题: 系统视图
  • 查询规划 介绍查询优化器方法配置、开销常量、规划算法以及一些配置参数。 优化器中涉及的两个参数: INT_MAX数据类型INT的最大值,其值为2147483647。 DBL_MAX数据类型FLOAT的最大值。 全局设置查询规划相关参数除了客户业务外也会对数据库自身运维和监控业务造成影响,如WDR报告生成、扩容、重分布、数据导入导出等。 优化器方法配置 优化器开销常量 基因查询优化器 其他优化器选项 父主题: GUC参数说明
  • GLOBAL_TRANSACTIONS_RUNNING_XA CTS 显示集群中各个节点运行事务的信息。 表1 GLOBAL_TRANSACTIONS_RUNNING_XACTS字段 名称 类型 描述 handle integer 事务在GTM对应的句柄。 gxid xid 事务id号。 state tinyint 事务状态(3:prepared或者0:starting)。 node text 节点名称。 xmin xid 节点上当前数据涉及的最小事务号xmin。 vacuum boolean 标志当前事务是否是lazy vacuum事务。 timeline bigint 标志数据库重启次数。 prepare_xid xid 处于prepared状态的事务的id号,若不在prepared状态,值为0。 pid bigint 事务对应的线程id。 next_xid xid CN传给DN的事务id号。 父主题: Transaction
  • PG_PREPARED_STATEMENTS PG_PREPARED_STATEMENTS视图显示当前会话所有可用的预备语句的信息。 表1 PG_PREPARED_STATEMENTS字段 名称 类型 描述 name text 预备语句的标识符。 statement text 创建该预备语句的查询字符串。对于从SQL创建的预备语句而言是客户端提交的PREPARE语句;对于通过前/后端协议创建的预备语句而言是预备语句自身的文本。 prepare_time timestamp with time zone 创建该预备语句的时间戳。 parameter_types regtype[] 该预备语句期望的参数类型,以regtype类型的数组格式出现。与该数组元素相对应的OID可以通过把regtype转换为OID值得到。 from_sql boolean 如果该预备语句是通过PREPARE语句创建的则为true。 如果是通过前/后端协议创建的则为false。 父主题: 系统视图
  • 数组类型的使用 数组类型的使用示例如下: -- 创建有数组类型列的表,并插入一些数据 gaussdb=# CREATE TABLE orders ( name varchar, items varchar[] ); gaussdb=# INSERT INTO orders VALUES('a', ARRAY['苹果', '橘子', '梨']); gaussdb=# INSERT INTO orders VALUES('b', ARRAY['矿泉水', '可乐', '雪碧']); gaussdb=# INSERT INTO orders VALUES('c', ARRAY['鼠标', '键盘', '耳机']); gaussdb=# INSERT INTO orders VALUES('d', '{白菜, 土豆, 茄子}'); -- 查询数据 gaussdb=# SELECT * FROM orders ORDER BY name; name | items ------+-------------------- a | {苹果,橘子,梨} b | {矿泉水,可乐,雪碧} c | {鼠标,键盘,耳机} d | {白菜,土豆,茄子} (4 rows) -- 访问数组元素 gaussdb=# SELECT items[1] FROM orders ORDER BY name; items -------- 苹果 矿泉水 鼠标 白菜 (4 rows) -- 访问元素超过范围或者访问下标为NULL时会返回NULL gaussdb=# SELECT items[4] FROM orders ORDER BY name; items ------- (4 rows) gaussdb=# SELECT items[null] FROM orders ORDER BY name; items ------- (4 rows) -- 访问子数组 gaussdb=# SELECT items[1:2] FROM orders ORDER BY name; items --------------- {苹果,橘子} {矿泉水,可乐} {鼠标,键盘} {白菜,土豆} (4 rows) -- 更新整个数组 gaussdb=# UPDATE orders SET items = ARRAY['香蕉', '西瓜', '草莓'] WHERE name = 'a'; gaussdb=# SELECT items FROM orders WHERE name = 'a'; items ------------------ {香蕉,西瓜,草莓} (1 row) -- 更新数组的元素 gaussdb=# UPDATE orders SET items[1] = '芒果' WHERE name = 'a'; gaussdb=# SELECT items FROM orders WHERE name = 'a'; items ------------------ {芒果,西瓜,草莓} (1 row) -- 更新数组的元素片段 gaussdb=# UPDATE orders SET items[1:2] = ARRAY['电脑', '手机'] WHERE name = 'c'; gaussdb=# SELECT items FROM orders WHERE name = 'c'; items ------------------ {电脑,手机,耳机} (1 row) -- 添加数组元素,位于原数组最后一个元素和这个新元素之间的未赋值元素为NULL gaussdb=# UPDATE orders SET items[4] = '显示器' WHERE name = 'c'; gaussdb=# SELECT items FROM orders WHERE name = 'c'; items ------------------------- {电脑,手机,耳机,显示器} (1 row) gaussdb=# UPDATE orders SET items[6] = '显示器2' WHERE name = 'c'; gaussdb=# SELECT items FROM orders WHERE name = 'c'; items -------------------------------------- {电脑,手机,耳机,显示器,NULL,显示器2} (1 row)
  • 数组类型的字符串输出 一个数组值的输出表现形式由该数组元素类型的输出再加上一些标明该数组结构的修饰组成。这些修饰由围绕在数组值周围的花括号(“{ ”和“}”)加上相邻项之间的分隔字符组成。在多维数组里, 每个维都有自己级别的花括号,并且在同级相邻的花括号项之间包含分隔符。 数组类型数据包含特殊字符(下述说明中的字符),字符串输出示例: gaussdb=# SELECT ARRAY['{', '}', 'hello, world', '"', '\', ' ', NULL] AS RESULT; array ---------------------------------------------- {"{","}","hello, world","\"","\\"," ",NULL} (1 row) 对于数组字符串常量输出,如果数组元素值是空字符串或者包含花括号、分隔符、双引号、反斜杠、空白 或者元素为NULL,则这些元素输出时会输出双引号中,双引号和反斜杠则会被反斜杠转义额外输出一个反斜杠。与字符串常量输入相对应。
  • 数组类型的字符串输入 要把一个数组值写成一个文字常数(常量输入),将元素值用花括号包围并用逗号分隔。因此,一个数组常量的一般格式如下: '{ val1 delim val2 delim ... }' 上述格式中的delim是元素类型的分隔符,记录在类型的pg_type表的typdelim列中。每个val可以是数组元素类型的一个常量,也可以是一个子数组。示例如下: gaussdb=# SELECT '{1, 2, 3}'::int[] AS RESULT; result --------- {1,2,3} (1 row) gaussdb=# SELECT '{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}'::int[] AS RESULT; result --------------------------- {{1,2,3},{4,5,6},{7,8,9}} (1 row) 在任意元素值周围可以使用双引号,并且在元素值包含逗号或花括号等一些特殊字符时必须使用双引号。示例如下: gaussdb=# SELECT '{" ", "NULL", null, "\\", "{", "}", ","}'::varchar[] AS RESULT; result ------------------------------------ {" ","NULL",NULL,"\\","{","}",","} (1 row) -- 该示例表示有一个varchar类型的数组,且一共有7个varchar元素,元素依次为: 1、包含一个空格的字符串 2、值为“NULL”的字符串 3、字符串为NULL 4、有一个\字符的字符串 5、有一个{字符的字符串 6、有一个}字符的字符串 7、有一个,字符的字符串 对于数组字符串常量输入,如果数组元素值是空字符串或者包含花括号、分隔符、双引号、反斜杠、空白或者匹配关键字NULL。则这些元素输入需要使用双引号,在元素值里包含的双引号和反斜杠时需要额外添加一个反斜杠。 关键字NULL不区分大小写。 输入会自动跳过没有使用双引号的空白。 一般不建议使用字符常量的方式构造数组数据,推荐使用ARRAY构造器。
  • 数组类型的定义 一个数组数据类型一般通过在数组元素的数据类型名称后面加上方括号([])来命名。 示例一,创建一个名为sal_emp的表,它有一个表示雇员姓名类型为text的列(name),一个表示雇员季度工资的数组且元素类型为integer的列(pay_by_quarter),一个表示雇员手机号码的数组且元素类型为varchar(11)的列(phone_numbers): gaussdb=# CREATE TABLE sal_emp ( name text, pay_by_quarter integer[], phone_numbers varchar(11)[] ); gaussdb=# DROP TABLE sal_emp; 示例二,其他方式定义一个数组类型,具体定义方法和定义行为参考示例中的注释: gaussdb=# CREATE TABLE sal_emp ( name text, pay_by_quarter1 integer[][], -- int类型的二维数组 pay_by_quarter2 integer[3], -- int类型的一维数组,尺寸大小为3 pay_by_quarter3 integer[3][3], -- int类型的二维数组,每一维尺寸大小为3 pay_by_quarter4 integer ARRAY, -- int类型的一维数组 pay_by_quarter5 integer ARRAY[3] -- int类型的一维数组,尺寸大小为3 ); gaussdb=# DROP TABLE sal_emp; 数组的维数定义功能并不生效(不影响运行时的行为),建议采用示例一的方式定义数组类型,并且不建议使用多维数组数据。 数组的尺寸定义功能并不生效(不影响运行时的行为),建议采用示例一的方式定义数组类型。 允许的数组数据维数最大为6。 数组元素个数限制如下: 元素个数最大为134217727个。 所有元素加起来最大存储空间不超过1GB - 1字节即1073741823字节。
  • 数组构造器 数组构造器是一个能构建数组值的表达式。简单的数组构造器由关键词ARRAY、“[”、用于数组元素值的表达式列表(用逗号分隔)以及最后的“]”组成。示例如下: gaussdb=# SELECT ARRAY[1, 2, 3 + 4]; array --------- {1,2,7} (1 row) 默认情况下,数组的元素类型是成员表达式的公共类型,使用和UNION或CASE结构(UNION,CASE和相关构造)相同的规则决定。可以通过显式类型转换将数组构造为想要的数据类型,示例如下: gaussdb=# SELECT ARRAY[1, 2, 3]::varchar[]; array --------- {1,2,3} (1 row) gaussdb=# SELECT ARRAY['a', 'b', 'c']; array --------- {a,b,c} (1 row) gaussdb=# SELECT ARRAY['a', 'b', 'c']::int[]; ERROR: invalid input syntax for integer: "a" LINE 1: select ARRAY['a', 'b', 'c']::int[]; ^ CONTEXT: referenced column: array gaussdb=# SELECT ARRAY[1::int, 'b', 'c']; ERROR: invalid input syntax for integer: "b" LINE 1: select ARRAY[1::int, 'b', 'c']; ^ CONTEXT: referenced column: array 除预置的基础类型外,record类型和表类型也可以定义其数组类型,示例: gaussdb=# CREATE TYPE rec IS (c1 int, c2 int); gaussdb=# SELECT ARRAY[(1, 1), (2, 2)]::rec[]; array ------------------- {"(1,1)","(2,2)"} (1 row) gaussdb=# CREATE TABLE tab (c1 int, c2 int); gaussdb=# SELECT ARRAY[(1, 1), (2, 2)]::tab[]; array ------------------- {"(1,1)","(2,2)"} (1 row) gaussdb=# DROP TYPE rec; gaussdb=# DROP TABLE tab; 因为数组必须得有类型,因此在构造一个空数组时,必须明确的将其构造成需要的类型,示例: gaussdb=# SELECT ARRAY[]::int[]; array ------- {} (1 row) 我也可以从子查询的结果中构造一个数组。此时, 数组构造器是关键字ARRAY后跟着用圆括号括起来的子查询,子查询必须只返回一个单独的字段。生成的一维数组将为子查询里每行结果生成一个元素, 元素类型匹配子查询的输出字段。示例: gaussdb=# SELECT ARRAY(select generate_series(1, 6)); array --------------- {1,2,3,4,5,6} (1 row) 多维数组值可以通过嵌套数组构造器的方法来制作。内层构造器中的ARRAY关键字可以省略。比如,下面两个示例是同样的结果: gaussdb=# SELECT ARRAY[ARRAY[1,2], ARRAY[3,4]]; array --------------- {{1,2},{3,4}} (1 row) gaussdb=# SELECT ARRAY[[1,2], [3,4]]; array --------------- {{1,2},{3,4}} (1 row) 同层的内层构造器必须生成同维的子数组。 任何应用于外层ARRAY构造器的类型转换自动的应用到所有的内层构造器。
  • 优化说明 此优化的核心就是消除子查询。分析业务场景发现a.ca_address_sk不为null,那么从SQL语义出发,可以等价改写SQL为: 1 2 3 4 5 select count(*) from customer_address_001 a4, customer_address_001 a where a4.ca_address_sk = a.ca_address_sk group by a.ca_address_sk; 为了保证改写的等效性,在customer_address_001. ca_address_sk加了not null约束。
  • ADM_SCHEDULER_RUNNING_JOBS ADM_SCHEDULER_RUNNING_JOBS视图显示数据库中所有正在执行的DBE_SCHEDULER定时任务的信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS schema下。 表1 ADM_SCHEDULER_RUNNING_JOBS字段 名称 类型 描述 owner character varying(128) 定时任务所有者。 job_name character varying(128) 定时任务名。 job_subname character varying(128) 暂不支持,值为NULL。 job_style character varying(17) 定时任务行为模式,创建时指定,仅支持指定为“REGULAR”,不指定时为NULL。 detached character varying(5) 暂不支持,值为NULL。 session_id numeric 执行该定时任务的会话ID。 slave_process_id numeric 暂不支持,值为NULL。 slave_os_process_id character varying(12) 执行该任务的进程号。 running_instance numeric 暂不支持,值为NULL。 resource_consumer_group character varying(32) 暂不支持,值为NULL。 elapsed_time interval day to second(2) 定时任务本次已执行的时长。 cpu_used interval day to second(2) 暂不支持,值为NULL。 destination_owner character varying(261) 暂不支持,值为NULL。 destination character varying(261) 定时任务目标名称。 credential_name character varying(128) 定时任务证书名称。 credential_owner character varying(128) 暂不支持,值为NULL。 log_id numeric 暂不支持,值为NULL。 父主题: 系统视图
  • GLOBAL_STATIO_ALL_SEQUEN CES GLOBAL_STATIO_ALL_SEQUENCES包含各节点的数据库中每个序列的每一行,显示特定序列关于I/O的统计。 表1 GLOBAL_STATIO_ALL_SEQUENCES字段 名称 类型 描述 node_name name 节点名称。 relid oid 序列OID。 schemaname name 序列中模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列中缓存命中数。 父主题: Cache/IO
  • pagewriter_sleep 参数说明:设置用于增量检查点打开后,pagewriter线程每隔pagewriter_sleep的时间刷一批脏页下盘。当脏页占据shared_buffers的比例达到dirty_page_percent_max时,每批页面数量以设定的max_io_capacity计算出的值刷页,其余情况每批页面数量按比例相对减少。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0~3600000(毫秒) 默认值:2000ms(2s)
  • max_io_capacity 参数说明:设置后端写进程批量刷页每秒的I/O上限,需要根据具体业务场景和机器磁盘I/O能力进行设置。要求RTO很短时间或者数据量比共享内存大多倍的情况,业务访问数据量又是随机访问时,该值不宜过小。该参数设置较小会减小后端写进程刷页个数,如果业务触发页面淘汰多时,该值设置小会影响业务。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,30720~10485760。单位是KB。 默认值:512000KB(500MB)
  • bgwriter_delay 参数说明:设置后端写进程写"脏"共享缓冲区之间的时间间隔。每一次,后端写进程都会为一些脏的缓冲区发出写操作,全量checkpoint模式用bgwriter_lru_maxpages参数控制每次写的量,然后休眠bgwriter_delay毫秒后才再次启动;增量checkpoint模式下,根据设定candidate_buf_percent_target计算目标空闲缓冲页面个数,不足时每隔bgwriter_delay毫秒刷一批页面下盘,刷页个数根据目标差距百分比计算,会根据max_io_capacity限制最大数量。 在许多系统上,休眠延时的有效分辨率是10毫秒。因此,设置一个不是10的倍数的数值与把它设置为下一个10的倍数是一样的效果。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,10~10000,单位为毫秒。 默认值:2s 设置建议:在数据写压力比较大的场景中可以尝试减小该值以降低checkpoint的压力。
  • bgwriter_lru_multiplier 参数说明:通过与已使用缓存区数目的乘积评估下次服务器需要的缓存区数目。 写“脏”缓存区到磁盘的数目取决于服务器最近几次使用的缓存区数目。最近的buffers数目的平均值乘以bgwriter_lru_multiplier是为了评估下次服务器进程需要的buffers数目。在有足够多的干净的、可用的缓存区之前,后端写进程会一直写“脏”缓存区的(每次写的缓存区数目不会超过bgwriter_lru_maxpages的值)。 设置bgwriter_lru_multiplier的值为1.0表示一种“实时”策略,其作用是精准预测下次写“脏”缓冲区的数目。设置为较大的值可以应对突然的需求高峰,而较小的值则可以让服务器进程执行更多的写操作。 设置较小的bgwriter_lru_maxpages和bgwriter_lru_multiplier会减小后端写进程导致的额外I/O开销,但是服务器进程必须自己发出写操作,增加了对查询的响应时间。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:浮点型,0~10。 默认值:2
  • 调试 用户可以根据自己的需要,通过修改实例数据目录下的postgresql.conf文件中特定的配置参数来控制日志的输出,从而更好的了解数据库的运行状态。 可调整的配置参数请参见表1。 表1 配置参数 参数名称 描述 取值范围 备注 client_min_messages 配置发送到客户端信息的级别。 DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 LOG NOTICE WARNING ERROR FATAL PANIC 默认值:NOTICE。 设置级别后,发送到客户端的信息包含所设级别及以下所有低级别会发送的信息。级别越低,发送的信息越少。 log_min_messages 配置写到服务器日志里信息的级别。 DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 INFO NOTICE WARNING ERROR LOG FATAL PANIC 默认值:WARNING。 指定某一级别后,写到日志的信息包含所有更高级别会输出的信息。级别越高,服务器日志的信息越少。 log_min_error_statement 配置写到服务器日志中错误SQL语句的级别。 DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 INFO NOTICE WARNING ERROR FATAL PANIC 缺省值:ERROR。 所有导致一个特定级别(或者更高级别)错误的SQL语句都将记录在服务器日志中。 只有系统管理员可以修改该参数。 log_min_duration_statement 配置语句执行持续的最短时间。如果某个语句的持续时间大于或者等于设置的毫秒数,则会在日志中记录该语句及其持续时间。打开这个选项可以方便地跟踪需要优化的查询。 INT类型。 默认值:-1。 单位:毫秒。 设置为-1表示关闭这个功能。 只有系统管理员可以修改该参数。 log_connections/log_disconnections 配置是否在每次会话连接或结束时向服务器日志里打印一条信息。 on:每次会话连接或结束时向日志里打印一条信息。 off:每次会话连接或结束时不向日志里打印信息。 默认值:off。 - log_duration 配置是否记录每个已完成语句的持续时间。 on:记录每个已完成语句的持续时间。 off:不记录已完成语句的持续时间。 默认值:off。 只有系统管理员可以修改该参数。 log_statement 配置日志中记录哪些SQL语句。 none:不记录任何SQL语句。 ddl:记录数据定义语句。 mod:记录数据定义语句和数据操作语句。 all :记录所有语句。 默认值: none。 只有系统管理员可以修改该参数。 log_hostname 配置是否记录主机名。 on:记录主机名。 off:不记录主机名。 默认值:off。 缺省时,连接日志只记录所连接主机的IP地址。打开这个选项会同时记录主机名。 该参数同时影响查看审计结果、PG_STAT_ACTIVITY和GUC参数log_line_prefix。 上表有关参数级别的说明请参见表2。 表2 日志级别参数说明 级别 说明 DEBUG[1-5] 提供开发人员使用的信息。5级为最高级别,依次类推,1级为最低级别。 INFO 提供用户隐含要求的信息。如在VACUUM VERBOSE过程中的信息。 NOTICE 提供可能对用户有用的信息。如长标识符的截断,作为主键一部分创建的索引。 WARNING 提供给用户的警告。如在事务块范围之外的COMMIT。 ERROR 报告导致当前命令退出的错误。 LOG 报告一些管理员感兴趣的信息。如检查点活跃性。 FATAL 报告导致当前会话终止的原因。 PANIC 报告导致所有会话退出的原因。 父主题: 应用程序开发教程
  • 数据类型 数据类型是数据的一个基本属性,用于区分不同类型的数据。不同的数据类型所占的存储空间不同,能够进行的操作也不相同。数据库中的数据存储在数据表中。数据表中的每一列都定义了数据类型,用户存储数据时,须遵从这些数据类型的属性,否则可能会出错。 GaussDB 支持某些数据类型间的隐式转换,具体转换关系请参见PG_CAST。 数值类型 货币类型 布尔类型 字符类型 二进制类型 日期/时间类型 几何类型 网络地址类型 位串类型 UUID类型 JSON/JSONB类型 HLL数据类型 范围类型 对象标识符类型 伪类型 XML类型 XMLTYPE类型 aclitem类型 数组类型 父主题: SQL参考
  • 示例 --创建一个无用的外部数据封装器dummy。 gaussdb=# CREATE FOREIGN DATA WRAPPER dummy; --创建一个带有处理器函数file_fdw_handler 的外部数据封装器file。 gaussdb=# CREATE FOREIGN DATA WRAPPER file HANDLER file_fdw_handler; --创建一个带有一些选项的外部数据封装器mywrapper。 gaussdb=# CREATE FOREIGN DATA WRAPPER mywrapper OPTIONS (debug 'true');
  • 参数说明 name 要创建的外部数据封装器的名字 HADNLER handler_function handler_function是先前已经注册了的函数的名字,用来为外部表检索执行函数。 处理器函数必须没有参数,并且它的返回类型必须为fdw_handler。 不用处理器函数创建外部数据封装器是可能的,但是使用这种封装器的外部表只能被声明,不能被访问。 VALIDATOR validator_function validator_function 是先前已经注册了的函数的名字用来检查提供给外部数据封装器的通用选项, 还有使用该外部数据封装器的外部服务器、用户映射和外部表的选项。 如果没有验证器函数或声明了NO VALIDATOR, 那么在创建时将不检查选项。(外部数据封装器可能在运行时忽略或拒绝无效的选项说明, 取决于实现。)验证器函数必须接受两个参数:一个类型为text[], 将包含存储在系统目录中的选项的数组,一个类型为oid, 是包含这些选项的系统目录的OID。忽略返回类型;该函数应该使用 ereport(ERROR)函数报告无效选项。 OPTIONS ( option 'value' [, ... ] ) 这个子句为新的外部数据封装器声明选项。允许的选项名和值是特定于每个外部数据封装器的, 并且是经过外部数据封装器的验证器函数验证了的。选项名必须是唯一的。
  • PG_STAT_XACT_SYS_TABLES PG_STAT_XACT_SYS_TABLES视图显示命名空间中系统表的事务状态信息。 表1 PG_STAT_XACT_SYS_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更新行数(比如没有更新所需的单独索引)。 父主题: 系统视图
  • 参数说明 schema_name 现有模式的名称。 取值范围:已存在的模式名。 RENAME TO new_name 修改模式的名称。 new_name:模式的新名称。 模式名不能和当前数据库里其他的模式重名。 模式名不能和当前数据库的初始用户重名。 模式的名称不可以“pg_”开头。 模式的名称不可以“gs_role_”开头。 取值范围:字符串,要符合标识符命名规范。 OWNER TO new_owner 修改模式的所有者。非系统管理员要改变模式的所有者,该用户还必须是新的所有角色的直接或间接成员, 并且该成员必须在此数据库上有CREATE权限。 new_owner:模式的新所有者。 取值范围:已存在的用户名/角色名。
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 --创建模式ds。 gaussdb=# CREATE SCHEMA ds; --将当前模式ds更名为ds_new。 gaussdb=# ALTER SCHEMA ds RENAME TO ds_new; --创建用户jack。 gaussdb=# CREATE USER jack PASSWORD '********'; --将DS_NEW的所有者修改为jack。 gaussdb=# ALTER SCHEMA ds_new OWNER TO jack; --删除用户jack和模式ds_new。 gaussdb=# DROP SCHEMA ds_new; gaussdb=# DROP USER jack;
  • 注意事项 只有模式的所有者或者被授予了模式ALTER权限的用户有权限执行ALTER SCHEMA命令,系统管理员默认拥有此权限。但要修改模式的所有者,当前用户必须是该模式的所有者或者系统管理员,且该用户是新所有者角色的成员。 对于除public以外的系统模式,如pg_catalog、sys等,只允许初始用户修改模式的所有者。修改系统自带模式的名称可能会导致部分功能不可用甚至影响数据库正常运行,默认情况下不允许修改系统自带模式的名称,考虑到前向兼容性,仅允许当系统在启动或升级过程中或参数allow_system_table_mods为on时修改。 只有初始用户可以将schema的属主修改为运维管理员,其他用户无法将schema的属主修改为运维管理员。
  • DB_TAB_STATS_HISTORY DB_TAB_STATS_HISTORY视图显示表统计信息涉及的表、分区和子分区以及执行收集表统计信息的时间。所有用户都可以访问该视图。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_TAB_STATS_HISTORY字段 名称 类型 描述 owner character varying(128) 对象的拥有者。 table_name character varying(128) 表名。 partition_name character varying(128) 暂不支持,值为NULL。 subpartition_name character varying(128) 暂不支持,值为NULL。 stats_update_time timestamp(6) with time zone 统计信息更新的时间,数据库重启后,数据会丢失。 父主题: 系统视图
  • PG_STATIO_ALL_INDEXES PG_STATIO_ALL_INDEXES视图可用来查询当前数据库中的每个索引行的信息,显示特定索引的I/O的统计信息。 表1 PG_STATIO_ALL_INDEXES字段 名称 类型 描述 relid oid 索引的表的OID。 indexrelid oid 该索引的OID。 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read bigint 从索引中读取的磁盘块数。 idx_blks_hit bigint 索引命中缓存数。 父主题: 系统视图
  • PG_STAT_USER_INDEXES PG_STAT_USER_INDEXES视图显示数据库中用户自定义普通表和toast表的索引状态信息。 表1 PG_STAT_USER_INDEXES字段 名称 类型 描述 relid oid 该索引所在的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引的模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 索引上开始的索引扫描数。 idx_tup_read bigint 该索引上扫描返回的索引项数。 idx_tup_fetch bigint 使用该索引的简单索引扫描在原表中抓取的活跃行数。 父主题: 系统视图
  • 检查隐式转换的性能问题 在某些场景下,数据类型的隐式转换可能会导致潜在的性能问题。请看如下的场景: SET enable_fast_query_shipping = off; CREATE TABLE t1(c1 VARCHAR, c2 VARCHAR); CREATE INDEX on t1(c1); EXPLAIN verbose SELECT * FROM t1 WHERE c1 = 10; 上述查询的执行计划如下: c1的数据类型是varchar,当查询的过滤条件为c1 = 10时,优化器默认将c1隐式转换为bigint类型,导致两个后果: 不能进行DN裁剪,计划下发到所有DN上执行。 计划中不能使用Index Scan方式扫描数据。 这会引起潜在的性能问题。 当知道了问题原因后,我们可以做针对性的SQL改写。对于上面的场景,只要将过滤条件中的常量显示转换为varchar类型,结果如下: EXPLAIN verbose SELECT * FROM t1 WHERE c1 = 10::varchar; 为了提前识别隐式类型转换可能带来的性能影响,我们提供了一个guc option:check_implicit_conversions。打开该参数后,对于查询中出现的隐式类型转换的索引列,在路径生成阶段进行检查,如果发现索引列没有生成候选的索引扫描路径,则会通过报错的形式提示给用户。举例如下: SET check_implicit_conversions = on; SELECT * FROM t1 WHERE c1 = 10; ERROR: There is no optional index path for index column: "t1"."c1". 参数check_implicit_conversions只用于检查隐式类型转换引起的潜在性能问题,在正式生产环境中请关闭该参数(该参数默认关闭)。 在将check_implicit_conversions打开时,必须同时关闭enable_fast_query_shipping参数,否则由于后一个参数的作用,无法查看对隐式类型转换修复的结果。 一个表的候选路径可能包括seq scan和index scan等多个可能的数据扫描方式,最终执行计划使用的表扫描方式是由执行计划的代价来决定的,因此即使生成了索引扫描的候选路径,也可能生成的最终执行计划中使用其它扫描方式。 父主题: SQL调优指南
共100000条