华为云用户手册

  • GS_MATVIEW_DEPENDENCY GS_MATVIEW_DEPENDENCY系统表提供了关于数据库中每一个增量物化视图、基表和mlog表的关联信息。全量物化视图不存在与基表对应的mlog表,不会写入记录。 表1 GS_MATVIEW_DEPENDENCY字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 matviewid oid 物化视图的oid。 relid oid 物化视图基表的oid。 mlogid oid 物化视图mlog表的oid,mlog表为物化视图日志表,与基表一一对应。 mxmin int4 保留字段。 父主题: 系统表
  • 参数说明 direction 定义抓取数据的方向。 取值范围: NEXT(缺省值) 从当前关联位置开始,抓取下一行。 PRIOR 从当前关联位置开始,抓取上一行。 FIRST 抓取查询的第一行(和ABSOLUTE 1相同)。 LAST 抓取查询的最后一行(和ABSOLUTE -1相同)。 ABSOLUTE count 抓取查询中第count行。 ABSOLUTE抓取不会比用相对位移移动到需要的数据行更快,因为下层的实现必须遍历所有中间的行。 count取值范围:有符号的整数 count为正数,就从查询结果的第一行开始,抓取第count行。当count小于当前游标位置时,涉及到rewind操作,暂不支持。 count为负数或0,涉及到反向扫描操作,暂不支持。 RELATIVE count 从当前关联位置开始,抓取随后或前面的第count行。 取值范围:有符号的整数 count为正数就抓取当前关联位置之后的第count行。 count为负数或0,涉及到反向扫描操作,暂不支持。 如果当前行没有数据的话,RELATIVE 0返回空。 count 抓取随后的count行(和FORWARD count一样)。 ALL 从当前关联位置开始,抓取所有剩余的行(和FORWARD ALL一样)。 FORWARD 抓取下一行(和NEXT一样)。 FORWARD count 与RELATIVE count的效果相同,从当前关联位置开始,抓取随后或前面的第count行。 FORWARD ALL 从当前关联位置开始,抓取所有剩余行。 BACKWARD 从当前关联位置开始,抓取前面一行(和PRIOR一样) 。 BACKWARD count 从当前关联位置开始,抓取前面的count行(向后扫描)。 取值范围:有符号的整数 count为正数就抓取当前关联位置之前的第count行。 count为负数就抓取当前关联位置之后的第abs(count)行。 如果有数据的话,BACKWARD 0重新抓取当前行。 BACKWARD ALL 从当前关联位置开始,抓取所有前面的行(向后扫描) 。 { FROM | IN } cursor_name 使用关键字FROM或IN指定游标名称。 取值范围:已创建的游标的名称。
  • 功能描述 FETCH通过已创建的游标来检索数据。 每个游标都有一个供FETCH使用的关联位置。游标的关联位置可以在查询结果的第一行之前,或者在结果中的任意行,或者在结果的最后一行之后: 游标刚创建完之后,关联位置在第一行之前。 在抓取了一些移动行之后,关联位置在检索到的最后一行上。 如果FETCH抓取完了所有可用行,它就停在最后一行后面,或者在反向抓取的情况下是停在第一行前面。 FETCH ALL或FETCH BACKWARD ALL总是把游标的关联位置放在最后一行或者在第一行前面。
  • 注意事项 如果游标定义了NO SCROLL,则不允许使用例如FETCH BACKWARD之类的反向抓取。 NEXT,PRIOR,FIRST,LAST,ABSOLUTE,RELATIVE形式在恰当地移动游标之后抓取一条记录。如果后面没有数据行,就返回一个空的结果,此时游标就会停在查询结果的最后一行之后(向后查询时)或者第一行之前(向前查询时)。 FORWARD和BACKWARD形式在向前或者向后移动的过程中抓取指定的行数,然后把游标定位在最后返回的行上;或者,如果count大于可用的行数,则在所有行之后(向后查询时)或者之前(向前查询时)。 RELATIVE 0,FORWARD 0,BACKWARD 0都要求在不移动游标的前提下抓取当前行,也就是重新抓取最近刚抓取过的行。除非游标定位在第一行之前或者最后一行之后,否则这个动作都应该成功。而当游标定位在第一行之前或者最后一行之后,不返回任何行。 当FETCH的游标上涉及非系统表时,不支持BACKWARD、PRIOR、FIRST等涉及反向获取操作。
  • 语法格式 FETCH [ direction { FROM | IN } ] cursor_name; 其中direction子句为可选参数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 NEXT | PRIOR | FIRST | LAST | ABSOLUTE count | RELATIVE count | count | ALL | FORWARD | FORWARD count | FORWARD ALL | BACKWARD | BACKWARD count | BACKWARD ALL
  • 示例 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 --创建一个SCHEMA。 openGauss=# CREATE SCHEMA tpcds; --创建表tpcds.customer_address。 openGauss=# 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) ); --向表中插入多条记录。 openGauss=# INSERT INTO tpcds.customer_address VALUES (1, 'AAAAAAAABAAAAAAA', '18', 'Jackson'),(2, 'AAAAAAAACAAAAAAA', '362', 'Washington 6th'),(3, 'AAAAAAAADAAAAAAA', '585', 'Dogwood Washington'); --SELECT语句,用一个游标读取一个表。开始一个事务。 openGauss=# START TRANSACTION; --建立一个名为cursor1的游标。 openGauss=# CURSOR cursor1 FOR SELECT * FROM tpcds.customer_address ORDER BY 1; --抓取头3行到游标cursor1里。 openGauss=# 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) --关闭游标并提交事务。 openGauss=# CLOSE cursor1; --结束一个事务。 openGauss=# END; --VALUES子句,用一个游标读取VALUES子句中的内容。开始一个事务。 openGauss=# START TRANSACTION; --建立一个名为cursor2的游标。 openGauss=# CURSOR cursor2 FOR VALUES(1,2),(0,3) ORDER BY 1; --抓取头2行到游标cursor2里。 openGauss=# FETCH FORWARD 2 FROM cursor2; column1 | column2 ---------+--------- 0 | 3 1 | 2 (2 rows) --关闭游标并提交事务。 openGauss=# CLOSE cursor2; --结束一个事务。 openGauss=# END; --WITH HOLD游标的使用,开启事务。 openGauss=# START TRANSACTION; --创建一个with hold游标。 openGauss=# DECLARE cursor1 CURSOR WITH HOLD FOR SELECT * FROM tpcds.customer_address ORDER BY 1; --抓取头2行到游标cursor1里。 openGauss=# 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) --结束事务。 openGauss=# END; --抓取下一行到游标cursor1里。 openGauss=# FETCH FORWARD 1 FROM cursor1; ca_address_sk | ca_address_id | ca_street_number | ca_street_name ---------------+------------------+------------------+-------------------- 3 | AAAAAAAADAAAAAAA | 585 | Dogwood Washington (1 row) --关闭游标。 openGauss=# CLOSE cursor1; --删除表tpcds.customer_address。 openGauss=# DROP TABLE tpcds.customer_address; --删除SCHEMA。 openGauss=# DROP SCHEMA tpcds CASCADE;
  • SUMMARY_STAT_XACT_USER_FUNCTIONS 视图包含集群内汇聚的本事务内函数执行的统计信息。 表1 SUMMARY_STAT_XACT_USER_FUNCTIONS字段 名称 类型 描述 schemaname name 模式的名称。 funcname name 函数名称。 calls numeric 函数被调用的次数。 total_time double precision 函数的总执行时长。 self_time double precision 当前线程调用函数的总的时长。 父主题: Object
  • 异步命令处理 PQexec函数对普通的同步应用里提交命令已经足够使用。但是它却有几个缺陷,而这些缺陷可能对某些用户很重要: PQexec等待命令结束,而应用可能还有其它的工作要做(比如维护用户界面等),此时并不希望PQexec阻塞应用。 因为客户端应用在等待结果的时候是处于挂起状态的,所以应用很难判断它是否该尝试结束正在进行的命令。 PQexec只能返回一个PGresult结构。如果提交的命令字符串包含多个SQL命令,除了最后一个PGresult以外都会被PQexec丢弃。 PQexec总是收集命令的整个结果,将其缓存在一个PGresult中。虽然这为应用简化了错误处理逻辑,但是对于包含多行的结果是不切实际的。 不想受到这些限制的应用可以改用下面的函数,这些函数也是构造PQexec的函数:PQsendQuery和PQgetResult。PQsendQueryParams,PQsendPrepare,PQsendQueryPrepared也可以和PQgetResult一起使用。 PQsendQuery PQsendQueryParams PQsendPrepare PQsendQueryPrepared PQflush 父主题: libpq接口参考
  • PV_REDO_STAT PV_REDO_STAT视图显示会话线程的日志回放情况。 表1 PV_REDO_STAT字段 名称 类型 描述 phywrts bigint 日志回放过程中写数据的次数。 phyblkwrt bigint 日志回放过程中写数据的块数。 writetim bigint 日志回放过程中写数据消耗的总时间。 avgiotim bigint 日志回放过程中写一次数据平均消耗的时间。 lstiotim bigint 日志回放过程中最后一次写数据消耗的时间。 miniotim bigint 日志回放过程中单次写数据消耗的最短时间。 maxiowtm bigint 日志回放过程中单次写数据消耗的最长时间。 父主题: 系统视图
  • MPP_TABLES MPP_TABLES视图显示PGXC_CLASS中表的信息。 表1 MPP_TABLES字段 名称 类型 描述 schemaname name 表的模式名。 tablename name 表名。 tableowner name 表的所有者。 tablespace name 表所在的表空间。 pgroup name 节点群的名称。 nodeoids oidvector_extend 表分布的节点OID列表。 父主题: 系统视图
  • PG_DEPEND PG_DEPEND系统表记录数据库对象之间的依赖关系。这个信息允许DROP命令找出哪些其它对象必须由DROP CASCADE删除,或者是在DROP RESTRICT的情况下避免删除。 这个表的功能类似PG_SHDEPEND,用于记录那些在数据库集群之间共享的对象之间的依赖性关系。 表1 PG_DEPEND字段 名称 类型 引用 描述 classid oid PG_CLASS.oid 有依赖对象所在系统表的OID。 objid oid 任意OID属性 指定的依赖对象的OID。 objsubid integer - 对于表字段,这个是该属性的字段数(objid和classid引用表本身)。对于所有其它对象类型,目前这个字段是0。 refclassid oid PG_CLASS.oid 被引用对象所在的系统表的OID。 refobjid oid 任意OID属性 指定的被引用对象的OID。 refobjsubid integer - 对于表字段,这个是该字段的字段号(refobjid和refclassid引用表本身)。对于所有其它对象类型,目前这个字段是0。 deptype "char" - 一个定义这个依赖关系特定语义的代码。 在所有情况下,一个PG_DEPEND记录表示被引用的对象不能在有依赖的对象被删除前删除。不过,这里还有几种由deptype定义的情况: DEPENDENCY_NORMAL (n):独立创建的对象之间的一般关系。有依赖的对象可以在不影响被引用对象的情况下删除。被引用对象只有在声明了CASCADE的情况下删除,这时有依赖的对象也被删除。例子:一个表字段对其数据类型有一般依赖关系。 DEPENDENCY_AUTO (a):有依赖对象可以和被引用对象分别删除,并且如果删除了被引用对象则应该被自动删除(不管是RESTRICT或CASCADE模式)。例子:一个表上面的命名约束是在该表上的自动依赖关系,因此如果删除了表,它也会被删除。 DEPENDENCY_INTERNAL (i):有依赖的对象是作为被引用对象的一部分创建的,实际上只是它的内部实现的一部分。 DROP有依赖对象是不能直接允许的(将告诉用户发出一条删除被引用对象的DROP)。一个对被引用对象的DROP将传播到有依赖对象,不管是否声明了CASCADE。例子:一个创建来强制外键约束的触发器在该约束的PG_CONSTRAINT记录上是标记为内部依赖的。 DEPENDENCY_EXTENSION (e):依赖对象是被依赖对象extension的一个成员。依赖对象只可以通过在被依赖对象上DROP EXTENSION删除。函数上这个依赖类型和内部依赖一样动作,但是它为了清晰和简化gs_dump保持分开。 DEPENDENCY_PIN (p):没有依赖对象;这种类型的记录标志着系统本身依赖于被引用对象,因此这个对象绝不能被删除。这种类型的记录只有在initdb的时候创建。有依赖对象的字段里是零。 父主题: 系统表
  • STREAMING_REAPER_STATUS STREAMING_REAPER_STATUS系统表存储流引擎reaper线程的状态信息。由于规格变更,当前版本已经不再支持本特性,请不要使用。 表1 STREAMING_REAPER_STATUS字段 名称 类型 描述 id integer CONTVIEW对象唯一的标识符,不可重复。 contquery_name name CONTVIEW对象的名称。 gather_interval text CONTVIEW对象设置的gather_interval参数值(自动聚合特定时间前历史数据的时间参数)。 gather_completion_time text CONTVIEW对象最近一次的GATHER(历史数据聚合)的完成时间。 父主题: 系统表
  • 参数说明 nodename 节点名,对应在pgxc_node系统表的一行记录,指定后将修改记录中的nodeis_active字段值。 取值范围:字符串,只支持CN,并且要保证该节点名在pgxc_node系统表中有对应的记录。 status pgxc_node系统表中nodeis_acitve字段的更新值。 取值范围: - FALSE - TRUE nodename1[, nodename2, nodename3 ...] 该SQL执行的节点范围,ALTER COORDINATOR执行时会自动下发到范围内的所有节点,需要包含当前执行节点。 取值范围:字符串,只支持CN,要保证该节点名在pgxc_node系统表中有对应的记录,并且节点状态正常,否则SQL执行失败。
  • 示例 集群有3个CN,cn_5001、cn_5002、cn_5003,均处于正常工作状态。 cn_5001发生故障且满足剔除时间要求后,需要将cn_5001从集群中剔除,执行SQL在cn_5002和cn5003节点上刷新pgxc_node系统表中cn_5001对应记录的nodeis_active为false: ALTER COORDINATOR cn_5001 SET False WITH (cn_5002,cn_5003); cn_5001故障解除后,为了在集群中加回cn_5001,执行SQL在cn_5002和cn5003节点上刷新pgxc_node系统表中cn_5001对应记录的nodeis_active为true: ALTER COORDINATOR cn_5001 SET True WITH (cn_5002,cn_5003);
  • 简化输入 简化输入到 CS V日志文件,可以通过如下操作: 设置log_filename和log_rotation_age,为日志文件提供一个一致的、可预测的命名方案。通过日志文件名,预测一个独立的日志文件完成并进入准备导入状态的时间。 将log_rotation_size设为0来终止基于尺寸的日志回滚,因为基于尺寸的日志回滚让预测日志文件名变得非常的困难。 将log_truncate_on_rotation设为on以便区分在同一日志文件中旧的日志数据和新的日志数据。
  • csvlog定义 以“逗号分隔值” 即CSV(Comma Separated Value)的形式发出日志。 以下是简单的用来存储CSV形式日志输出的表定义: 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 CREATE TABLE postgres_log ( log_time timestamp(3) with time zone, node_name text, user_name text, database_name text, process_id bigint, connection_from text, "session_id" text, session_line_num bigint, command_tag text, session_start_time timestamp with time zone, virtual_transaction_id text, transaction_id bigint, query_id bigint, module text, error_severity text, sql_state_code text, message text, detail text, hint text, internal_query text, internal_query_pos integer, context text, query text, query_pos integer, location text, application_name text ); 详细说明请参见表1。 表1 csvlog字段含义表 字段名 字段含义 字段名 字段含义 log_time 毫秒级的时间戳 module 日志所属模块 node_name 节点名称 error_severity ERRORSTATE代码 user_name 用户名 sql_state_code SQLSTATE代码 database_name 数据库名 message 错误消息 process_id 进程ID detail 详细错误消息 connection_from 客户主机:端口号 hint 提示 session_id 会话ID internal_query 内部查询(查询那些导致错误的信息,如果有的话) session_line_num 每个会话的行数 internal_query_pos 内部查询指针 command_tag 命令标签 context 环境 session_start_time 会话开始时间 query 错误发生位置的字符统计 virtual_transaction_id 常规事务 query_pos 错误发生位置指针 transaction_id 事务ID location 在 GaussDB 源代码中错误的位置(如果log_error_verbosity的值设为verbose ) query_id 查询ID application_name 应用名称 使用COPY FROM命令将日志文件导入这个表: 1 COPY postgres_log FROM '/opt/data/pg_log/logfile.csv' WITH csv; 此处的日志名“logfile.csv”要换成实际生成的日志的名称。
  • GLOBAL_COMM_SEND_STREAM GLOBAL_COMM_SEND_STREAM视图展示所有DN上所有的TCP代理通信库发送流状态。 表1 GLOBAL_COMM_SEND_STREAM字段 名称 类型 描述 node_name text 节点名称。 local_tid bigint 使用此通信流的线程ID。 remote_name text 连接对端节点名称。 remote_tid bigint 连接对端线程ID。 idx integer 通信对端DN在本DN内的标识编号。 sid integer 通信流在物理连接中的标识编号。 tcp_sock integer 通信流所使用的tcp通信socket。 state text 通信流当前的状态。 query_id bigint 通信流对应的debug_query_id编号。 pn_id integer 通信流所执行查询的plan_node_id编号。 send_smp integer 通信流所执行查询send端的smpid编号。 recv_smp integer 通信流所执行查询recv端的smpid编号。 send_bytes bigint 通信流发送的数据总量(单位:Byte)。 time bigint 通信流当前生命周期使用时长(单位:毫秒)。 speed bigint 通信流的平均发送速率(单位:Byte/s)。 quota bigint 通信流当前的通信配额值(单位:Byte)。 wait_quota bigint 通信流等待quota值产生的额外时间开销(单位:毫秒)。 父主题: Comm
  • PG_WORKLOAD_GROUP PG_WORKLOAD_GROUP系统表提供了数据库负载组的信息。 表1 PG_WORKLOAD_GROUP字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 workload_gpname name 负载组名称。 respool_oid oid 绑定到的资源池的id。 act_statements integer 负载组内最大的活跃语句数。 父主题: 系统表
  • 值存储数据类型解析 查找与目标字段准确的匹配。 试着将表达式直接转换成目标类型。如果已知这两种类型之间存在一个已注册的转换函数,那么直接调用该转换函数即可。如果表达式是一个未知类型文本,该文本字符串的内容将交给目标类型的输入转换过程。 检查目标类型是否有长度转换。长度转换是一个从某类型到自身的转换。如果在pg_cast表里面找到一个,那么在存储到目标字段之前先在表达式上应用。这样的转换函数总是接受一个额外的类型为integer的参数,它接收目标字段的atttypmod值(实际上是其声明长度,atttypmod的解释随不同的数据类型而不同),并且它可能接受一个Boolean类型的第三个参数,表示转换是显式的还是隐式的。转换函数负责施加那些长度相关的语义,比如长度检查或者截断。
  • 示例 character存储类型转换。对一个目标列定义为character(20)的语句,下面的语句显示存储值的长度正确: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 openGauss=# CREATE SCHEMA tpcds; openGauss=# CREATE TABLE tpcds.value_storage_t1 ( VS_COL1 CHARACTER(20) )DISTRIBUTE BY HASH (VS_COL1); openGauss=# INSERT INTO tpcds.value_storage_t1 VALUES('abcdef'); openGauss=# SELECT VS_COL1, octet_length(VS_COL1) FROM tpcds.value_storage_t1; vs_col1 | octet_length ----------------------+-------------- abcdef | 20 (1 row) ) openGauss=# DROP TABLE tpcds.value_storage_t1; openGauss=# DROP SCHEMA tpcds; 这里真正发生的事情是两个unknown文本缺省解析成text,这样就允许||操作符解析成text连接。然后操作符的text结果转换成bpchar("空白填充的字符型", character类型内部名称)以匹配目标字段类型。不过,从text到bpchar的转换是二进制兼容的,这样的转换是隐含的并且实际上不做任何函数调用。最后,在系统表里找到长度转换函数bpchar(bpchar, integer, Boolean) 并且应用于该操作符的结果和存储的字段长。这个类型相关的函数执行所需的长度检查和额外的空白填充。
  • ADM_SYNONYMS ADM_SYNONYMS视图显示数据库中所有同义词的信息。需要有系统管理员权限才可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 ADM_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下的该关联对象不一定是表,可以是任何数据库通用对象,例如视图、存储过程、同义词等。 父主题: 系统视图
  • 语法格式 1 2 3 CREATE TABLESPACE tablespace_name [ OWNER user_name ] [ RELATIVE ] LOCATION 'directory' [ MAXSIZE 'space_size' ] [with_option_clause]; 其中普通表空间的with_option_clause为: 1 2 3 WITH ( {filesystem= { 'general'| "general" | general} | random_page_cost = { 'value ' | value } | seq_page_cost = { 'value ' | value }}[,...])
  • 示例 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 TABLESPACE ds_location1 RELATIVE LOCATION 'test_tablespace/test_tablespace_1'; --创建用户joe。 openGauss=# CREATE ROLE joe IDENTIFIED BY '********'; --创建用户jay。 openGauss=# CREATE ROLE jay IDENTIFIED BY '********'; --创建表空间,且所有者指定为用户joe。 openGauss=# CREATE TABLESPACE ds_location2 OWNER joe RELATIVE LOCATION 'test_tablespace/test_tablespace_2'; --把表空间ds_location1重命名为ds_location3。 openGauss=# ALTER TABLESPACE ds_location1 RENAME TO ds_location3; --改变表空间ds_location2的所有者。 openGauss=# ALTER TABLESPACE ds_location2 OWNER TO jay; --删除表空间。 openGauss=# DROP TABLESPACE ds_location2; openGauss=# DROP TABLESPACE ds_location3; --删除用户。 openGauss=# DROP ROLE joe; openGauss=# DROP ROLE jay;
  • 注意事项 系统管理员或者继承了内置角色gs_role_tablespace权限的用户可以创建表空间。 不允许在一个事务块内部执行CREATE TABLESPACE。 执行CREATE TABLESPACE失败,如果内部创建目录(文件)操作成功了就会产生残留的目录(文件),重新创建时需要用户手动清理表空间指定的目录下残留的内容。如果在创建过程中涉及到数据目录下的表空间软连接残留,需要先将软连接的残留文件删除,再重新执行OM相关操作。 CREATE TABLESPACE不支持两阶段事务,如果部分节点执行失败,不支持回滚。 创建表空间前的准备工作参考下述参数说明。 在公有云场景下一般不建议用户使用自定义的表空间。 原因:用户自定义表空间通常配合主存(即默认表空间所在的存储设备,如磁盘)以外的其它存储介质使用,以隔离不同业务可以使用的I/O资源,而在公有云场景下,存储设备都是采用标准化的配置,无其它可用的存储介质,自定义表空间使用不当不利于系统长稳运行以及影响整体性能,因此建议使用默认表空间即可。
  • 示例 --创建一个普通表。 openGauss=# CREATE TABLE my_table (c1 int, c2 int); --创建增量物化视图。 openGauss=# CREATE INCREMENTAL MATERIALIZED VIEW my_imv AS SELECT * FROM my_table; --基表写入数据。 openGauss=# INSERT INTO my_table VALUES(1,1),(2,2); --对增量物化视图my_imv进行增量刷新。 openGauss=# REFRESH INCREMENTAL MATERIALIZED VIEW my_imv; --删除增量物化视图。 openGauss=# DROP MATERIALIZED VIEW my_imv; --删除表my_table。 openGauss=# DROP TABLE my_table;
  • PG_DATABASE PG_DATABASE系统表存储关于可用数据库的信息。 表1 PG_DATABASE字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 datname name 数据库名称。 datdba oid 数据库所有人,通常为其创建者。 encoding integer 数据库的字符编码方式。 datcollate name 数据库使用的排序顺序。 datctype name 数据库使用的字符分类。 datistemplate boolean 是否允许作为模板数据库。 true:表示允许。 false:表示不允许。 datallowconn boolean 这个字段用于保护template0数据库不被更改。 true:表示用户可以连接到这个数据库。 false:表示没有用户可以连接到这个数据库。 datconnlimit integer 该数据库上允许的最大并发连接数,-1表示无限制。 datlastsysoid oid 数据库里最后一个系统OID 。 datfrozenxid xid32 用于跟踪该数据库是否需要为了防止事务ID重叠而进行清理。当前版本该字段已经废弃使用,为保持前向兼容,保留此字段,新增datfrozenxid64用于记录此信息。 dattablespace oid 数据库的缺省表空间。 datcompatibility name 数据库兼容模式。当前支持四种兼容模式:PG、ORA、MYSQL、TD。 datacl aclitem[] 访问权限。 datfrozenxid64 xid 用于跟踪该数据库是否需要为了防止事务ID重叠而进行清理。 datminmxid xid 该数据库中所有在这之前的多事务ID已经被一个事务ID替换。用于跟踪该数据库是否需要为了防止事务ID重叠或者允许收缩pg_clog而进行清理。它是此数据库中所有表的PG_CLASS中relminmxid的最小值。 父主题: 系统表
  • PG_GET_SENDERS_CATCHUP_TIME PG_GET_SENDERS_CATCHUP_TIME视图显示DN上当前活跃的主备发送线程的追赶信息。 表1 PG_GET_SENDERS_CATCHUP_TIME字段 名称 类型 描述 pid bigint 当前sender的线程ID。 lwpid integer 当前sender的lwpid。 local_role text 本地的角色。 peer_role text 对端的角色。 state text 当前sender的复制状态。 type text 当前sender的类型。 catchup_start timestamp with time zone catchup启动的时间。 catchup_end timestamp with time zone catchup结束的时间。 父主题: 系统视图
  • 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 - 哈希桶编号。 virtualxid text - 虚拟事务的id,如果对象不是一个虚拟事务,则为NULL。 transactionid xid - 事务的ID,如果对象不是一个事务,则为NULL。 classid oid PG_CLASS.oid 包含该对象的系统表的OID,如果对象不是普通的数据库对象,则为NULL。 objid oid - 对象在其系统表内的OID,如果对象不是普通的数据库对象,则为NULL。 objsubid smallint - 对于表的一个字段,这是字段编号;对于其他对象类型,这个字段是零;如果这个对象不是普通数据库对象,则为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。 父主题: 系统视图
  • 存储过程支持自治事务 自治事务可以在存储过程中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与创建存储过程语法相同,示例如下。 --建表 create table t2(a int, b int); insert into t2 values(1,2); select * from t2; --创建包含自治事务的存储过程 CREATE OR REPLACE PROCEDURE autonomous_4(a int, b int) AS DECLARE num3 int := a; num4 int := b; PRAGMA AUTONOMOUS_TRANSACTION; BEGIN insert into t2 values(num3, num4); dbe_output.print_line('just use call.'); END; / --创建调用自治事务存储过程的普通存储过程 CREATE OR REPLACE PROCEDURE autonomous_5(a int, b int) AS DECLARE BEGIN dbe_output.print_line('just no use call.'); insert into t2 values(666, 666); autonomous_4(a,b); rollback; END; / --调用普通存储过程 select autonomous_5(11,22); --查看表结果 select * from t2 order by a; 上述例子,最后在回滚的事务块中执行包含自治事务的存储过程,直接说明了自治事务的特性,即主事务的回滚,不会影响自治事务已经提交的内容。 父主题: 自治事务
  • PG_LANGUAGE PG_LANGUAGE系统表登记编程语言,用户可以用这些语言或接口写函数或者存储过程。 表1 PG_LANGUAGE字段 名称 类型 引用 描述 oid oid - 行标识符(隐含字段;必须明确选择)。 lanname name - 语言的名称。 lanowner oid PG_AUTHID.oid 语言的所有者。 lanispl boolean - true:表示用户定义的语言。 false:表示内部语言,比如SQL。 目前,gs_dump仍然使用该字段判断哪种语言需要转储,但是这些可能在将来被其它机制取代。 lanpltrusted boolean - true:这是可信语言,意味着系统相信它不会被授予任何正常SQL执行环境之外的权限。 false:这是不可信语言。只有初始用户可以用不可信语言创建函数。 lanplcallfoid oid PG_PROC.oid 对于非内部语言,这是指向该语言处理器的引用,语言处理器是一个特殊函数, 负责执行以某种语言写的所有函数。 laninline oid PG_PROC.oid 这个字段引用一个负责执行“inline”匿名代码块的函数(DO块)。如果不支持内联块则为零。 lanvalidator oid PG_PROC.oid 这个字段引用一个语言校验器函数,它负责检查新创建的函数的语法和有效性。如果没有提供校验器,则为零。 lanacl aclitem[] - 访问权限。 父主题: 系统表
共100000条
提示

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