华为云用户手册

  • PGXC_SLICE PGXC_SLICE表是针对range范围分布和list分布创建的系统表,用来记录分布具体信息,当前不支持range interval自动扩展分片,不过在系统表中预留。 PGXC_SLICE系统表在集中式场景下只能查询表定义。 表1 PGXC_SLICE字段 名称 类型 描述 relname name 表名或者分片名,通过type区分。 type "char" 't':relname是表名。 's':relname是分片的名字。 strategy "char" ‘r’:range分布表。 ‘l’:list分布表。 后续interval分片会扩展该值。 relid oid 该tuple隶属的分布表oid。 referenceoid oid 所参考分布表的oid,用于slice reference建表语法。 sindex integer 当为list分布表时,表示当前boundary在某个分片内的位置。 interval text[] 预留字段。 transitboundary text[] 预留字段。 transitno integer 预留字段。 nodeoid oid 当relname为分片名时,表示该分片的数据存放在哪个DN上,nodeoid表示这个DN的oid。 boundaries text[] 当relname为分片名时,对应该分片的边界值。 specified boolean 当前分片对应的DN是否是用户在DDL中显示指定的。 sliceorder integer 用户定义分片的顺序。 父主题: 系统表
  • 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 索引命中缓存数。 父主题: 系统视图
  • 注意事项 只有数据库所有者或者被授予了数据库DROP权限的用户有权限执行DROP DATABASE命令,系统管理员默认拥有此权限。 不能对系统默认安装的三个数据库(POSTGRES、TEMPLATE0和TEMPLATE1)执行删除操作,系统做了保护。如果想查看当前服务中有哪几个数据库,可以用gsql的\l命令查看。 如果有用户正在与要删除的数据库连接,则删除操作失败。 不能在事务块中执行DROP DATABASE命令。 如果执行DROP DATABASE失败,事务回滚,需要再次执行一次DROP DATABASE IF EXISTS。 DROP DATABASE一旦执行将无法撤销,请谨慎使用。
  • 远程连接数据库 完成远程连接配置,请联系管理员处理。 在客户端机器上,上传客户端工具包并配置gsql的执行环境变量。此处以openEuler环境为例。 以登录客户端机器。 创建“/tmp/tools”目录。 mkdir /tmp/tools 获取软件安装包中的“ GaussDB -Kernel_VxxxRxxxCxx-XXXXX-64bit-gsql.tar.gz”上传到“/tmp/tools”路径下。 软件包相对位置为安装时所放位置,根据实际情况填写。 不同的操作系统,工具包文件名称会有差异。请根据实际的操作系统类型选择对应的工具包。 解压文件。 cd /tmp/tools tar -zxvf GaussDB-Kernel_VxxxRxxxCxx-XXXXX-64bit-gsql.tar.gz 登录数据库主节点所在的服务器,拷贝数据库安装目录下的bin目录到客户端主机的“/tmp/tools”路径下。 scp -r /opt/huawei/install/app/bin root@10.10.0.30:/tmp/tools 其中,/opt/huawei/install/app为clusterconfig.xml文件中配置的{gaussdbAppPath}路径,10.10.0.30为客户端主机ip。 登录客户端所在主机,设置环境变量。 打开“~/.bashrc”文件。 vi ~/.bashrc 在其中输入如下内容后,使用“:wq!”命令保存并退出。 export PATH=/tmp/tools/bin:$PATH export LD_LIBRARY_PATH=/tmp/tools/lib:$LD_LIBRARY_PATH 使环境变量配置生效。 source ~/.bashrc 连接数据库。 数据库安装完成后,默认生成名称为postgres的数据库。第一次连接数据库时可以连接到此数据库。 gsql -d postgres -h 10.10.0.11 -U jack -p 8000 Password for user jack: postgres为需要连接的数据库名称,10.10.0.11为数据库主节点所在的服务器IP地址,jack为连接数据库的用户,8000为数据库主节点的端口号。 在集中式数据库实例环境中,当需要连接主节点时,比如数据库实例三个节点的IP是10.10.0.11,10.10.0.12,10.10.0.13时,可以使用gsql -d postgres -h 10.10.0.11,10.10.0.12,10.10.0.13 -U jack -p 8000,gsql会按从前往后的顺序依次连接三个IP,如果当前连接的IP地址不是主节点则断开尝试连接下一个IP地址,直到找到主节点为止。 连接GaussDB的机器与GaussDB不在同一网段时,-h指定的IP地址应为Manager界面上所设的coo.cooListenIp2(应用访问IP)的取值。 默认禁止使用数据库初始化用户进行远程连接数据库,开启实例内部kerberos认证时,允许初始化用户在实例内部进行远程连接。
  • 创建数据库连接的接口介绍 JDBC提供了三种接口,用于创建数据库连接。url、info、user、password参数描述,请参见表1。 接口一:DriverManager.getConnection(String url)。该方式需要把数据库用户名、密码写在url中,有一定的安全风险,因此不推荐使用。 接口二:DriverManager.getConnection(String url, String user, String password)。具体请参见采用接口二连接数据库。 接口三:DriverManager.getConnection(String url, Properties info)。具体请参见采用接口三连接数据库。
  • 加载驱动方式介绍 加载驱动有两种方式: 在代码中创建连接之前任意位置隐含装载: Class.forName("com.huawei.opengauss.jdbc.Driver"); 在JVM启动时参数传递,jdbctest为测试用例程序的名称。 java -Djdbc.drivers=com.huawei.opengauss.jdbc.Driver jdbctest 由于GaussDB在JDBC的使用上与PG的使用方法保持兼容,所以同时在同一进程内使用两个JDBC驱动的时候,可能会类名冲突。 相比于PG驱动,GaussDB JDBC驱动主要做了以下特性的增强: 支持SHA256加密方式登录。 支持对接实现sf4j接口的第三方日志框架。 支持容灾切换。
  • 采用接口二连接数据库 使用DriverManager.getConnection(String url, String user, String password)接口创建数据库连接,命令如下: 导入java.sql.Connection和java.sql.DriverManager。 java.sql.Connection是数据库连接接口,通过java.sql.DriverManager的 getConnection() 方法让应用程序连接到数据库。此外,用户需要根据实际的应用场景,再导入其他的接口和类,具体请参见JDBC接口参考。 1 2 import java.sql.Connection; import java.sql.DriverManager; 指定数据库sourceURL($ip、$port、database需要用户自行修改)、用户名和密码。 用户名和密码直接写到代码中有很大的安全风险,建议在环境变量中存放。 String sourceURL = "jdbc:opengauss://$ip:$port/database"; String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); 加载驱动。 在代码运行工具(如IDE)中添加opengaussjdbc.jar包。 执行以下命令加载数据库驱动程序“com.huawei.opengauss.jdbc.Driver”。 String driver = "com.huawei.opengauss.jdbc.Driver"; Class.forName(driver); 创建数据库连接。 调用DriverManager.getConnection(String url, String user, String password),进行数据库连接。 Connection conn = DriverManager.getConnection(sourceURL, userName, password);
  • 采用接口三连接数据库 使用DriverManager.getConnection(String url, Properties info)接口创建数据库连接,命令如下: 导入java.sql.Connection、java.sql.DriverManager、java.util.Properties。 java.util.Properties的setProperty() 方法,用于设置Properties 对象的属性值。此外,用户需要根据实际的应用场景,再导入其他的接口和类,具体请参见JDBC接口参考。 1 2 3 import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; 指定数据库sourceURL($ip、$port、database需要用户自行修改)、用户名和密码。 用户名和密码直接写到代码中有很大的安全风险,建议在环境变量中存放。 String sourceURL = "jdbc:opengauss://$ip:$port/database"; String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); 创建Properties 对象,并将userName和password设置为该对象的属性值。 Properties info = new Properties(); info.setProperty("user", userName); info.setProperty("password", password); 加载驱动。 在代码运行工具(如IDE)中添加opengaussjdbc.jar包。 执行以下命令加载数据库驱动程序“com.huawei.opengauss.jdbc.Driver”。 String driver = "com.huawei.opengauss.jdbc.Driver"; Class.forName(driver); 创建数据库连接。 调用DriverManager.getConnection(String url, Properties info),进行数据库连接。 1 Connection conn = DriverManager.getConnection(sourceURL, info);
  • DBE_PLDEBUGGER.local_debug_server_info 用于查找当前连接中已经turn_on的存储过程oid。便于用户确认在调试哪些存储过程,需要通过funcoid和pg_proc配合使用。 表1 local_debug_server_info 返回值列表 名称 类型 描述 nodename OUT text 节点名称 port OUT bigint 端口号 funcoid OUT oid 存储过程oid 父主题: DBE_PLDEBUGGER Schema
  • 原型 int PQsendQueryPrepared(PGconn *conn, const char *stmtName, int nParams, const char * const *paramValues, const int *paramLengths, const int *paramFormats, int resultFormat);
  • 时间段输入 reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。 时间段输入的详细信息请参考表6。 表6 时间段输入 输入示例 输出结果 描述 60 2 mons 采用数字表示时间段,默认单位是day,可以是小数或负数。特别的,负数时间段,在语义上,可以理解为“早于多久”。 31.25 1 mons 1 days 06:00:00 -365 -12 mons -5 days 1 years 1 mons 8 days 12:00:00 1 years 1 mons 8 days 12:00:00 采用POSTGRES格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -13 months -10 hours -1 years -25 days -04:00:00 -2 YEARS +5 MONTHS 10 DAYS -1 years -6 mons -25 days -06:00:00 P-1.1Y10M -3 mons -5 days -06:00:00 采用ISO-8601格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -12H -12:00:00 示例: 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 --创建表。 openGauss=# CREATE TABLE reltime_type_tab(col1 character(30), col2 reltime); --插入数据。 openGauss=# INSERT INTO reltime_type_tab VALUES ('90', '90'); openGauss=# INSERT INTO reltime_type_tab VALUES ('-366', '-366'); openGauss=# INSERT INTO reltime_type_tab VALUES ('1975.25', '1975.25'); openGauss=# INSERT INTO reltime_type_tab VALUES ('-2 YEARS +5 MONTHS 10 DAYS', '-2 YEARS +5 MONTHS 10 DAYS'); openGauss=# INSERT INTO reltime_type_tab VALUES ('30 DAYS 12:00:00', '30 DAYS 12:00:00'); openGauss=# INSERT INTO reltime_type_tab VALUES ('P-1.1Y10M', 'P-1.1Y10M'); --查看数据。 openGauss=# SELECT * FROM reltime_type_tab; col1 | col2 --------------------------------+------------------------------------- 90 | 3 mons -366 | -1 years -18:00:00 1975.25 | 5 years 4 mons 29 days -2 YEARS +5 MONTHS 10 DAYS | -1 years -6 mons -25 days -06:00:00 30 DAYS 12:00:00 | 1 mon 12:00:00 P-1.1Y10M | -3 mons -5 days -06:00:00 (6 rows) --删除表。 openGauss=# DROP TABLE reltime_type_tab;
  • 日期输入 日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的格式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。 日期的文本输入需要加单引号包围,语法如下: type [ ( p ) ] 'value' 可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。表2显示了date类型的输入格式。 表2 日期输入方式 例子 描述 1999-01-08 ISO 8601格式(建议格式),任何方式下都是1999年1月8日。 January 8, 1999 在任何datestyle输入模式下都无歧义。 1/8/1999 有歧义,在MDY模式下是一月八日,在DMY模式下是八月一日。 1/18/1999 MDY模式下是一月十八日,其它模式下被拒绝。 01/02/03 MDY模式下的2003年1月2日。 DMY模式下的2003年2月1日。 YMD模式下的2001年2月3日。 1999-Jan-08 任何模式下都是1月8日。 Jan-08-1999 任何模式下都是1月8日。 08-Jan-1999 任何模式下都是1月8日。 99-Jan-08 YMD模式下是1月8日,否则错误。 08-Jan-99 一月八日,除了在YMD模式下是错误的之外。 Jan-08-99 一月八日,除了在YMD模式下是错误的之外。 19990108 ISO 8601格式;任何模式下都是1999年1月8日。 990108 ISO 8601格式;任何模式下都是1999年1月8日。 1999.008 年和年里的第几天。 J2451187 儒略日。 January 8, 99 BC 公元前99年。 示例: 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 --创建表。 openGauss=# CREATE TABLE date_type_tab(coll date); --插入数据。 openGauss=# INSERT INTO date_type_tab VALUES (date '12-10-2010'); --查看数据。 openGauss=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 (1 row) --查看日期格式。 openGauss=# SHOW datestyle; DateStyle ----------- ISO, MDY (1 row) --设置日期格式。 openGauss=# SET datestyle='YMD'; SET --插入数据。 openGauss=# INSERT INTO date_type_tab VALUES(date '2010-12-11'); --查看数据。 openGauss=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 00:00:00 2010-12-11 00:00:00 (2 rows) --删除表。 openGauss=# DROP TABLE date_type_tab;
  • PG_LOCKS PG_LOCKS视图显示各打开事务所持有的锁的信息。 表1 PG_LOCKS字段 名称 类型 引用 描述 locktype text - 被锁定对象的类型:relation、extend、page、tuple、transactionid、virtualxid、object、userlock、advisory。 database oid PG_DATABASE.oid 被锁定对象所在数据库的OID。 如果被锁定的对象是共享对象,则OID为0。 如果被锁定的对象是一个事务,则OID为NULL。 relation oid PG_CLASS.oid 关系的OID,如果锁定的对象不是关系,也不是关系的一部分,则为NULL。 page integer - 关系内部的页面编号,如果对象不是关系页或者不是行页,则为NULL。 tuple smallint - 页面里边的行编号,如果对象不是行,则为NULL。 bucket integer - 子表对应的bucket number。如果目标不是表的话,则为NULL。 virtualxid text - 虚拟事务的ID,如果对象不是一个虚拟事务,则为NULL。 transactionid xid - 事务的ID,如果对象不是一个事务ID,则为NULL。 classid oid PG_CLASS.oid 包含该对象的系统表的OID,如果对象不是普通的数据库对象,则为NULL。 objid oid - 对象在其系统表内的OID,如果对象不是普通的数据库对象,则为NULL。 objsubid smallint - 对于表的一个字段,这是字段编号;对于其他对象类型,这个字段是0;如果这个对象不是普通数据库对象,则为NULL。 virtualtransaction text - 持有此锁或者在等待此锁的虚拟事务的ID。 pid bigint - 持有或者等待这个锁的服务器逻辑线程的ID。如果锁是被一个预备事务持有的,则为NULL。 sessionid bigint - 持有或者等待这个锁的会话的ID。 mode text - 这个线程持有的或者是期望的锁模式。 granted boolean - 如果锁是持有锁,则为TRUE。 如果锁是等待锁,则为FALSE。 fastpath boolean - 如果通过fast-path获得锁,则为TRUE;如果通过主要的锁表获得,则为FALSE。 locktag text - 会话等待锁信息,可通过locktag_decode()函数解析。 global_sessionid text - 全局会话ID。 父主题: 系统视图
  • GLOBAL_PAGEWRITER_STATUS GLOBAL_PAGEWRITER_STATUS视图显示数据库实例的刷页信息和检查点信息。 表1 GLOBAL_PAGEWRITER_STATUS字段 名称 类型 描述 node_name text 实例名称。 pgwr_actual_flush_total_num bigint 从启动到当前时间总计刷脏页数量。 pgwr_last_flush_num integer 上一批刷脏页数量。 remain_dirty_page_num bigint 当前预计还剩余多少脏页。 queue_head_page_rec_lsn text 当前实例的脏页队列第一个脏页的recovery_lsn。 queue_rec_lsn text 当前实例的脏页队列的recovery_lsn。 current_xlog_insert_lsn text 当前实例xLog写入的位置。 ckpt_redo_point text 当前实例的检查点。 父主题: Utility
  • 注意事项 要使用 ALTER AGGREGATE ,你必须是该聚合函数的所有者。 要改变一个聚合函数的模式,你必须在新模式上有 CREATE 权限。 要改变所有者,你必须是新所有角色的一个直接或间接成员,并且该角色必须在聚合函数的模式上有 CREATE 权限。(这些限制强制了修改该所有者不会做任何通过删除和重建聚合函数不能做的事情。不过,具有SYSADMIN权限用户可以用任何方法任意更改聚合函数的所属关系)。
  • 示例 把一个接受integer 类型参数的聚合函数myavg重命名为 my_average : ALTER AGGREGATE myavg(integer) RENAME TO my_average; 把一个接受integer 类型参数的聚合函数myavg的所有者改为joe : ALTER AGGREGATE myavg(integer) OWNER TO joe; 把一个接受integer 类型参数的聚合函数myavg移动到模式myschema里: ALTER AGGREGATE myavg(integer) SET SCHEMA myschema;
  • 示例 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 --插入内容。 openGauss=# ALTER GLOBAL CONFIGURATION with(redis_is_ok = true); --查询。 openGauss=# SELECT * FROM gs_global_config; name | value -----------------+------- buckets_len | 16384 undostoragetype | page redis_is_ok | true (3 rows) --修改内容。 openGauss=# ALTER GLOBAL CONFIGURATION with(redis_is_ok = false); --查询。 openGauss=# SELECT * FROM gs_global_config; name | value -----------------+------- buckets_len | 16384 undostoragetype | page redis_is_ok | false (3 rows) --删除内容。 openGauss=# DROP GLOBAL CONFIGURATION redis_is_ok; --查询。 openGauss=# SELECT * FROM gs_global_config; name | value -----------------+------- buckets_len | 16384 undostoragetype | page (2 rows)
  • 功能描述 在指定的表上创建索引。 索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引: 经常执行查询的字段。 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select * from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。 where子句的过滤条件字段上(尤其是范围条件)。 在经常出现在order by、group by和distinct后的字段。 在分区表上创建索引与在普通表上创建索引的语法不太一样,使用时请注意,如当索引带GLOBAL/LOCAL关键字或者创建索引为GLOBAL索引时不支持创建部分索引。
  • 语法格式 在表上创建索引。 CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [schema_name.]index_name ] ON table_name [ USING method ] ({ { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] }[, ...] ) [ INCLUDE ( column_name [, ...] )] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ TABLESPACE tablespace_name ] [ WHERE predicate ]; 在分区表上创建索引。 CREATE [ UNIQUE ] INDEX [ [schema_name.]index_name ] ON table_name [ USING method ] ( {{ column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS LAST ] }[, ...] ) [ LOCAL [ ( { PARTITION index_partition_name | SUBPARTITION index_subpartition_name [ TABLESPACE index_partition_tablespace ] } [, ...] ) ] | GLOBAL ] [ INCLUDE ( column_name [, ...] )] [ WITH ( { storage_parameter = value } [, ...] ) ] [ TABLESPACE tablespace_name ] [ WHERE predicate ];
  • 优化建议 create index 建议仅在匹配如下条件之一时创建索引: 经常执行查询的字段。 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select * from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。 where子句的过滤条件字段上(尤其是范围条件)。 在经常出现在order by、group by和distinct后的字段。 约束限制: 普通表的索引支持最大列数为32列;分区表的GLOBAL索引支持最大列数为31列。 单个索引大小不能超过索引页面大小(8k),其中B-tree及UBtree索引不能超过页面大小的三分之一。 分区表上不支持创建部分索引。 分区表创建GLOBAL索引时,存在以下约束条件: 不支持表达式索引、部分索引 仅支持B-tree索引 在相同属性列上,分区LOCAL索引与GLOBAL索引不能共存。 如果alter语句不带有UPDATE GLOBAL INDEX,那么原有的GLOBAL索引将失效,查询时将使用其他索引进行查询;如果alter语句带有UPDATE GLOBAL INDEX,原有的GLOBAL索引仍然有效,并且索引功能正确。
  • 注意事项 索引自身也占用存储空间、消耗计算资源,创建过多的索引将对数据库性能造成负面影响(尤其影响数据导入的性能,建议在数据导入后再建索引)。因此,仅在必要时创建索引。 索引定义里的所有函数和操作符都必须是immutable类型的,即它们的结果必须只能依赖于它们的输入参数,而不受任何外部的影响(如另外一个表的内容或者当前时间)。这个限制可以确保该索引的行为是定义良好的。要在一个索引上或WHERE中使用用户定义函数,请把它标记为immutable类型函数。 分区表索引分为LOCAL索引与GLOBAL索引,LOCAL索引与某个具体分区绑定,而GLOBAL索引则对应整个分区表。 被授予CREATE ANY INDEX权限的用户,可以在public模式和用户模式下创建索引。 如果表达式索引中调用的是用户自定义函数,按照函数创建者权限执行表达式索引函数。
  • 层次递归查询函数 层次递归查询语句中可使用以下函数返回连接路径上的相关信息。 sys_connect_by_path(col, separator) 描述:仅在层次递归查询中适用,用于返回从根节点到当前行的连接路径。 参数col为在路径中显示的列的名称,只支持类型为CHAR/VARCHAR/NVARCHAR2/TEXT的列,参数separator为路径节点之间的分隔符。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 openGauss=# select *, sys_connect_by_path(name, '-') from connect_table start with id = 1 connect by prior id = pid; id | pid | name | sys_connect_by_path ----+-----+------+--------------------- 1 | 0 | a | -a 2 | 1 | b | -a-b 4 | 1 | d | -a-d 3 | 2 | c | -a-b-c (4 rows) connect_by_root(col) 描述:仅在层次递归查询中适用,用于返回当前行最顶层父亲行中某列的值。 参数col为输出列的名称。 返回值类型:即为所指定列col的数据类型。 示例: 1 2 3 4 5 6 7 8 openGauss=# select *, connect_by_root(name) from connect_table start with id = 1 connect by prior id = pid; id | pid | name | connect_by_root ----+-----+------+----------------- 1 | 0 | a | a 2 | 1 | b | a 4 | 1 | d | a 3 | 2 | c | a (4 rows) 父主题: 函数和操作符
  • STAT_DATABASE_CONFLI CTS 显示当前节点数据库冲突状态的统计信息。 表1 STAT_DATABASE_CONFLICTS字段 名称 类型 描述 datid oid 数据库标识。 datname name 数据库名称。 confl_tablespace bigint 冲突的表空间的数目。 confl_lock bigint 冲突的锁数目。 confl_snapshot bigint 冲突的快照数目。 confl_bufferpin bigint 冲突的缓冲区数目。 confl_deadlock bigint 冲突的死锁数目。 父主题: Object
  • DB_TABLES DB_TABLES视图显示当前用户可访问的所有表的信息。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 DB_TABLES字段 名称 类型 描述 owner character varying(64) 表的所有者。 table_name character varying(64) 表名。 tablespace_name character varying(64) 存储表的表空间名称。 num_rows numeric 表的估计行数。 status character varying(8) 当前表是否有效。 VALID:当前表有效。 UNUSABLE:当前表不可用。 temporary character(1) 表是否为临时表: Y:表示是临时表。 N:表示不是临时表。 dropped character varying 当前表是否已删除: YES:表示已删除。 NO:表示未删除。 父主题: 系统视图
  • GLOBAL_STAT_SESSION_CU GLOBAL_STAT_SESSION_CU用于查询数据库各个节点,当前运行session的CU命中情况。session退出相应的统计数据会清零。数据库重启后,统计数据也会清零。 表1 GLOBAL_STAT_SESSION_CU字段 名称 类型 描述 mem_hit integer 内存命中次数。 hdd_sync_read integer 硬盘同步读次数。 hdd_asyn_read integer 硬盘异步读次数。 父主题: Cache/IO
  • PGXC_GROUP PGXC_GROUP系统表存储节点组信息。PGXC_GROUP系统表在集中式场景下只能查询表定义。 表1 PGXC_GROUP字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 group_name name 节点组名称。 in_redistribution "char" 是否需要重分布。取值包括: n:表示NodeGroup没有再进行重分布。 y:表示NodeGroup是重分布过程中的源节点组。 t:表示NodeGroup是重分布过程中的目的节点组。 group_members oidvector_extend 节点组的节点OID列表。 group_buckets text 分布数据桶的集合。 is_installation boolean 是否安装子数据库实例。 t(true):表示安装。 f(false):表示不安装。 group_acl aclitem[] 访问权限。 group_kind "char" node group类型,取值包括: i:表示installation node group。 n:表示普通非逻辑数据库实例node group。 v:表示逻辑数据库实例node group。 e:表示弹性数据库实例。 group_parent oid 如果是子node group,该字段表示父node group的OID,如果是父node group,该字段值为空。 父主题: 系统表
  • 注意事项 须使用CASCADE级联删除依赖用户的对象(除数据库外)。当删除用户的级联对象时,如果级联对象处于锁定状态,则此级联对象无法被删除,直到对象被解锁或锁定级联对象的进程被终止。 在GaussDB中,存在一个配置参数enable_kill_query,此参数在配置文件postgresql.conf中。此参数影响级联删除用户对象的行为: 当参数enable_kill_query为on ,且使用CASCADE模式删除用户时,会自动kill锁定用户级联对象的进程,并删除用户。 当参数enable_kill_query为off,且使用CASCADE模式删除用户时,会等待锁定级联对象的进程结束之后再删除用户。 在数据库中删除用户时,如果依赖用户的对象在其他数据库中或者依赖用户的对象是其他数据库,请用户先手动删除其他数据库中的依赖对象或直接删除依赖数据库,再删除用户。即DROP USER不支持跨数据库进行级联删除。 在删除用户时,需要先删除该用户拥有的所有对象并且收回该用户在其他对象上的权限,或者通过指定CASCADE级联删除该用户拥有的对象和被授予的权限。
  • 参数说明 IF EXISTS 如果指定的用户不存在,发出一个notice而不是抛出一个错误。 user_name 待删除的用户名。 取值范围:已存在的用户名。 CASCADE | RESTRICT CASCADE:级联删除依赖用户的对象,并收回授予该用户的权限。 RESTRICT:如果用户还有任何依赖的对象或被授予了其他对象的权限,则拒绝删除该用户(缺省行为)。 在GaussDB中,存在一个配置参数enable_kill_query,此参数在配置文件postgresql.conf中。此参数影响级联删除用户对象的行为: 当参数enable_kill_query为on ,且使用CASCADE模式删除用户时,会自动kill锁定用户级联对象的进程,并删除用户。 当参数enable_kill_query为off,且使用CASCADE模式删除用户时,会等待锁定级联对象的进程结束之后再删除用户。
  • track_stmt_shm_size 参数说明:控制全量SQL共享内存的大小。 参数类型:整型 参数单位:byte 取值范围:134217728 ~ 1073741824 默认值:134217728 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
  • 规则 Hudi表必须设置合理的主键。 Hudi表提供了数据更新和幂等写入能力,该能力要求Hudi表必须设置主键,主键设置不合理会导致数据重复。主键可以为单一主键也可以为复合主键,两种主键类型均要求主键不能有null值和空值,不要包含逗号和冒号,可以参考以下示例设置主键: SparkSQL: -- 通过primaryKey指定主键,如果是复合主键需要用逗号分隔。 create table hudi_table ( id1 int, id2 int, name string, price double ) using hudi options ( primaryKey = 'id1,id2', preCombineField = 'price' ); SparkDatasource: --通过hoodie.datasource.write.recordkey.field指定主键。 df.write.format("hudi"). option("hoodie.datasource.write.table.type", COPY_ON_WRITE). option("hoodie.datasource.write.precombine.field", "price"). option("hoodie.datasource.write.recordkey.field", "id1,id2"). FlinkSQL: --通过hoodie.datasource.write.recordkey.field指定主键。 create table hudi_table( id1 int, id2 int, name string, price double ) partitioned by (name) with ( 'connector' = 'hudi', 'hoodie.datasource.write.recordkey.field' = 'id1,id2', 'write.precombine.field' = 'price') Hudi表必须配置precombine字段。 在数据同步过程中不可避免会出现数据重复写入、数据乱序问题,例如:异常数据恢复、写入程序异常重启等场景。通过设置合理precombine字段值可以保证数据的准确性,老数据不会覆盖新数据,也就是幂等写入能力。该字段可用选择的类型包括:业务表中更新时间戳、数据库的提交时间戳等。precombine字段不能有null值和空值,可以参考以下示例设置precombine字段: SparkSQL: --通过preCombineField指定precombine字段。 create table hudi_table ( id1 int, id2 int, name string, price double ) using hudi options ( primaryKey = 'id1,id2', preCombineField = 'price' ); SparkDatasource: --通过hoodie.datasource.write.precombine.field指定precombine字段。 df.write.format("hudi"). option("hoodie.datasource.write.table.type", COPY_ON_WRITE). option("hoodie.datasource.write.precombine.field", "price"). option("hoodie.datasource.write.recordkey.field", "id1,id2"). Flink: --通过write.precombine.field指定precombine字段。 create table hudi_table( id1 int, id2 int, name string, price double ) partitioned by (name) with ( 'connector' = 'hudi', 'hoodie.datasource.write.recordkey.field' = 'id1,id2', 'write.precombine.field' = 'price') 流式计算采用MOR表。 流式计算为低时延的实时计算,需要高性能的流式读写能力,在Hudi表中存在的MOR和COW两种模型中,MOR表的流式读写性能相对较好,因此在流式计算场景下采用MOR表模型。关于MOR表在读写性能的对比关系如下: 对比维度 MOR表 COW表 流式写 高 低 流式读 高 低 批量写 高 低 批量读 低 高 实时入湖,表模型采用MOR表。 实时入湖一般的性能要求都在分钟内或者分钟级,结合Hudi两种表模型的对比,因此在实时入湖场景中需要选择MOR表模型。 Hudi表名以及列名采用小写字母。 多引擎读写同一张Hudi表时,为了规避引擎之间大小写的支持不同,统一采用小写字母。
共100000条
提示

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