华为云用户手册

  • DB_SYNONYMS DB_SYNONYMS视图显示当前用户可访问的所有同义词信息。 表1 DB_SYNONYMS字段 名称 类型 描述 owner text 同义词的所有者。 schema_name text 同义词所属模式名。 synonym_name text 同义词的名称。 table_owner text 关联对象的所有者。尽管该列称为table_owner,但它拥有的该关联对象不一定是表,可以是任何数据库通用对象,例如视图、存储过程、同义词等。 table_name text 关联对象名。尽管该列称为table_name,但此关联对象不一定是表,可以是任何数据库通用对象,例如视图、存储过程、同义词等。 table_schema_name text 关联对象所属模式名。尽管该列称为table_schema_name,但此schema下的该关联对象不一定是表,可以是任何数据库通用对象,例如视图、存储过程、同义词等。 db_link character varying(128) 保留字段,值为NULL。 origin_con_id character varying(256) 暂不支持,值为0。 父主题: 系统视图
  • STATIO_ALL_INDEXES STATIO_ALL_INDEXES视图包含数据库中的每个索引行,显示特定索引的I/O的统计。 表1 STATIO_ALL_INDEXES字段 名称 类型 描述 relid oid 索引的表的OID。 indexrelid oid 该索引的OID。 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read bigint 从索引中读取的磁盘块数。 idx_blks_hit bigint 索引命中缓存数。 父主题: Cache/IO
  • 示例 --创建表customer_demographics_t1。 gaussdb=# CREATE TABLE customer_demographics_t1 ( CD_DEMO_SK INTEGER NOT NULL, CD_GENDER CHAR(1) , CD_MARITAL_STATUS CHAR(1) , CD_EDUCATION_STATUS CHAR(20) , CD_PURCHASE_ESTIMATE INTEGER , CD_CREDIT_RATING CHAR(10) , CD_DEP_COUNT INTEGER , CD_DEP_EMPLOYED_COUNT INTEGER , CD_DEP_COLLEGE_COUNT INTEGER ) ; --插入记录。 gaussdb=# INSERT INTO customer_demographics_t1 VALUES(1920801,'M', 'U', 'DOCTOR DEGREE', 200, 'GOOD', 1, 0,0); --开启事务。 gaussdb=# START TRANSACTION; --更新字段值。 gaussdb=# UPDATE customer_demographics_t1 SET cd_education_status= 'Unknown'; --终止事务,上面所执行的更新会被撤销掉。 gaussdb=# ABORT; --查询数据。 gaussdb=# SELECT * FROM customer_demographics_t1 WHERE cd_demo_sk = 1920801; cd_demo_sk | cd_gender | cd_marital_status | cd_education_status | cd_purchase_estimate | cd_credit_rating | cd_dep_count | cd_dep_employed_count | cd_dep_college_count ------------+-----------+-------------------+----------------------+----------------------+------------------+--------------+-----------------------+---------------------- 1920801 | M | U | DOCTOR DEGREE | 200 | GOOD | 1 | 0 | 0 (1 row) --删除表。 gaussdb=# DROP TABLE customer_demographics_t1;
  • DBE_PLDEBUGGER.add_breakpoint debug端调试过程中,调用add_breakpoint增加新的断点。如果返回-1则说明指定的断点不合法,请参考DBE_PLDEBUGGER.info_code的canbreak字段确定断点合适的位置。 表1 add_breakpoint入参和返回值列表 名称 类型 描述 funcoid IN text 函数ID lineno IN integer 行号 breakpointno OUT integer 断点编号 父主题: DBE_PLDEBUGGER Schema
  • SQL调优指南 SQL调优的唯一目的是“资源利用最大化”,即CPU、内存、磁盘IO三种资源利用最大化。所有调优手段都是围绕资源使用开展的。所谓资源利用最大化是指SQL语句尽量高效,节省资源开销,以最小的代价实现最大的效益。比如做典型点查询的时候,可以用seqscan+filter(即读取每一条元组和点查询条件进行匹配)实现,也可以通过indexscan实现,显然indexscan可以以更小的代价实现相同的效果。 根据硬件资源和客户的业务特征确定合理的数据库部署方案和表定义是数据库在多数情况下满足性能要求的基础。下文的调优说明假设您已根据“软件安装”指引在安装过程中按照合理的数据库方案完成了安装,且已经根据“开发设计建议”的指引进行了数据库设计。 Query执行流程 SQL执行计划介绍 调优流程 更新统计信息 审视和修改表定义 典型SQL调优点 经验总结:SQL语句改写规则 SQL调优关键参数调整 使用Plan Hint进行调优 PLAN TRACE使用介绍 使用SQL PATCH进行调优 实际调优案例
  • SUMMARY_WORKLOAD_SQL_ELAPSE_TIME SUMMARY_WORKLOAD_SQL_ELAPSE_TIME用来统计数据库主节点上workload(业务)负载的SUID(查询/更新/插入/删除)信息。 表1 SUMMARY_WORKLOAD_SQL_ELAPSE_TIME字段 名称 类型 描述 node_name name 数据库进程名称。 workload name workload(业务负载)名称。 total_select_elapse bigint 总select的时间花费(单位:微秒)。 max_select_elapse bigint 最大select的时间花费(单位:微秒)。 min_select_elapse bigint 最小select的时间花费(单位:微秒)。 avg_select_elapse bigint 平均select的时间花费(单位:微秒)。 total_update_elapse bigint 总update的时间花费(单位:微秒)。 max_update_elapse bigint 最大update的时间花费(单位:微秒)。 min_update_elapse bigint 最小update的时间花费(单位:微秒)。 avg_update_elapse bigint 平均update的时间花费(单位:微秒)。 total_insert_elapse bigint 总insert的时间花费(单位:微秒)。 max_insert_elapse bigint 最大insert的时间花费(单位:微秒)。 min_insert_elapse bigint 最小insert的时间花费(单位:微秒)。 avg_insert_elapse bigint 平均insert的时间花费(单位:微秒)。 total_delete_elapse bigint 总delete的时间花费(单位:微秒)。 max_delete_elapse bigint 最大delete的时间花费(单位:微秒)。 min_delete_elapse bigint 最小delete的时间花费(单位:微秒)。 avg_delete_elapse bigint 平均delete的时间花费(单位:微秒)。 父主题: Workload
  • 选择数据类型 在字段设计时,基于查询效率的考虑,一般需要遵循以下原则: 尽量使用高效数据类型。 选择数值类型时,在满足业务精度的情况下,选择数据类型的优先级从高到低依次为整数、浮点数、NUMERIC。 当多个表存在逻辑关系时,表示同一含义的字段应该使用相同的数据类型。 对于字符串数据,建议使用变长字符串数据类型,并指定最大长度。请务必确保指定的最大长度大于需要存储的最大字符数,避免出现超出字段定义最大长度的异常报错而导致业务中断现象。除非明确知道数据类型为固定长度字符串,否则,不建议使用CHAR(n)、BPCHAR(n)、NCHAR(n)、CHARACTER(n)。 关于字符串类型的详细说明,请参见常用字符串类型介绍。
  • 功能描述 对表创建行访问控制策略。 当对表创建了行访问控制策略,只有打开该表的行访问控制开关(ALTER TABLE ... ENABLE ROW LEVEL SECURITY),策略才能生效。否则不生效。 当前行访问控制影响数据表的读取操作(SELECT、UPDATE、DELETE),暂不影响数据表的写入操作(INSERT、MERGE INTO)。表所有者或系统管理员可以在USING子句中创建表达式,在客户端执行数据表读取操作时,数据库后台在查询重写阶段会将满足条件的表达式拼接并应用到执行计划中。针对数据表的每一条元组,当USING表达式返回TRUE时,元组对当前用户可见,当USING表达式返回FALSE或NULL时,元组对当前用户不可见。 行访问控制策略名称是针对表的,同一个数据表上不能有同名的行访问控制策略;对不同的数据表,可以有同名的行访问控制策略。 行访问控制策略可以应用到指定的操作(SELECT、UPDATE、DELETE、ALL),ALL表示会影响SELECT、UPDATE、DELETE三种操作;定义行访问控制策略时,若未指定受影响的相关操作,默认为ALL。 行访问控制策略可以应用到指定的用户(角色),也可应用到全部用户(PUBLIC);定义行访问控制策略时,若未指定受影响的用户,默认为PUBLIC。
  • 注意事项 支持对行存表、行存分区表、unlogged表、hash表定义行访问控制策略。 不支持外表、本地临时表定义行访问控制策略。 不支持对视图定义行访问控制策略。 同一张表上可以创建多个行访问控制策略,一张表最多创建100个行访问控制策略。 系统管理员不受行访问控制影响,可以查看表的全量数据。 通过SQL语句、视图、函数、存储过程查询包含行访问控制策略的表,都会受影响。 不支持对添加了行级访问控制策略的表字段进行修改数据类型操作。
  • 参数说明 policy_name 行访问控制策略名称,同一个数据表上行访问控制策略名称不能相同。 table_name 行访问控制策略的表名。 PERMISSIVE | RESTRICTIVE PERMISSIVE指定行访问控制策略为宽容性策略,宽容性策略的条件用OR表达式拼接。 RESTRICTIVE指定行访问控制策略为限制性策略,限制性策略的条件用AND表达式拼接。拼接方式如下: (using_expression_permissive_1 OR using_expression_permissive_2 ...) AND (using_expression_restrictive_1 AND using_expression_restrictive_2 ...) 缺省值为PERMISSIVE。 command 当前行访问控制影响的SQL操作,可指定操作包括:ALL、SELECT、UPDATE、DELETE。当未指定时,ALL为默认值,涵盖SELECT、UPDATE、DELETE操作。 当command为SELECT时,SELECT类操作受行访问控制的影响,只能查看到满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括SELECT,SELECT FOR UPDATE/SHARE,UPDATE ... RETURNING,DELETE ... RETURNING。 当command为UPDATE时,UPDATE类操作受行访问控制的影响,只能更新满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括UPDATE, UPDATE ... RETURNING, SELECT ... FOR UPDATE/SHARE。 当command为DELETE时,DELETE类操作受行访问控制的影响,只能删除满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括DELETE, DELETE ... RETURNING。 行访问控制策略与适配的SQL语法关系参加下表: 表1 ROW LEVEL SECURITY策略与适配SQL语法关系 Command SELECT/ALL policy UPDATE/ALL policy DELETE/ALL policy SELECT Existing row No No SELECT FOR UPDATE/SHARE Existing row Existing row No UPDATE No Existing row No UPDATE RETURNING Existing row Existing row No DELETE No No Existing row DELETE RETURNING Existing row No Existing row role_name 行访问控制影响的数据库用户。 CURRENT_USER表示当前执行环境的用户名;SESSION_USER则表示会话用户名;当未指定时,PUBLIC为默认值,PUBLIC表示影响所有数据库用户,可以指定多个受影响的数据库用户。 系统管理员不受行访问控制特性影响。
  • 示例 --创建用户alice。 gaussdb=# CREATE USER alice PASSWORD '********'; --创建用户bob。 gaussdb=# CREATE USER bob PASSWORD '********'; --创建数据表all_data。 gaussdb=# CREATE TABLE public.all_data(id int, role varchar(100), data varchar(100)); --向数据表插入数据。 gaussdb=# INSERT INTO all_data VALUES(1, 'alice', 'alice data'); gaussdb=# INSERT INTO all_data VALUES(2, 'bob', 'bob data'); gaussdb=# INSERT INTO all_data VALUES(3, 'peter', 'peter data'); --将表all_data的读取权限赋予alice和bob用户。 gaussdb=# GRANT SELECT ON all_data TO alice, bob; --打开行访问控制策略开关。 gaussdb=# ALTER TABLE all_data ENABLE ROW LEVEL SECURITY; --创建行访问控制策略,当前用户只能查看用户自身的数据。 gaussdb=# CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER); --查看表all_data相关信息。 gaussdb=# \d+ all_data Table "public.all_data" Column | Type | Modifiers | Storage | Stats target | Description --------+------------------------+-----------+----------+--------------+------------- id | integer | | plain | | role | character varying(100) | | extended | | data | character varying(100) | | extended | | Row Level Security Policies: POLICY "all_data_rls" FOR ALL TO public USING (((role)::name = "current_user"())) Has OIDs: no Options: orientation=row, compression=no, enable_rowsecurity=true --当前用户执行SELECT操作。 gaussdb=# SELECT * FROM all_data; id | role | data ----+-------+------------ 1 | alice | alice data 2 | bob | bob data 3 | peter | peter data (3 rows) gaussdb=# EXPLAIN(COSTS OFF) SELECT * FROM all_data; QUERY PLAN ---------------------- Seq Scan on all_data (1 row) --切换至alice用户执行SELECT操作。 gaussdb=# SELECT * FROM all_data; id | role | data ----+-------+------------ 1 | alice | alice data (1 row) gaussdb=# EXPLAIN(COSTS OFF) SELECT * FROM all_data; QUERY PLAN ---------------------------------------------------------------- Seq Scan on all_data Filter: ((role)::name = 'alice'::name) Notice: This query is influenced by row level security feature (3 rows) --删除行访问控制策略。 gaussdb=# DROP ROW LEVEL SECURITY POLICY all_data_rls ON all_data; --删除数据表all_data。 gaussdb=# DROP TABLE public.all_data; --删除用户alice, bob。 gaussdb=# DROP USER alice, bob;
  • 语法格式 CREATE [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name [ AS { PERMISSIVE | RESTRICTIVE } ] [ FOR { ALL | SELECT | UPDATE | DELETE } ] [ TO { role_name | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ] USING ( using_expression )
  • 注意事项 如果没有参数,VACUUM处理当前数据库里用户拥有相应权限的每个表。如果参数指定了一个表,VACUUM只处理指定的那个表。 要对一个表进行VACUUM操作,通常用户必须是表的所有者或者被授予了指定表VACUUM权限的用户,默认系统管理员有该权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。 VACUUM不能在事务块内执行。 建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更好地选择。 不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL通常要比单纯的VACUUM收缩更多的表尺寸。FULL选项并不清理索引,所以推荐周期性的运行REINDEX命令。如果执行此命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有等其他活跃事务退出进行重试。 VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。 如果指定了VERBOSE选项,VACUUM将打印处理过程中的信息,以表明当前正在处理的表。各种有关当前表的统计信息也会打印出来。 当含有带括号的选项列表时,选项可以以任何顺序写入。如果没有括号,则选项必须按语法显示的顺序给出。 VACUUM和VACUUM FULL时,会根据参数vacuum_defer_cleanup_age延迟清理行存表记录,即不会立即清理刚刚删除的元组。 VACUUM ANALYZE先执行一个VACUUM操作,然后给每个选定的表执行一个ANALYZE。对于日常维护脚本而言,这是一个很方便的组合。 简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。 同时执行多个VACUUM FULL可能出现死锁。 如果没有打开xc_maintenance_mode参数,那么VACUUM FULL操作将跳过所有系统表。 执行DELETE后立即执行VACUUM FULL命令不会回收空间。执行DELETE后再执行1000个非SELECT事务,或者等待1s后再执行1个事务,之后再执行VACUUM FULL命令空间才会回收。 VACUUM FULL期间会对表加排他锁,不建议在业务高峰期运行VACUUM FULL,否则会导致等锁时间过长或者死锁。
  • 示例 --创建SCHEMA。 gaussdb=# CREATE SCHEMA tpcds; --创建表tpcds.reason。 gaussdb=# CREATE TABLE tpcds.reason ( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100) ); --向表中插入多条记录。 gaussdb=# INSERT INTO tpcds.reason values(1,'AAAAAAAABAAAAAAA','reason 1'),(2,'AAAAAAAABAAAAAAA','reason 2'); --在表tpcds.reason上创建索引。 gaussdb=# CREATE UNIQUE INDEX ds_reason_index1 ON tpcds.reason(r_reason_sk); --对带索引的表tpcds.reason执行VACUUM操作。 gaussdb=# VACUUM (VERBOSE, ANALYZE) tpcds.reason; --删除索引。 gaussdb=# DROP INDEX ds_reason_index1 CASCADE; gaussdb=# DROP TABLE tpcds.reason; gaussdb=# DROP SCHEMA tpcds CASCADE;
  • 语法格式 回收空间并更新统计信息,对关键字顺序无要求。 VACUUM [ ( { FULL | FREEZE | VERBOSE | {ANALYZE | ANALYSE }} [,...] ) ] [ table_name [ (column_name [, ...] ) ] [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ]; 仅回收空间,不更新统计信息。 VACUUM [ FULL [COMPACT] ] [ FREEZE ] [ VERBOSE ] [ table_name [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ]; 回收空间并更新统计信息,且对关键字顺序有要求。 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ];
  • 参数说明 FULL 选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上analyze关键字。 FREEZE 指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。 VERBOSE 为每个表打印一份详细的清理工作报告。 ANALYZE | ANALYSE 更新用于优化器的统计信息,以决定执行查询的最有效方法。 ustore分区表在autovacuum=analyze的时候也会触发vacuum。 table_name 要清理的表的名称(可以有模式修饰)。 取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。 column_name 要分析的具体的字段名称,需要配合analyze选项使用。 取值范围:要分析的具体的字段名称。缺省时为所有字段。 由于vacuum analyze语句的机制是依次执行vacuum和analyze,因此当column_name错误时存在vacuum执行成功但analyze执行失败的情况,对于分区表,则会出现对某个分区成功vacuum之后analyze失败的情况。 PARTITION COMPACT和PARTITION参数不能同时使用。 partition_name 要清理的表的一级分区名称。缺省时为所有一级分区。 subpartition_name 要清理的表的二级分区名称。缺省时为所有二级分区。
  • ADM_SCHEDULER_JOB_ARGS ADM_SCHEDULER_JOB_ARG视图显示数据库中所有任务的有关参数信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 ADM_SCHEDULER_JOB_ARGS字段 名称 类型 描述 owner character varying(128) 参数所属作业的拥有者。 job_name character varying(128) 参数所属作业名。 argument_name character varying(128) 参数名称。 argument_position numeric 参数在参数列表中的位置。 argument_type character varying(257) 参数的数据类型,可以是用户的自定义数据类型。 value character varying(4000) 参数值。 anydata_value character varying(4000) 暂不支持,值为NULL。 out_argument character varying(5) 保留字段,值为NULL。 父主题: 系统视图
  • STATIO_ALL_TABLES STATIO_ALL_TABLES视图将包含数据库中每个表(包括TOAST表)的一行,显示出特定表I/O的统计。 表1 STATIO_ALL_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表索引命中缓冲区数(如果存在)。 父主题: Cache/IO
  • 语法格式 更改操作符的所有者。 ALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } ) OWNER TO new_owner; 更改操作符的模式。 ALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } ) SET SCHEMA new_schema;
  • 示例 -- 创建角色。 gaussdb=# CREATE ROLE bob PASSWORD '********'; -- 创建外部服务器 gaussdb=# CREATE SERVER my_server FOREIGN DATA WRAPPER log_fdw; -- 创建USER MAPPING。 gaussdb=# CREATE USER MAPPING FOR bob SERVER my_server OPTIONS (user 'bob', password '********'); -- 修改USER MAPPING。 gaussdb=# ALTER USER MAPPING FOR bob SERVER my_server OPTIONS (SET password '********'); -- 删除USER MAPPING。 gaussdb=# DROP USER MAPPING FOR bob SERVER my_server; -- 删除外部服务器。 gaussdb=# DROP SERVER my_server; -- 删除角色。 gaussdb=# DROP ROLE bob;
  • 注意事项 当在OPTIONS中出现password选项时,需要保证 GaussDB 每个节点的$GAUSSHOME/bin目录下存在usermapping.key.cipher和usermapping.key.rand文件,如果不存在这两个文件,请使用gs_guc工具生成并使用gs_ssh工具发布到GaussDB每个节点的$GAUSSHOME/bin目录下。 OPTIONS中的敏感字段(如password)在使用多层引号时,语义和不带引号的场景是不同的,因此不会被识别为敏感字段进行脱敏。
  • 参数说明 user_name 要映射到外部服务器的一个现有用户的名称。 CURRENT_USER和USER匹配当前用户的名称。 当PUBLIC被指定时,一个公共映射会被创建,当没有特定用户的映射可用时将会使用它。 server_name 将为其创建用户映射的现有服务器的名称。 OPTIONS ( { option_name ' value ' } [, ...] ) 这个子句指定用户映射的选项。这些选项通常定义该映射实际的用户名和口令。选项名必须唯一。允许的选项名和值与该服务器的外部数据包装器有关。 用户的口令会加密后保存到系统表PG_USER_MAPPING中,加密时需要使用usermapping.key.cipher和usermapping.key.rand作为加密密码文件和加密因子。首次使用前需要通过如下命令创建这两个文件,并将这两个文件放入各节点目录$GAUSSHOME/bin,且确保具有读权限。gs_ssh工具可以协助您快速将文件放入各节点对应目录下。 gs_ssh -c "gs_guc generate -o usermapping -S default -D $GAUSSHOME/bin" 其中-S参数指定default时会随机生成密码,用户也可为-S参数指定密码,此密码用于保证生成密码文件的安全性和唯一性,用户无需保存或记忆。其他参数详见工具参考中gs_guc工具说明。
  • PG_NAMESPACE PG_NAMESPACE系统表存储名称空间,即存储schema相关的信息。 表1 PG_NAMESPACE字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 nspname name 名称空间的名称。 nspowner oid 名称空间的所有者。 nsptimeline bigint 在数据库节点上创建此命名空间时的时间线。此字段为内部使用,仅在数据库节点上有效。 nspacl aclitem[] 访问权限。 in_redistribution "char" 是否处于重发布状态。 nspcollation oid 名称空间的默认字符序(仅在sql_compatibility='b'时可能有值)。 父主题: 系统表
  • PG_STAT_ALL_INDEXES PG_STAT_ALL_INDEXES视图可用来查询当前数据库中的每个索引行,显示访问特定索引的统计。 索引可以通过简单的索引扫描或位图索引扫描进行使用。位图扫描中几个索引的输出可以通过AND或者OR规则进行组合,因此当使用位图扫描的时候,很难将独立堆行抓取与特定索引进行组合,因此,每一次位图扫描都会增加pg_stat_all_indexes.idx_tup_read使用索引的计数,并且增加pg_stat_all_tables.idx_tup_fetch表的计数,但不影响pg_stat_all_indexes.idx_tup_fetch。 表1 PG_STAT_ALL_INDEXES字段 名称 类型 描述 relid oid 索引所在的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引的模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 索引上开始的索引扫描数。 idx_tup_read bigint 通过索引上扫描返回的索引项数。 idx_tup_fetch bigint 使用该索引的简单索引扫描在原表中抓取的活跃表行数。 父主题: 系统视图
  • GLOBAL_SINGLE_FLUSH_DW_STATUS GLOBAL_SINGLE_FLUSH_DW_STATUS视图显示数据库所有实例单页面淘汰双写文件信息。展示内容中,/前是第一个版本双写文件刷页情况,/后是第二个版本双写文件刷页情况。 表1 GLOBAL_SINGLE_FLUSH_DW_STATUS字段 名称 类型 描述 node_name text 实例名称。 curr_dwn text 当前双写文件的序列号。 curr_start_page text 当前双写文件start位置。 total_writes text 当前双写文件总计写数据页面个数。 file_trunc_num text 当前双写文件复用的次数。 file_reset_num text 当前双写文件写满后发生重置的次数。 父主题: Utility
  • Psycopg接口参考 Psycopg接口是一套提供给用户的API方法,本节将对部分常用接口做具体描述。 psycopg2.connect() connection.cursor() cursor.execute(query,vars_list) curosr.executemany(query,vars_list) connection.commit() connection.rollback() cursor.fetchone() cursor.fetchall() cursor.close() connection.close() 父主题: 基于Psycopg开发
  • 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 * 给前面权限的授权选项 父主题: 系统表
  • 语法 RAISE语法 有以下五种语法格式: 图1 raise_format::= 图2 raise_condition::= 图3 raise_sqlstate::= 图4 raise_option::= 图5 raise::= 参数说明: level选项用于指定错误级别,有DEBUG,LOG,INFO,NOTICE,WARNING以及EXCEPTION(默认值)。EXCEPTION抛出一个正常终止当前事务的异常,其他的仅产生不同异常级别的信息。特殊级别的错误信息是否报告到客户端、写到服务器日志由log_min_messages和client_min_messages这两个GUC配置参数控制。 format:格式字符串,指定要报告的错误消息文本。格式字符串后可跟表达式,用于向消息文本中插入。在格式字符串中,%由format后面跟着的参数的值替换,%%用于打印出%。例如: --v_job_id 将替换字符串中的 %: RAISE NOTICE 'Calling cs_create_job(%)',v_job_id; option = expression:向错误报告中添加另外的信息。关键字option可以是MESSAGE、DETAIL、HINT以及ERRCODE,并且每一个expression可以是任意的字符串。 MESSAGE,指定错误消息文本,这个选项不能用于在USING前包含一个格式字符串的RAISE语句中。 DETAIL,说明错误的详细信息。 HINT,用于打印出提示信息。 ERRCODE,向报告中指定错误码(SQLSTATE)。可以使用条件名称或者直接用五位字符的SQLSTATE错误码。 condition_name:错误码对应的条件名。 sqlstate:错误码。 如果在RAISE EXCEPTION命令中既没有指定条件名也没有指定SQLSTATE,默认用RAISE EXCEPTION (P0001)。如果没有指定消息文本,默认用条件名或者SQLSTATE作为消息文本。 当由SQLSTATE指定了错误码,则不局限于已定义的错误码,可以选择任意包含五个数字或者大写的ASCII字母的错误码,而不是00000。建议避免使用以三个0结尾的错误码,因为这种错误码是类别码,会被整个种类捕获。 兼容O模式下,SQLCODE等于SQLSTATE。 图5所示的语法不接任何参数。这种形式仅用于一个BEGIN块中的EXCEPTION语句,它使得错误重新被处理。
  • V$SYSSTAT V$SYSSTAT视图显示自数据库实例启动那刻起就开始累计的全实例的资源使用情况。默认只有初始用户或监控管理员可以访问,其它用户需授予MONADMIN权限才可访问。该视图同时存在于PG_CATALOG和SYS schema下。 表1 V$SYSSTAT字段 名称 类型 描述 statistic# numeric 统计编号。 name character varying(64) 统计名称。 class numeric 暂不支持,值为NULL。 value numeric 统计值。 stat_id numeric 暂不支持,值为NULL。 con_id numeric 暂不支持,值为0。 父主题: 系统视图
  • 示例 --将tpcds.ship_mode中的数据拷贝到/home/omm/ds_ship_mode.dat文件中。 gaussdb=# COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat'; --将tpcds.ship_mode 输出到stdout。 gaussdb=# COPY tpcds.ship_mode TO stdout; --创建tpcds.ship_mode_t1表。 gaussdb=# 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。 gaussdb=# COPY tpcds.ship_mode_t1 FROM stdin; --从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1。 gaussdb=# 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个字符插入到表中。 gaussdb=# 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')。 gaussdb=# 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)。 gaussdb=# 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; --删除tpcds.ship_mode_t1。 gaussdb=# DROP TABLE tpcds.ship_mode_t1;
共100000条