华为云用户手册

  • SUMMARY_STATIO_SYS_SEQUENCES SUMMARY_STATIO_SYS_SEQUENCES视图显示集群内汇聚的命名空间中所有系统序列的I/O状态信息。 表1 SUMMARY_STATIO_SYS_SEQUENCES字段 名称 类型 描述 schemaname name 序列中模式名。 relname name 序列名。 blks_read numeric 从序列中读取的磁盘块数。 blks_hit numeric 序列中缓存命中数。 父主题: Cache/IO
  • 示例 --向gs_global_config系统表中插入单个弱口令。 gaussdb=# CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('password1'); --向gs_global_config系统表中插入多个弱口令。 gaussdb=# CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('password2'),('password3'); --清空gs_global_config系统表中所有弱口令。 gaussdb=# DROP WEAK PASSWORD DICTIONARY; --查看现有弱口令。 gaussdb=# SELECT * FROM gs_global_config WHERE NAME LIKE 'weak_password';
  • GLOBAL_CONFIG_SETTINGS GLOBAL_CONFIG_SETTINGS显示各节点数据库运行时参数的相关信息。 表1 GLOBAL_CONFIG_SETTINGS的字段 名称 类型 描述 node_name text 节点名称。 name text 参数名称。 setting text 参数当前值。 unit text 参数的隐式结构。 category text 参数的逻辑组。 short_desc text 参数的简单描述。 extra_desc text 参数的详细描述。 context text 设置参数值的上下文,包括internal,postmaster,sighup,backend,superuser,user。 vartype text 参数类型,包括bool,enum,integer,real,string。 source text 参数的赋值方式。 min_val text 参数最小值。如果参数类型不是数值型,那么该字段值为null。 max_val text 参数最大值。如果参数类型不是数值型,那么该字段值为null。 enumvals text[] enum类型参数合法值。如果参数类型不是enum型,那么该字段值为null。 boot_val text 数据库启动时参数默认值。 reset_val text 数据库重置时参数默认值。 sourcefile text 设置参数值的配置文件。如果参数不是通过配置文件赋值,那么该字段值为null。 sourceline integer 设置参数值的配置文件的行号。如果参数不是通过配置文件赋值,那么该字段值为null。 父主题: Configuration
  • 语法格式 向用户组中添加用户。 1 2 ALTER GROUP group_name ADD USER user_name [, ... ]; 从用户组中删除用户。 1 2 ALTER GROUP group_name DROP USER user_name [, ... ]; 修改用户组的名称。 1 2 ALTER GROUP group_name RENAME TO new_name;
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 --创建用户组。 gaussdb=# CREATE GROUP super_users WITH PASSWORD "*********"; --创建用户。 gaussdb=# CREATE ROLE lche WITH PASSWORD "*********"; --创建用户。 gaussdb=# CREATE ROLE jim WITH PASSWORD "*********"; --向用户组中添加用户。 gaussdb=# ALTER GROUP super_users ADD USER lche, jim; --从用户组中删除用户。 gaussdb=# ALTER GROUP super_users DROP USER jim; --修改用户组的名称。 gaussdb=# ALTER GROUP super_users RENAME TO normal_users; --删除用户。 gaussdb=# DROP ROLE lche, jim; --删除用户组。 gaussdb=# DROP GROUP normal_users;
  • GS_CLIENT_GLOBAL_KEYS GS_CLIENT_GLOBAL_KEYS系统表记录密态等值特性中客户端加密主密钥相关信息,每条记录对应一个客户端加密主密钥。 表1 GS_CLIENT_GLOBAL_KEYS字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 global_key_name name 客户端加密主密钥(cmk)名称。 key_namespace oid 包含此客户端加密主密钥(cmk)的命名空间OID。 key_owner oid 客户端加密主密钥(cmk)的所有者。 key_acl aclitem[] 创建该密钥时所拥有的访问权限。 create_date timestamp without time zone 创建密钥的时间。 父主题: 系统表
  • 选择分区方案 当表中的数据量很大时,应当对表进行分区,一般需要遵循以下原则: 使用具有明显区间性的字段进行分区,比如日期、区域等字段上建立分区。 分区名称应当体现分区的数据特征。例如,关键字+区间特征。 将分区上边界的分区值定义为MAXVALUE,以防可能出现的数据溢出。 表2 表的分区方式及使用场景 分区方式 描述 Range 表数据通过范围进行分区。 List 表数据通过指定列按照具体值进行分区。 Hash 表数据通过Hash散列方式进行分区。 典型的分区表定义如下: 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 31 32 33 34 35 36 37 38 39 --创建Range分区表 CREATE TABLE staffS_p1 ( staff_ID NUMBER(6) not null, FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), EMAIL VARCHAR2(25), PHONE_NUMBER VARCHAR2(20), HIRE_DATE DATE, employment_ID VARCHAR2(10), SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(4,2), MANAGER_ID NUMBER(6), section_ID NUMBER(4) ) PARTITION BY RANGE (HIRE_DATE) ( PARTITION HIRE_19950501 VALUES LESS THAN ('1995-05-01 00:00:00'), PARTITION HIRE_19950502 VALUES LESS THAN ('1995-05-02 00:00:00'), PARTITION HIRE_maxvalue VALUES LESS THAN (MAXVALUE) ); --创建List分区表 CREATE TABLE test_list (col1 int, col2 int) partition by list(col1) ( partition p1 values (2000), partition p2 values (3000), partition p3 values (4000), partition p4 values (5000) ); --创建Hash分区表 CREATE TABLE test_hash (col1 int, col2 int) partition by hash(col1) ( partition p1, partition p2 ); 更多的表分区语法信息请参见CREATE TABLE PARTITION。
  • 选择分布键 分布表的分布键选择至关重要,如果分布键选择不当,可能会导致数据倾斜,从而导致查询时,I/O负载集中在部分DN上,影响整体查询性能。因此,在确定分布表的分布策略之后,需要对表数据进行倾斜性检查,以确保数据的均匀分布。分布键的选择一般需要遵循以下原则: 选作分布键的字段取值应该比较离散,以便数据能在各个DN上均匀分布。当单个字段无法满足离散条件时,可以考虑使用多个字段一起作为分布键。一般情况下,可以考虑选择表的主键作为分布键。例如,在人员信息表中选择证件号码作为分布键。 在满足第一条原则的情况下,尽量不要选取在查询中存在常量过滤条件的字段作为分布键。例如,在表dwcjk相关的查询中,字段zqdh存在常量过滤条件“zqdh='000001'”,那么尽量不选择zqdh字段作为分布键。 在满足前两条原则的情况,尽量选择查询中的关联条件为分布键。当关联条件作为分布键时,join任务的相关数据都分布在DN本地,将极大减少DN之间的数据流动代价。
  • 选择分布方案 表的分布方式的选择如表1所示。 表1 表的分布方式及使用场景 分布方式 描述 适用场景 Hash 表数据通过Hash方式散列到集群中的所有DN上。 数据量较大的事实表。 Replication 集群中每一个DN都有一份全量表数据。 维度表、数据量较小的事实表。 Range 表数据对指定列按照范围进行映射,分布到对应DN。 用户需要自定义分布规则的场景。 List 表数据对指定列按照具体值进行映射,分布到对应DN。 用户需要自定义分布规则的场景。 典型的分布表定义如下: 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 --定义一个表,表中每行存在所有DN中。 CREATE TABLE warehouse_d1 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) )DISTRIBUTE BY REPLICATION; --定义一个表,使用HASH分布。 CREATE TABLE warehouse_d2 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2), CONSTRAINT W_CONSTR_KEY3 UNIQUE(W_WAREHOUSE_SK) )DISTRIBUTE BY HASH(W_WAREHOUSE_SK); --定义一个表,使用RANGE分布 CREATE TABLE warehouse_d3 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) )DISTRIBUTE BY RANGE(W_WAREHOUSE_ID) ( SLICE s1 VALUES LESS THAN (10) DATANODE dn1, SLICE s2 VALUES LESS THAN (20) DATANODE dn2, SLICE s3 VALUES LESS THAN (30) DATANODE dn3, SLICE s4 VALUES LESS THAN (MAXVALUE) DATANODE dn4 ); --定义一个表,使用LIST分布 CREATE TABLE warehouse_d4 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) )DISTRIBUTE BY LIST(W_COUNTRY) ( SLICE s1 VALUES ('USA') DATANODE dn1, SLICE s2 VALUES ('CANADA') DATANODE dn2, SLICE s3 VALUES ('UK') DATANODE dn3, SLICE s4 VALUES (DEFAULT) DATANODE dn4 );
  • 删除表中数据 在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。 SQL不能直接访问独立的行,只能通过声明被删除行匹配的条件进行。如果表中有一个主键,用户可以指定准确的行。用户可以删除匹配条件的一组行或者一次删除表中的所有行。 使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录。 1 gaussdb=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869; 如果执行如下命令之一,会删除表中所有的行。 1 gaussdb=# DELETE FROM customer_t1; 或: 1 gaussdb=# TRUNCATE TABLE customer_t1; 全表删除的场景下,建议使用TRUNCATE,不建议使用DELETE。 删除创建的表。 1 gaussdb=# DROP TABLE customer_t1; 父主题: 创建和管理表
  • GS_STAT_ALL_PARTITIONS GS_STAT_ALL_PARTITIONS视图包含当前数据库中所有分区表每个分区的信息,每个分区各占一行,显示该分区访问情况的统计信息,此视图信息通过gs_stat_get_all_partitions_stats()函数查询。 表1 GS_STAT_ALL_PARTITIONS字段 名称 类型 描述 partition_oid oid 分区的OID。 schemaname name 该分区所在表的模式名。 relname name 该分区所在表的表名。 partition_name name 该分区所在一级分区名。 sub_partition_name 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 热更新行数(比如没有更新所需的单独索引)。 n_live_tup bigint 估计活跃行数。 n_dead_tup bigint 估计非活跃行数。 last_vacuum timestamp with time zone 该分区最后一次被清理的时间。 last_autovacuum timestamp with time zone 该分区最后一次被autovacuum守护线程清理的时间。 last_analyze timestamp with time zone 该分区最后一次被分析的时间。 last_autoanalyze timestamp with time zone 该分区最后一次被autovacuum守护线程分析的时间。 vacuum_count bigint 该分区被清理的次数。 autovacuum_count bigint 该分区被autovacuum守护线程清理的次数。 analyze_count bigint 该分区被分析的次数。 autoanalyze_count bigint 该分区被autovacuum守护线程分析的次数。 父主题: 系统视图
  • SUMMARY_STATIO_SYS_INDEXES SUMMARY_STATIO_SYS_INDEXES视图显示集群内汇聚的命名空间中所有系统表索引的I/O状态信息。 表1 SUMMARY_STATIO_SYS_INDEXES字段 名称 类型 描述 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read numeric 从索引中读取的磁盘块数。 idx_blks_hit numeric 索引命中缓存数。 父主题: Cache/IO
  • Wait Classes by Total Wait Time Wait Classes by Total Wait Time列名称及描述如下表所示。 表1 Wait Classes by Total Wait Time报表主要内容 列名称 描述 Type Wait Event类别名称: STATUS。 LWLOCK_EVENT。 LOCK_EVENT。 IO_EVENT。 Waits Wait次数。 Total Wait Time(us) 总Wait时间(微秒)。 Avg Wait Time(us) 平均Wait时间(微秒)。 父主题: WDR报告信息介绍
  • java.sql.Driver java.sql.Driver是数据库驱动接口。 表1 对java.sql.Driver的支持情况 方法名 返回值类型 支持JDBC 4 acceptsURL(String url) Boolean Yes connect(String url, Properties info) Connection Yes jdbcCompliant() Boolean Yes getMajorVersion() int Yes getMinorVersion() int Yes getParentLogger() Logger Yes getPropertyInfo(String url, Properties info) DriverPropertyInfo[] Yes 父主题: JDBC接口参考
  • 示例 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 31 CREATE OR REPLACE PROCEDURE proc_case_branch(pi_result in integer, pi_return out integer) AS BEGIN CASE pi_result WHEN 1 THEN pi_return := 111; WHEN 2 THEN pi_return := 222; WHEN 3 THEN pi_return := 333; WHEN 6 THEN pi_return := 444; WHEN 7 THEN pi_return := 555; WHEN 8 THEN pi_return := 666; WHEN 9 THEN pi_return := 777; WHEN 10 THEN pi_return := 888; ELSE pi_return := 999; END CASE; raise info 'pi_return : %',pi_return ; END; / CALL proc_case_branch(3,0); --删除存储过程 DROP PROCEDURE proc_case_branch;
  • PG_RLSPOLICY PG_RLSPOLICY系统表存储行级访问控制策略。 表1 PG_RLSPOLICY字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 polname name 行级访问控制策略的名称。 polrelid oid 行级访问控制策略作用的表对象oid。 polcmd "char" 行级访问控制策略影响的SQL操作。 polpermissive boolean 行级访问控制策略的属性。 t:表达式OR条件拼接。 f:表达式AND条件拼接。 polroles oid[] 行级访问控制策略影响的用户oid列表,不指定表示影响所有的用户。 polqual pg_node_tree 行级访问控制策略的表达式。 父主题: 系统表
  • PG_TABLES PG_TABLES视图可用来查询对数据库中每个表的有用信息。 表1 PG_TABLES字段 名称 类型 引用 描述 schemaname name PG_NAMESPACE.nspname 表的模式名。 tablename name PG_CLASS.relname 表名。 tableowner name pg_get_userbyid(PG_CLASS.relowner) 表的所有者。 tablespace name PG_TABLESPACE.spcname 包含表的表空间,默认为NULL。 hasindexes boolean PG_CLASS.relhasindex 如果表上有索引(或者最近拥有)则为TRUE,否则为FALSE。 hasrules boolean PG_CLASS.relhasruls 如果表上有规则,则为TRUE,否则为FALSE。 hastriggers boolean PG_CLASS.RELHASTRIGGERS 如果表上有触发器,则为TRUE,否则为FALSE。 tablecreator name pg_get_userbyid(PG_OBJECT.creator) 表的创建者。 created timestamp with time zone PG_OBJECT.ctime 表的创建时间。 last_ddl_time timestamp with time zone PG_OBJECT.mtime 最后一次对该表执行DDL操作的时间。 父主题: 系统视图
  • 调优手段之统计信息 GaussDB优化器是典型的基于代价的优化 (Cost-Based Optimization,简称CBO)。在这种优化器模型下,数据库根据表的元组数、字段宽度、NULL记录比率、distinct值、MCV值、HB值等表的特征值,以及一定的代价计算模型,计算出每一个执行步骤的不同执行方式的输出元组数和执行代价(cost),进而选出整体执行代价最小/首元组返回代价最小的执行方式进行执行。这些特征值就是统计信息。从上面描述可以看出统计信息是查询优化的核心输入,准确的统计信息将帮助优化器选择最合适的查询规划,一般来说我们通过analyze语法收集整个表或者表的若干个字段的统计信息,周期性地运行ANALYZE,或者在对表的大部分内容做了更改之后马上运行它是个好习惯。
  • 调优手段之GUC参数 查询优化的主要目的是为查询语句选择高效的执行方式。 如下SQL语句: 1 2 select count(1) from customer inner join store_sales on (ss_customer_sk = c_customer_sk); 在执行customer inner join store_sales的时候,GaussDB支持Nested Loop、Merge Join和Hash Join三种不同的Join方式。优化器会根据表customer和表store_sales的统计信息估算结果集的大小以及每种Join方式的执行代价,然后对比选出执行代价最小的执行计划。 正如前面所说,执行代价计算都是基于一定的模型和统计信息进行估算,当因为某些原因代价估算不能反映真实的cost的时候,我们就需要通过GUC参数设置的方式让执行计划倾向更优规划。例如:random_page_cost参数表示优化器计算一次非顺序抓取磁盘页面的开销,该参数默认值为4。当机器磁盘随机读取的速度较快时,比如SSD设备,可以将该参数的值适当调小,更改后,索引扫描的代价降低,生成计划时更倾向于选择索引扫描的方式。
  • REPLICATION_SLOTS REPLICATION_SLOTS视图用于查看复制槽的信息。 表1 REPLICATION_SLOTS字段 名称 类型 描述 slot_name text 复制槽的名称。 plugin text 逻辑复制槽对应的输出插件名称。 slot_type text 复制槽的类型。 physical:物理复制槽。 logical:逻辑复制槽。 datoid oid 复制槽所在的数据库OID。 database name 复制槽所在的数据库名称。 active boolean 复制槽是否为激活状态。 t(true):表示是。 f(false):表示不是。 xmin xid 数据库须为复制槽保留的最早事务的事务号。 catalog_xmin xid 数据库须为逻辑复制槽保留的最早的涉及系统表的事务的事务号。 restart_lsn text 复制槽需要的最早xlog的物理位置。 dummy_standby boolean 预留参数。 父主题: Utility
  • ROLE_SYS_PRIVS ROLE_SYS_PRIVS视图显示授予角色的系统特权信息,仅提供用户有权访问的角色的信息。默认所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ROLE_SYS_PRIVS字段 名称 类型 描述 role character varying(128) 角色名称。 privilege character varying(40) 授予角色的系统权限。 系统权限包括rolsuper、rolinherit、rolcreaterole、rolcreatedb、rolcatupdate、rolcanlogin、rolreplication、rolauditadmin、rolsystemadmin、roluseft、rolmonitoradmin、roloperatoradmin、rolpolicyadmin。 admin_option character varying(3) 表示该授权是否包含ADMIN选项。 YES:表示包含ADMIN选项。 NO:表示不包含ADMIN选项。 common character varying(3) 暂不支持,值为NULL。 inherited character varying(3) 暂不支持,值为NULL。 父主题: 系统视图
  • 示例 --创建一个schema。 gaussdb=# CREATE SCHEMA tpcds; --创建表tpcds.customer_address。 gaussdb=# CREATE TABLE tpcds.customer_address ( ca_address_sk INTEGER NOT NULL, ca_address_id CHARACTER(16) NOT NULL, ca_street_number INTEGER , ca_street_name CHARACTER (20) ); --向表中插入多条记录。 gaussdb=# INSERT INTO tpcds.customer_address VALUES (1, 'AAAAAAAABAAAAAAA', '18', 'Jackson'),(2, 'AAAAAAAACAAAAAAA', '362', 'Washington 6th'),(3, 'AAAAAAAADAAAAAAA', '585', 'Dogwood Washington'); --SELECT语句,用一个游标读取一个表。开始一个事务。 gaussdb=# START TRANSACTION; --建立一个名为cursor1的游标。 gaussdb=# CURSOR cursor1 FOR SELECT * FROM tpcds.customer_address ORDER BY 1; --抓取头3行到游标cursor1里。 gaussdb=# FETCH FORWARD 3 FROM cursor1; ca_address_sk | ca_address_id | ca_street_number | ca_street_name ---------------+------------------+------------------+-------------------- 1 | AAAAAAAABAAAAAAA | 18 | Jackson 2 | AAAAAAAACAAAAAAA | 362 | Washington 6th 3 | AAAAAAAADAAAAAAA | 585 | Dogwood Washington (3 rows) --关闭游标并提交事务。 gaussdb=# CLOSE cursor1; --结束一个事务。 gaussdb=# END; --VALUES子句,用一个游标读取VALUES子句中的内容。开始一个事务。 gaussdb=# START TRANSACTION; --建立一个名为cursor2的游标。 gaussdb=# CURSOR cursor2 FOR VALUES(1,2),(0,3) ORDER BY 1; --抓取头2行到游标cursor2里。 gaussdb=# FETCH FORWARD 2 FROM cursor2; column1 | column2 ---------+--------- 0 | 3 1 | 2 (2 rows) --关闭游标并提交事务。 gaussdb=# CLOSE cursor2; --结束一个事务。 gaussdb=# END; --WITH HOLD游标的使用,开启事务。 gaussdb=# START TRANSACTION; --创建一个with hold游标。 gaussdb=# DECLARE cursor1 CURSOR WITH HOLD FOR SELECT * FROM tpcds.customer_address ORDER BY 1; --抓取头2行到游标cursor1里。 gaussdb=# FETCH FORWARD 2 FROM cursor1; ca_address_sk | ca_address_id | ca_street_number | ca_street_name ---------------+------------------+------------------+-------------------- 1 | AAAAAAAABAAAAAAA | 18 | Jackson 2 | AAAAAAAACAAAAAAA | 362 | Washington 6th (2 rows) --结束事务。 gaussdb=# END; --抓取下一行到游标cursor1里。 gaussdb=# FETCH FORWARD 1 FROM cursor1; ca_address_sk | ca_address_id | ca_street_number | ca_street_name ---------------+------------------+------------------+-------------------- 3 | AAAAAAAADAAAAAAA | 585 | Dogwood Washington (1 row) --关闭游标。 gaussdb=# CLOSE cursor1; --删除表tpcds.customer_address。 gaussdb=# DROP TABLE tpcds.customer_address; --删除SCHEMA。 gaussdb=# DROP SCHEMA tpcds CASCADE;
  • 语法格式 FETCH [ direction { FROM | IN } ] cursor_name; 其中direction子句为可选参数。 NEXT | PRIOR | FIRST | LAST | ABSOLUTE count | RELATIVE count | count | ALL | FORWARD | FORWARD count | FORWARD ALL | BACKWARD | BACKWARD count | BACKWARD ALL
  • 参数说明 direction_clause 定义抓取数据的方向。 取值范围: NEXT(缺省值) 从当前关联位置开始,抓取下一行。 PRIOR 从当前关联位置开始,抓取上一行。 FIRST 抓取查询的第一行(和ABSOLUTE 1相同)。 LAST 抓取查询的最后一行(和ABSOLUTE -1相同)。 ABSOLUTE count 抓取查询中第count行。 ABSOLUTE抓取不会比用相对位移移动到需要的数据行更快,因为下层的实现必须遍历所有中间的行。 count取值范围:有符号的整数 count为正数,就从查询结果的第一行开始,抓取第count行。 count为负数,就从查询结果末尾抓取第abs(count)行。 count为0时,定位在第一行之前。 RELATIVE count 从当前关联位置开始,抓取随后或前面的第count行。 取值范围:有符号的整数 count为正数就抓取当前关联位置之后的第count行。 count为负数就抓取当前关联位置之前的第abs(count)行。 如果当前行没有数据的话,RELATIVE 0返回空。 count 抓取随后的count行(和FORWARD count一样)。 ALL 从当前关联位置开始,抓取所有剩余的行(和FORWARD ALL一样)。 FORWARD 抓取下一行(和NEXT一样)。 FORWARD count 从当前关联位置开始,抓取随后或前面的count行。 FORWARD ALL 从当前关联位置开始,抓取所有剩余行。 BACKWARD 从当前关联位置开始,抓取前面一行(和PRIOR一样) 。 BACKWARD count 从当前关联位置开始,抓取前面的count行(向后扫描)。 取值范围:有符号的整数 count为正数就抓取当前关联位置之前的count行。 count为负数就抓取当前关联位置之后的abs(count)行。 如果有数据的话,BACKWARD 0重新抓取当前行。 BACKWARD ALL 从当前关联位置开始,抓取所有前面的行(向后扫描) 。 { FROM | IN } cursor_name 使用关键字FROM或IN指定游标名称。 取值范围:已创建的游标的名称。
  • 注意事项 如果游标定义了NO SCROLL,则不允许使用例如FETCH BACKWARD之类的反向抓取。 NEXT,PRIOR,FIRST,LAST,ABSOLUTE,RELATIVE形式在恰当地移动游标之后抓取一条记录。如果后面没有数据行,就返回一个空的结果,此时游标就会停在查询结果的最后一行之后(向后查询时)或者第一行之前(向前查询时)。 FORWARD和BACKWARD形式在向前或者向后移动的过程中抓取指定的行数,然后把游标定位在最后返回的行上;或者是,如果count大于可用的行数,则在所有行之后(向后查询时)或者之前(向前查询时)。 RELATIVE 0,FORWARD 0,BACKWARD 0都要求在不移动游标的前提下抓取当前行,也就是重新抓取最近刚抓取过的行。除非游标定位在第一行之前或者最后一行之后,这个动作都应该成功,而在那两种情况下,不返回任何行。
  • 功能描述 FETCH通过已创建的游标来检索数据。 每个游标都有一个供FETCH使用的关联位置。游标的关联位置可以在查询结果的第一行之前,或者在结果中的任意行,或者在结果的最后一行之后: 游标刚创建完之后,关联位置在第一行之前的。 在抓取了一些移动行之后,关联位置在检索到的最后一行上。 如果FETCH抓取完了所有可用行,它就停在最后一行后面,或者在反向抓取的情况下是停在第一行前面。 FETCH ALL或FETCH BACKWARD ALL将总是把游标的关联位置放在最后一行或者在第一行前面。
  • PG_FOREIGN_SERVER PG_FOREIGN_SERVER系统表存储外部服务器定义。一个外部服务器描述了一个外部数据源,例如一个远程服务器。外部服务器通过外部数据封装器访问。 表1 PG_FOREIGN_SERVER字段 名称 类型 引用 描述 oid oid - 行标识符(隐含字段,必须明确选择)。 srvname name - 外部服务器名。 srvowner oid PG_AUTHID.oid 外部服务器的所有者。 srvfdw oid PG_FOREIGN_DATA_WRAPPER.oid 这个外部服务器的外部数据封装器的OID。 srvtype text - 服务器的类型(可选)。 srvversion text - 服务器的版本(可选)。 srvacl aclitem[] - 访问权限。 srvoptions text[] - 外部服务器指定选项,使用“keyword=value”格式的字符串。 父主题: 系统表
  • PG_TABLES PG_TABLES视图可用来查询对数据库中每个表的有用信息。 表1 PG_TABLES字段 名称 类型 引用 描述 schemaname name PG_NAMESPACE.nspname 表的模式名。 tablename name PG_CLASS.relname 表名。 tableowner name pg_get_userbyid(PG_CLASS.relowner) 表的所有者。 tablespace name PG_TABLESPACE.spcname 包含表的表空间,默认为NULL。 hasindexes boolean PG_CLASS.relhasindex 如果表上有索引(或者最近拥有)则为TRUE,否则为FALSE。 hasrules boolean PG_CLASS.relhasruls 如果表上有规则,则为TRUE,否则为FALSE。 hastriggers boolean PG_CLASS.RELHASTRIGGERS 如果表上有触发器,则为TRUE,否则为FALSE。 tablecreator name pg_get_userbyid(PG_OBJECT.creator) 表的创建者。 created timestamp with time zone PG_OBJECT.ctime 表的创建时间。 last_ddl_time timestamp with time zone PG_OBJECT.mtime 最后一次对该表执行DDL操作的时间。 父主题: 系统视图
  • GS_AUDITING_POLICY_ACCESS GS_AUDITING_POLICY_ACCESS系统表记录与DML数据库相关操作的统一审计信息。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_AUDITING_POLICY_ACCESS字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 accesstype name DML数据库操作相关类型。例如SELECT、INSERT、DELETE等。 labelname name 资源标签名称。对应系统表GS_AUDITING_POLICY中的polname字段。 policyoid oid 所属审计策略的Oid。对应系统表12.2.1 GS_AUDITING_POLICY中的oid。 modifydate timestamp without time zone 创建或修改的最新时间戳。 父主题: 系统表
  • SUMMARY_STAT_XACT_ALL_TABLES 显示数据库各节点所有Schema中所有普通表和toast表的事务状态信息的汇总求和结果。 表1 SUMMARY_STAT_XACT_ALL_TABLES字段 名称 类型 描述 schemaname name 此表所在的Schema名。 relname name 表名。 seq_scan numeric 此表发起的顺序扫描数。 seq_tup_read numeric 顺序扫描抓取的活跃行数。 idx_scan numeric 此表发起的索引扫描数。 idx_tup_fetch numeric 索引扫描抓取的活跃行数。 n_tup_ins numeric 插入行数。 n_tup_upd numeric 更新行数。 n_tup_del numeric 删除行数。 n_tup_hot_upd numeric HOT更新行数(即没有更新索引列的行数)。 父主题: Object
共100000条