华为云用户手册

  • GV_SESSION GV_SESSION视图存储当前会话的所有会话信息。该视图只有管理员可以访问,普通用户需要授权才能访问,该视图同时存在于PG_CATALOG和SYS Schema下。 表1 GV_SESSION字段 名称 类型 描述 inst_id numeric 暂不支持,值为NULL。 saddr raw 暂不支持,值为NULL。 sid bigint 会话ID。 serial# integer 当前活动的后台线程的序号。 audsid numeric 暂不支持,值为NULL。 paddr raw 暂不支持,值为NULL。 schema# numeric 暂不支持,值为NULL。 schemaname name 登录该后台的用户名。 user# oid 登录此后台线程的用户的OID。oid 为0表示此后台线程为全局辅助线程(auxiliary)。 username name 登录此后台线程的用户名。username为空表示此后台线程为全局辅助线程(auxiliary)。 command numeric 暂不支持,值为NULL。 ownerid numeric 暂不支持,值为NULL。 taddr character varying(16) 暂不支持,值为NULL。 lockwait character varying(16) 暂不支持,值为NULL。 machine text 客户端的主机名,这个字段是通过client_addr的反向DNS查找得到。这个字段只有在启动log_hostname且使用IP连接时才非空。 sql_id bigint sql的oid。 client_info text 客户端信息。 event text 语句当前排队状态。可能值是: waiting in queue:表示语句在排队中。 空:表示语句正在运行。 sql_exec_start timestamp with time zone sql执行开始时间。 program text 连接到该后台的应用名。 status text 该后台当前总体状态。可能值是: active:后台正在执行一个查询。 idle:后台正在等待一个新的客户端命令。 idle in transaction:后台在事务中,但事务中没有语句在执行。 idle in transaction (aborted):后台在事务中,但事务中有语句执行失败。 fastpath function call:后台正在执行一个fast-path函数。 disabled:如果后台禁用track_activities,则报告这个状态。 server character varying(9) 暂不支持,值为NULL。 pdml_status character varying(8) 当前会话是否启用DML的并行执行。 port numeric 当前会话的端口号。 process character varying(24) 当前会话的进程号。 logon_time timestamp(0) without time zone 当前会话的登入时间。 last_call_et integer 当前会话上次状态发生改变的时长。 osuser character varying(128) 暂不支持,值为NULL。 terminal character varying(30) 暂不支持,值为NULL。 type character varying(10) 暂不支持,值为NULL。 sql_address raw 暂不支持,值为NULL。 sql_hash_value numeric 暂不支持,值为NULL。 sql_child_number numeric 暂不支持,值为NULL。 sql_exec_id numeric 暂不支持,值为NULL。 prev_sql_addr raw 暂不支持,值为NULL。 prev_hash_value numeric 暂不支持,值为NULL。 prev_sql_id character varying(13) 暂不支持,值为NULL。 prev_child_number numeric 暂不支持,值为NULL。 prev_exec_start timestamp(0) without time zone 暂不支持,值为NULL。 prev_exec_id numeric 暂不支持,值为NULL。 plsql_entry_object_id numeric 暂不支持,值为NULL。 plsql_entry_subprogram_id numeric 暂不支持,值为NULL。 plsql_object_id numeric 暂不支持,值为NULL。 plsql_subprogram_id numeric 暂不支持,值为NULL。 module character varying(64) 暂不支持,值为NULL。 module_hash numeric 暂不支持,值为NULL。 action character varying(64) 暂不支持,值为NULL。 action_hash numeric 暂不支持,值为NULL。 fixed_table_sequence numeric 暂不支持,值为NULL。 row_wait_obj# numeric 暂不支持,值为NULL。 row_wait_file# numeric 暂不支持,值为NULL。 row_wait_block# numeric 暂不支持,值为NULL。 row_wait_row# numeric 暂不支持,值为NULL。 top_level_call# numeric 暂不支持,值为NULL。 pdml_enabled character varying(3) 暂不支持,值为NULL。 failover_type character varying(13) 暂不支持,值为NULL。 failover_method character varying(10) 暂不支持,值为NULL。 failed_over character varying(3) 暂不支持,值为NULL。 resource_consumer_group character varying(32) 暂不支持,值为NULL。 pddl_status character varying(8) 暂不支持,值为NULL。 pq_status character varying(8) 暂不支持,值为NULL。 current_queue_duration numeric 暂不支持,值为NULL。 client_identifier character varying(64) 暂不支持,值为NULL。 blocking_session_status character varying(11) 暂不支持,值为NULL。 blocking_instance numeric 暂不支持,值为NULL。 blocking_session numeric 暂不支持,值为NULL。 final_blocking_session_status character varying(11) 暂不支持,值为NULL。 final_blocking_instance numeric 暂不支持,值为NULL。 final_blocking_session numeric 暂不支持,值为NULL。 seq# numeric 暂不支持,值为NULL。 event# numeric 暂不支持,值为NULL。 p1text character varying(64) 暂不支持,值为NULL。 p1 numeric 暂不支持,值为NULL。 p1raw raw 暂不支持,值为NULL。 p2text character varying(64) 暂不支持,值为NULL。 p2 numeric 暂不支持,值为NULL。 p2raw raw 暂不支持,值为NULL。 p3text character varying(64) 暂不支持,值为NULL。 p3 numeric 暂不支持,值为NULL。 p3raw raw 暂不支持,值为NULL。 wait_class_id numeric 暂不支持,值为NULL。 wait_class# numeric 暂不支持,值为NULL。 wait_class character varying(64) 暂不支持,值为NULL。 wait_time numeric 暂不支持,值为NULL。 seconds_in_wait numeric 暂不支持,值为NULL。 state character varying(19) 暂不支持,值为NULL。 wait_time_micro numeric 暂不支持,值为NULL。 time_remaining_micro numeric 暂不支持,值为NULL。 time_since_last_wait_micro numeric 暂不支持,值为NULL。 service_name character varying(64) 暂不支持,值为NULL。 sql_trace character varying(8) 暂不支持,值为NULL。 sql_trace_waits character varying(5) 暂不支持,值为NULL。 sql_trace_binds character varying(5) 暂不支持,值为NULL。 sql_trace_plan_stats character varying(10) 暂不支持,值为NULL。 session_edition_id numeric 暂不支持,值为NULL。 creator_addr raw 暂不支持,值为NULL。 creator_serial# numeric 暂不支持,值为NULL。 ecid character varying(64) 暂不支持,值为NULL。 sql_translation_profile_id numeric 暂不支持,值为NULL。 pga_tunable_mem numeric 暂不支持,值为NULL。 shard_ddl_status character varying(8) 暂不支持,值为NULL。 con_id numeric 暂不支持,值为NULL。 external_name character varying(1024) 暂不支持,值为NULL。 plsql_debugger_connected character varying(5) 暂不支持,值为NULL。 父主题: 系统视图
  • 执行具有输入参数的语句 准备一个普通语句,通过替换参数(在想要替换参数的地方输入问号)执行它的特定版本。使用EXECUTE语句通过USING子句给定参数执行准备语句。示例如下: EXEC SQL BEGIN DECLARE SECTION; const char *stmt = "INSERT INTO test1 VALUES(?, ?);"; EXEC SQL END DECLARE SECTION; /* PREPARE 准备一个语句用于执行 */ EXEC SQL PREPARE mystmt FROM :stmt; ... /* 单引号为有效字符,若用字符串需用双引号 */ EXEC SQL EXECUTE mystmt USING 42, 'foobar'; /* 当不再需要预备语句时,应该释放它 */ EXEC SQL DEALLOCATE PREPARE name; 父主题: 执行动态SQL语句
  • DBE_SQL_UTIL.create_hint_sql_patch create_hint_sql_patch是用于创建调优SQL PATCH的接口函数,返回执行是否成功。 限制仅初始用户、sysadmin、opradmin、monadmin用户有权限调用。 表1 DBE_SQL_UTIL.create_hint_sql_patch入参和返回值列表 参数 类型 描述 patch_name IN name PATCH名称。 unique_sql_id IN bigint 查询全局唯一ID。 hint_string IN text Hint文本。 description IN text PATCH的备注,默认值为NULL。 enabled IN bool PATCH是否生效,默认值为true。 result OUT bool 执行是否成功。 父主题: DBE_SQL_UTIL Schema
  • 示例 --创建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'),(5,'AAAAAAAABAAAAAAA','reason 2'),(15,'AAAAAAAABAAAAAAA','reason 3'),(25,'AAAAAAAABAAAAAAA','reason 4'),(35,'AAAAAAAABAAAAAAA','reason 5'),(45,'AAAAAAAACAAAAAAA','reason 6'),(55,'AAAAAAAACAAAAAAA','reason 7'); --创建表。 gaussdb=# CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason; --清空表tpcds.reason_t1。 gaussdb=# TRUNCATE TABLE tpcds.reason_t1; --删除表。 gaussdb=# DROP TABLE tpcds.reason_t1; --创建分区表。 gaussdb=# CREATE TABLE tpcds.reason_p ( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100) )PARTITION BY RANGE (r_reason_sk) ( partition p_05_before values less than (05), partition p_15 values less than (15), partition p_25 values less than (25), partition p_35 values less than (35), partition p_45_after values less than (MAXVALUE) ); --插入数据。 gaussdb=# INSERT INTO tpcds.reason_p SELECT * FROM tpcds.reason; --清空分区p_05_before。 gaussdb=# ALTER TABLE tpcds.reason_p TRUNCATE PARTITION p_05_before; --清空分区p_15。 gaussdb=# ALTER TABLE tpcds.reason_p TRUNCATE PARTITION for (13); --清空分区表。 gaussdb=# TRUNCATE TABLE tpcds.reason_p; --删除表。 gaussdb=# DROP TABLE tpcds.reason_p; --删除表。 gaussdb=# DROP TABLE tpcds.reason; --删除SCHEMA。 gaussdb=# DROP SCHEMA tpcds CASCADE;
  • 参数说明 ONLY 如果声明ONLY,只有指定的表会被清空。如果没有声明ONLY,这个表以及其所有子表(若有)会被清空。 table_name 目标表的名称(可以有模式修饰)。 取值范围:已存在的表名。 CONTINUE IDENTITY 不改变序列的值。这是缺省值。 CASCADE | RESTRICT CASCADE:级联清空所有由于CASCADE而被添加到组中的表。 RESTRICT(缺省值):如果其他表在该表上有外键引用则拒绝清空。 PURGE 默认将表数据放入回收站中,PURGE直接清理。 partition_name 目标分区表的分区名。 取值范围:已存在的分区名。 partition_value 指定的分区键值。 通过PARTITION FOR子句指定的这一组值,可以唯一确定一个分区。 取值范围:需要进行删除数据分区的分区键的取值范围。 使用PARTITION FOR子句时,partition_value所在的整个分区会被清空。
  • 注意事项 TRUNCATE TABLE在功能上与不带WHERE子句DELETE语句相同:二者均删除表中的全部行。 TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少: DELETE语句每次删除一行,并在事务日志中为所删除每行记录一项。 TRUNCATE TABLE通过释放存储表数据所用数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,DELETE,DROP三者的差异如下: TRUNCATE TABLE,删除内容,释放空间,但不删除定义。 DELETE TABLE,删除内容,不删除定义,不释放空间。 DROP TABLE,删除内容和定义,释放空间。
  • 语法格式 清理表数据。 TRUNCATE [ TABLE ] [ ONLY ] {table_name [ * ]} [, ... ] [ CONTINUE IDENTITY ] [ CASCADE | RESTRICT] [ PURGE ]}; 清理表分区的数据。 ALTER TABLE [ IF EXISTS ] { [ ONLY ] table_name | table_name * | ONLY ( table_name ) } TRUNCATE PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ];
  • 层次递归查询函数 层次递归查询语句中可使用以下函数返回连接路径上的相关信息。 sys_connect_by_path(col, separator) 描述:仅在层次递归查询中适用,用于返回从根节点到当前行的连接路径。 参数col为在路径中显示的列的名称,只支持类型为CHAR/VARCHAR/NVARCHAR2/TEXT的列,参数separator为路径节点之间的分隔符。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 gaussdb=# 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 gaussdb=# 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) 父主题: 函数和操作符
  • 语法 语法请参见图1。 图1 call_anonymous_block::= using_clause子句的语法参见图2。 图2 using_clause::= 对以上语法格式的解释如下: 匿名块程序实施部分,以BEGIN语句开始,以END语句停顿,以一个分号结束。 USING [IN|OUT|IN OUT] bind_argument,用于指定存放传递给存储过程参数值的变量。bind_argument前的修饰符与对应参数的修饰符一致。 匿名块中间的输入输出参数使用占位符来指明,要求占位符个数与参数个数相同,并且占位符所对应参数的顺序和USING中参数的顺序一致。 目前GaussDB在动态语句调用匿名块时,EXCEPTION语句中暂不支持使用占位符进行输入输出参数的传递。 不支持调用带有占位符的重载函数。 不支持绑定参数时使用PERFORM关键字调用存储过程。 不支持同一条语句同时使用匿名块内声明的变量和绑定参数。 仅支持匿名块中调用SQL语句以及带有out/inout参数的存储过程绑定参数,其余绑定参数场景皆不支持。例如:匿名块中使用表达式以及cursor等、匿名块中嵌套调用动态语句。
  • MY_PART_KEY_COLUMNS MY_PART_KEY_COLUMNS视图显示了当前用户拥有的分区表或分区索引的分区键列的相关信息。该视图所有用户可访问,仅可查看当前用户所属信息。该视图同时存在于PG_CATALOG和SYS schema下。 表1 MY_PART_KEY_COLUMNS字段 名称 类型 描述 name character varying(128) 分区表名或索引名。 object_type character varying(128) 对象类型。 若分区为分区表,此列为table。 若分区为分区索引,此列为index。 column_name character varying(4000) 分区表或索引的键列名。 column_position numeric 列在分区中的位置。 collated_column_id numeric 暂不支持,值为NULL。 父主题: 系统视图
  • PG_REPLICATION_SLOTS PG_REPLICATION_SLOTS视图显示复制槽的信息。 表1 PG_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 预留参数。 confirmed_flush text 逻辑复制槽专用,客户端确认接收到的日志位置。 confirmed_csn xid 逻辑复制槽专用,客户端确认接收到的日志中最后一个事务对应的CSN。 示例: gaussdb=# select * from pg_replication_slots; slot_name | plugin | slot_type | datoid | database | active | xmin | catalog_xmin | restart_lsn | dummy_standby | confirmed_flush | confirmed_csn -----------+----------------+-----------+--------+----------+--------+------+--------------+-------------+---------------+-----------------+--------------- dn_6002 | | physical | 0 | | t | | | 0/3622B528 | f | | dn_6003 | | physical | 0 | | t | | | 0/3622B528 | f | | slot_lsn | mppdb_decoding | logical | 131072 | db_test | f | | 66658 | 0/36252350 | f | 0/362523D0 | slot_test | mppdb_decoding | logical | 131072 | db_test | f | | 66658 | 0/36251718 | f | | 10025527 (4 rows) 在DN上执行查询,LSN序逻辑复制槽的confirmed_csn查询结果为空,CSN序逻辑复制槽的confirmed_flush查询结果为空。 父主题: 系统视图
  • DICTIONARY DICTIONARY视图显示数据库中的数据字典表和系统视图的描述信息。所有用户都可以访问,该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DICTIONARY字段 名称 类型 描述 table_name character varying(128) 对象的名称。 comments character varying(4000) 对象上的文本注释。 父主题: 系统视图
  • DBE_PLDEBUGGER Schema DBE_PLDEBUGGER Schema下的系统函数用于调试存储过程,目前支持的接口及其描述如下所示。仅管理员有权限执行这些调试接口,但无权限在该schema上修改和创建新函数。普通用户只能调试在public schema或用户创建schema下的非系统函数,禁止普通用户调试系统函数。 当在函数体中创建用户时,调用attach、next、continue、 info_code、step、info_breakpoint、backtrace、 finish中会返回密码的明文。因此不建议用户在函数体中创建用户。 对应权限角色为gs_role_pldebugger,可以由管理员用户通过如下命令将debugger权限赋权给该用户。 GRANT gs_role_pldebugger to user; 需要有两个客户端连接数据库,一个客户端负责执行调试接口作为debug端,另一个客户端执行调试函数,控制server端存储过程执行。示例如下。 准备调试 通过PG_PROC,查找到待调试存储过程的oid,并执行DBE_PLDEBUGGER.turn_on(oid)。本客户端就会作为server端使用。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 gaussdb=# CREATE OR REPLACE PROCEDURE test_debug ( IN x INT) AS BEGIN INSERT INTO t1 (a) VALUES (x); DELETE FROM t1 WHERE a = x; END; / CREATE PROCEDURE gaussdb=# SELECT OID FROM PG_PROC WHERE PRONAME='test_debug'; oid ------- 16389 (1 row) gaussdb=# SELECT * FROM DBE_PLDEBUGGER.turn_on(16389); nodename | port ----------+------ datanode | 0 (1 row) 开始调试 server端执行存储过程,会在存储过程内第一条SQL语句前hang住,等待debug端发送的调试消息。仅支持直接执行存储过程的调试,不支持通过trigger调用执行的存储过程调试。 1 gaussdb=# call test_debug(1); 再起一个客户端,作为debug端,通过turn_on返回的数据,调用DBE_PLDEBUGGER.attach关联到该存储过程上进行调试。 1 2 3 4 5 gaussdb=# SELECT * FROM DBE_PLDEBUGGER.attach('datanode',0); funcoid | funcname | lineno | query ---------+------------+--------+---------------------------------- 16389 | test_debug | 3 | INSERT INTO t1 (a) VALUES (x); (1 row) 在执行attach的客户端调试,执行下一条statement。 1 2 3 4 5 gaussdb=# SELECT * FROM DBE_PLDEBUGGER.next(); funcoid | funcname | lineno | query ---------+------------+--------+---------------------- 16389 | test_debug | 0 | [EXECUTION FINISHED] (1 row) 在执行attach的客户端调试,可以执行以下变量操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 gaussdb=# SELECT * FROM DBE_PLDEBUGGER.info_locals(); --打印全部变量 varname | vartype | value | package_name | isconst ---------+---------+-------+--------------+--------- x | int4 | 1 | | f (1 row) gaussdb=# SELECT * FROM DBE_PLDEBUGGER.set_var('x', 2); --变量赋值 set_var --------- t (1 row) gaussdb=# SELECT * FROM DBE_PLDEBUGGER.print_var('x'); --打印单个变量 varname | vartype | value | package_name | isconst ---------+---------+-------+--------------+--------- x | int4 | 2 | | f (1 row) 直接执行完成当前正在调试的存储过程。 1 2 3 4 5 gaussdb=# SELECT * FROM DBE_PLDEBUGGER.continue(); funcoid | funcname | lineno | query ---------+------------+--------+---------------------- 16389 | test_debug | 0 | [EXECUTION FINISHED] (1 row) 直接退出当前正在调试的存储过程,不执行尚未执行的语句。 1 2 3 4 5 gaussdb=# SELECT * FROM DBE_PLDEBUGGER.abort(); abort ------- t (1 row) client端查看代码信息并识别可以设置断点行号。 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT * FROM DBE_PLDEBUGGER.info_code(16389); lineno | query | canbreak --------+-----------------------------------------------------------+---------- | CREATE OR REPLACE PROCEDURE public.test_debug( IN x INT) | f 1 | AS DECLARE | f 2 | BEGIN | f 3 | INSERT INTO t1 (a) VALUES (x); | t 4 | DELETE FROM t1 WHERE a = x; | t 5 | END; | f 6 | / | f (7 rows) 设置断点。 1 2 3 4 5 gaussdb=# SELECT * FROM DBE_PLDEBUGGER.add_breakpoint(16389,4); breakpointno -------------- 0 (1 row) 查看断点信息。 1 2 3 4 5 gaussdb=# SELECT * FROM DBE_PLDEBUGGER.info_breakpoints(); breakpointno | funcoid | lineno | query | enable --------------+---------+--------+---------------------------------+-------- 0 | 16389 | 4 | DELETE FROM t1 WHERE a = x; | t (1 row) 执行至断点。 1 2 3 4 5 gaussdb=# SELECT * FROM DBE_PLDEBUGGER.continue(); funcoid | funcname | lineno | query ---------+------------+--------+--------------------------------- 16389 | test_debug | 4 | DELETE FROM t1 WHERE a = x; (1 row) 存储过程执行结束后,调试会自动退出,再进行调试需要重新attach关联。如果server端不需要继续调试,可执行turn_off关闭,或退出session。具体调试接口请见下面列表。 表1 DBE_PLDEBUGGER 接口名称 描述 DBE_PLDEBUGGER.turn_on server端调用,标记存储过程可以调试,调用后执行该存储过程时会hang住等待调试信息。 DBE_PLDEBUGGER.turn_off server端调用,标记存储过程关闭调试。 DBE_PLDEBUGGER.local_debug_server_info server端调用,打印本session内所有已turn_on的存储过程。 DBE_PLDEBUGGER.attach debug端调用,关联到正在调试存储过程。 DBE_PLDEBUGGER.info_locals debug端调用,打印正在调试的存储过程中的变量当前值。 DBE_PLDEBUGGER.next debug端调用,单步执行。 DBE_PLDEBUGGER.continue debug端调用,继续执行,直到断点或存储过程结束。 DBE_PLDEBUGGER.abort debug端调用,停止调试,server端报错长跳转。 DBE_PLDEBUGGER.print_var debug端调用,打印正在调试的存储过程中指定的变量当前值。 DBE_PLDEBUGGER.info_code debug和server端都可以调用,打印指定存储过程的源语句和各行对应的行号。 DBE_PLDEBUGGER.step debug端调用,单步进入执行。 DBE_PLDEBUGGER.add_breakpoint debug端调用,新增断点。 DBE_PLDEBUGGER.delete_breakpoint debug端调用,删除断点。 DBE_PLDEBUGGER.info_breakpoints debug端调用,查看当前的所有断点。 DBE_PLDEBUGGER.backtrace debug端调用,查看当前的调用栈。 DBE_PLDEBUGGER.enable_breakpoint debug端调用,激活被禁用的断点。 DBE_PLDEBUGGER.disable_breakpoint debug端调用,禁用已激活的断点。 DBE_PLDEBUGGER.finish debug端调用,继续调试,直到断点或返回上一层调用栈。 DBE_PLDEBUGGER.set_var debug端调用,为变量进行赋值操作。 DBE_PLDEBUGGER.turn_on DBE_PLDEBUGGER.turn_off DBE_PLDEBUGGER.local_debug_server_info DBE_PLDEBUGGER.attach DBE_PLDEBUGGER.info_locals DBE_PLDEBUGGER.next DBE_PLDEBUGGER.continue DBE_PLDEBUGGER.abort DBE_PLDEBUGGER.print_var DBE_PLDEBUGGER.info_code DBE_PLDEBUGGER.step DBE_PLDEBUGGER.add_breakpoint DBE_PLDEBUGGER.delete_breakpoint DBE_PLDEBUGGER.info_breakpoints DBE_PLDEBUGGER.backtrace DBE_PLDEBUGGER.enable_breakpoint DBE_PLDEBUGGER.disable_breakpoint DBE_PLDEBUGGER.finish DBE_PLDEBUGGER.set_var 父主题: Schema
  • PG_DIRECTORY PG_DIRECTORY系统表用于保存用户添加的directory对象,可以通过CREATE DIRECTORY语句向该表中添加记录,当enable_access_server_directory=off时,只允许初始用户创建directory对象;当enable_access_server_directory=on时,具有SYSADMIN权限的用户和继承了内置角色gs_role_directory_create权限的用户可以创建directory对象。普通用户需要授权才能访问该表。 表1 PG_DIRECTORY字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 dirname name 目录对象的名称。 owner oid 目录对象的所有者。 dirpath text 目录路径。 diracl aclitem[] 访问权限。 父主题: 系统表
  • GS_JOB_ARGUMENT GS_JOB_ARGUMENT系统表提供了DBE_SCHEDULER定时任务和程序的参数属性。 表1 GS_JOB_ARGUMENT字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 argument_position integer 定时任务或程序的参数位置。 argument_type name 定时任务或程序的参数类型。 job_name text 定时任务或程序名。 argument_name text 定时任务或程序的参数名(定时任务继承了程序的参数名,所以为空)。 argument_value text 定时任务的参数值(程序本身无法绑定值)。 default_value text 程序的参数默认值。 父主题: 系统表
  • Package支持自治事务 自治事务可以在package中的存储过程或者函数中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与创建package中存储过程或函数语法相同,示例如下。 --建表 gaussdb=# drop table if exists t2; gaussdb=# create table t2(a int, b int); CREATE TABLE gaussdb=# insert into t2 values(1,2); INSERT 0 1 gaussdb=# select * from t2; a | b ---+--- 1 | 2 (1 row) --创建包含自治事务的package中的存储过程和函数 gaussdb=# CREATE OR REPLACE PACKAGE autonomous_pkg AS PROCEDURE autonomous_4(a int, b int); FUNCTION autonomous_32(a int ,b int) RETURN int; END autonomous_pkg; / CREATE PACKAGE gaussdb=# CREATE OR REPLACE PACKAGE body autonomous_pkg AS 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); END; FUNCTION autonomous_32(a int ,b int) RETURN int AS DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN insert into t2 values(a, b); return 1; END; END autonomous_pkg; / CREATE PACKAGE BODY --创建调用package自治事务存储过程和函数的普通存储过程 gaussdb=# CREATE OR REPLACE PROCEDURE autonomous_5(a int, b int) AS DECLARE va int; BEGIN insert into t2 values(666, 666); autonomous_pkg.autonomous_4(a,b); va := autonomous_pkg.autonomous_32(a + 1, b + 1); rollback; END; / CREATE PROCEDURE --调用普通存储过程 gaussdb=# select autonomous_5(11,22); autonomous_5 -------------- (1 row) --查看表结果 gaussdb=# select * from t2 order by a; a | b ----+---- 1 | 2 11 | 22 12 | 23 (3 rows) 上述例子,最后在回滚的事务块中执行包含package自治事务的存储过程和函数,直接说明了自治事务的特性,即主事务的回滚,不会影响自治事务已经提交的内容。 父主题: 自治事务
  • ADM_PART_COL_STATISTICS ADM_PART_COL_STATISTICS视图显示数据库中所有表分区的列统计信息和直方图信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_PART_COL_STATISTICS字段 名称 类型 描述 owner character varying(128) 分区表的所有者。 table_name character varying(128) 表名。 partition_name character varying(128) 表分区名称。 column_name character varying(4000) 列名。 num_distinct numeric 暂不支持,值为NULL。 low_value raw 暂不支持,值为NULL。 high_value raw 暂不支持,值为NULL。 density numeric 暂不支持,值为NULL。 num_nulls numeric 暂不支持,值为NULL。 num_buckets numeric 暂不支持,值为NULL。 sample_size numeric 暂不支持,值为NULL。 last_analyzed date 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 notes character varying(63) 暂不支持,值为NULL。 avg_col_len numeric 暂不支持,值为NULL。 histogram character varying(15) 暂不支持,值为NULL。 schema character varying(64) 列所属的名称空间的名称。 父主题: 系统视图
  • GLOBAL_STAT_DATABASE 显示数据库各节点的统计信息(不同节点下数据库的状态信息不汇总)。 表1 GLOBAL_STAT_DATABASE字段 名称 类型 描述 node_name name 节点名称。 datid oid 数据库的OID。 datname name 数据库的名称。 numbackends integer 当前连接到该数据库的后端数。 xact_commit bigint 此数据库中已经提交的事务数。 xact_rollback bigint 此数据库中已经回滚的事务数。 blks_read bigint 在这个数据库中读取的磁盘块的数量。 blks_hit bigint 高速缓存中已经命中的磁盘块的次数,这种情况下不需要从磁盘读取(高速缓存只包括数据库内核缓冲区高速缓存,不包括操作系统的文件系统缓存)。 tup_returned bigint 该数据库中顺序扫描获取的活跃行数和索引扫描返回的索引行数。 tup_fetched bigint 当前数据库通过索引返回的行数。 tup_inserted bigint 插入的行数。 tup_updated bigint 更新的行数。 tup_deleted bigint 删除的行数。 conflicts bigint 由于与数据库回放发生冲突而取消的查询数量(冲突仅在备机上发生)。请参见STAT_DATABASE_CONFLICTS获取更多信息。 temp_files bigint 该数据库查询语句创建的临时文件数量。统计所有临时文件,不受GUC参数log_temp_files设置值影响。 temp_bytes bigint 该数据库查询语句写入临时文件的数据总量。统计所有临时文件,不受GUC参数log_temp_files设置值影响。 deadlocks bigint 在该数据库中检索的死锁数。 blk_read_time double precision 通过数据库后端读取数据文件块花费的时间,以毫秒计算。 blk_write_time double precision 通过数据库后端写入数据文件块花费的时间,以毫秒计算。 stats_reset timestamp with time zone 重置当前状态统计的时间。 父主题: Object
  • ADM_DATA_FILES ADM_DATA_FILES视图显示关于数据库文件的描述。默认只有系统管理员权限才可以访问此视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_DATA_FILES字段 名称 类型 描述 tablespace_name name 文件所属的表空间的名称。 bytes double precision 文件的字节长度。 父主题: 系统视图
  • PG_LARGEOBJECT_METADATA PG_LARGEOBJECT_METADATA系统表存储与大数据相关的元数据。实际的大对象数据存储在PG_LARGEOBJECT里。 表1 PG_LARGEOBJECT_METADATA字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 lomowner oid PG_AUTHID.oid 大对象的所有者。 lomacl aclitem[] - 访问权限。 父主题: 系统表
  • DB4AI.MANAGE_SNAPSHOT_INTERNAL MANAGE_SNAPSHOT_INTERNAL是DB4AI.PUBLISH_SNAPSHOT和DB4AI.ARCHIVE_SNAPSHOT函数的内置执行函数。函数存在信息校验,无法直接调用。 表1 DB4AI.MANAGE_SNAPSHOT_INTERNAL入参和返回值列表 参数 类型 描述 i_schema IN NAME 快照存储的模式名字 i_name IN NAME 快照名称 publish IN BOOLEAN 是否是发布状态 res OUT db4ai.snapshot_name 结果 父主题: DB4AI Schema
  • PG_STAT_BGWRITER PG_STAT_BGWRITER视图显示后端写进程活动的统计信息。 表1 PG_STAT_BGWRITER字段 名称 类型 描述 checkpoints_timed bigint 定期执行的检查点数。 checkpoints_req bigint 主动执行的检查点数。 checkpoint_write_time double precision 将文件写入到磁盘时,在检查点处理部分花费的时间总量,以毫秒为单位。 checkpoint_sync_time double precision 将文件同步到磁盘时,在检查点处理部分花费的时间总量,以毫秒为单位。 buffers_checkpoint bigint 检查点写入的缓冲区的数量。 buffers_clean bigint 后端写进程写入的缓冲区的数量。 maxwritten_clean bigint 后端写进程因写入的缓冲区过多导致的清理扫描停止的次数。 buffers_backend bigint 后端直接写入的缓冲区的数量。 buffers_backend_fsync bigint 后端自己执行fsync调用的次数 (通常情况下,即使后端自己执行了这些写入动作,后端写进程也会再处理一次)。 buffers_alloc bigint 分配的缓冲区数量。 stats_reset timestamp with time zone 这些统计被重置的时间。 父主题: 系统视图
  • 容灾场景 某客户有两套数据库实例,其中A数据库实例为生产数据库实例,B数据库实例为容灾数据库实例。当客户执行容灾切换时,A数据库实例将降为容灾数据库实例,B数据库实例将升为生产数据库实例。此时为了避免修改配置文件导致的应用重启或重新发版,客户可在初始配置文件时,即将A、B数据库实例写入连接串中。此时在主数据库实例不可连接时,驱动将尝试对容灾数据库实例建连。例如A数据库实例为{node1,node2,node3}。B数据库实例为{node4,node5,node6}。 url可参考如下进行配置: jdbc:postgresql://node1,node2,node3,node4,node5,node6/database?priorityServers=3
  • 高性能场景 某客户对于相同sql可能多次执行,仅是传参不同,为了提升执行效率,可开启prepareThreshold参数,避免重复生成执行计划,url可参考如下进行配置: jdbc:postgresql://node1/database?prepareThreshold=5 某客户一次查询1000万数据,为避免同时返回造成内存溢出,可使用defaultRowFetchSize,url可参考如下进行配置: jdbc:postgresql://node1/database?defaultRowFetchSize=50000 某客户需要批量插入1000万数据,为提升效率,可使用batchMode,url可参考如下进行配置: jdbc:postgresql://node1/database?batchMode=on
  • 自动寻主场景 某客户存在一套集中式数据库实例,包含1主2备三个节点{node1,node2,node3},其中node1为主节点,node2、node3为备节点。 客户希望应用连接能建立在主DN上,并在发生主备切换时,自动选择新的主节点建连,则url可参考如下进行配置: jdbc:postgresql://node1,node2,node3/database?targetServerType=master
  • 属性 游标的属性用于控制程序流程或者了解程序的状态。当运行DML语句时,PL/SQL打开一个内建游标并处理结果,游标是维护查询结果的内存中的一个区域,游标在运行DML语句时打开,完成后关闭。显式游标的属性为: %FOUND布尔型属性:当最近一次读记录时成功返回,则值为TRUE。 %NOTFOUND布尔型属性:与%FOUND相反。 %ISOPEN布尔型属性:当游标已打开时返回TRUE。 %ROWCOUNT数值型属性:返回已从游标中读取的记录数。
  • 处理步骤 显式游标处理需六个PL/SQL步骤: 定义静态游标:就是定义一个游标名,以及与其相对应的SELECT语句。 定义静态游标的语法图,请参见图1。 图1 static_cursor_define::= 或 图2 static_cursor_define::= 参数说明: cursor_name:定义的游标名。 parameter:游标参数,只能为输入参数,其格式为: parameter_name datatype select_statement:查询语句。 根据执行计划的不同,系统会自动判断该游标是否可以用于以倒序的方式检索数据行。 语法上支持parameter为输出参数,但其行为与输入参数保持一致。 定义动态游标:指ref游标,可以通过一组静态的SQL语句动态的打开游标。首先定义ref游标类型,然后定义该游标类型的游标变量,在打开游标时通过OPEN FOR动态绑定SELECT语句。 定义动态游标的语法图,请参见图3和图4。 图3 cursor_typename::= 图4 dynamic_cursor_define::= 打开静态游标:就是执行游标所对应的SELECT语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合。如果游标查询语句中带有FOR UPDATE选项,OPEN语句还将锁定数据库表中游标结果集合对应的数据行。 打开静态游标的语法图,请参见图5。 图5 open_static_cursor::= 打开动态游标:可以通过OPEN FOR语句打开动态游标,动态绑定SQL语句。 打开动态游标的语法图,请参见图6。 图6 open_dynamic_cursor::= PL/SQL程序不能用OPEN语句重复打开一个游标。 提取游标数据:检索结果集合中的数据行,放入指定的输出变量中。 提取游标数据的语法图,请参见图7。 图7 fetch_cursor::= 对该记录进行处理。 继续处理,直到活动集合中没有记录。 关闭游标:当提取和处理完游标结果集合数据后,应及时关闭游标,以释放该游标所占用的系统资源,并使该游标的工作区变成无效,不能再使用FETCH语句获取其中数据。关闭后的游标可以使用OPEN语句重新打开。 关闭游标的语法图,请参见图8。 图8 close_cursor::=
  • LOCAL_REL_IOSTAT 获取当前节点中数据文件I/O状态的累计值,显示为所有数据文件I/O状态的总和。 表1 LOCAL_REL_IOSTAT字段 名称 类型 描述 phyrds bigint 读物理文件的数目。 phywrts bigint 写物理文件的数目。 phyblkrd bigint 读物理文件的块的数目。 phyblkwrt bigint 写物理文件的块的数目。 父主题: File
  • 执行没有结果集的语句 执行EXECUTE IMMEDIATE命令示例如下: EXEC SQL BEGIN DECLARE SECTION; const char *stmt = "CREATE TABLE test1 (...);"; EXEC SQL END DECLARE SECTION; EXEC SQL EXECUTE IMMEDIATE :stmt; EXECUTE IMMEDIATE可以用于不返回结果集的SQL语句,比如:DDL、INSERT、UPDATE和DELETE语句。但不能用这种方式执行检索数据的语句,比如:SELECT语句。 父主题: 执行动态SQL语句
  • 连接参数 表1 连接参数 参数 描述 host 要连接的主机名。如果主机名以斜杠开头,则它声明使用Unix域套接字通讯而不是TCP/IP通讯,该值就是套接字文件所存储的目录。如果没有声明host,那么默认是与位于/tmp目录(或者安装数据库的时候声明的套接字目录)里面的Unix-域套接字连接。在没有Unix域套接字的机器上,默认与localhost连接。 接受以‘,’分割的字符串来指定多个主机名,支持指定多个主机名。 hostaddr 与之连接的主机的IP地址,是标准的IPv4地址格式,比如,172.28.40.9。如果机器支持IPv6,那么也可以使用IPv6的地址。如果声明了一个非空的字符串,那么使用TCP/IP通讯机制。 接受以‘,’分割的字符串来指定多个IP地址,支持指定多个IP地址。 使用hostaddr取代host可以让应用避免一次主机名查找,这一点对于那些有时间约束的应用来说可能是非常重要的。不过,GSSAPI或SSPI认证方法要求主机名(host)。因此,应用下面的规则: 如果声明了不带hostaddr的host那么就强制进行主机名查找。 如果声明中没有host,hostaddr的值给出服务器网络地址。如果认证方法要求主机名,那么连接尝试将失败。 如果同时声明了host和hostaddr,那么hostaddr的值作为服务器网络地址。host的值将被忽略,除非认证方法需要它,在这种情况下它将被用作主机名。 须知: 如果host不是网络地址hostaddr处的服务器名,那么认证很有可能失败。 如果主机名(host)和主机地址都没有,那么libpq将使用一个本地的Unix域套接字进行连接,或者是在没有Unix域套接字的机器上,它将尝试与localhost连接。 port 主机服务器的端口号,或者在Unix域套接字连接时的套接字扩展文件名。 接受以‘,’分割的字符串来指定多个端口号,支持指定多个端口号。 user 要连接的用户名,缺省是与运行该应用的用户操作系统名同名的用户。 dbname 数据库名,缺省和用户名相同。 password 如果服务器要求口令认证,所用的口令。 connect_timeout 连接的最大等待时间,以秒计(用十进制整数字符串书写),0或者不声明表示无穷。不建议把连接超时的值设置小于2秒。 client_encoding 为这个连接设置client_encoding配置参数。除了对应的服务器选项接受的值,你可以使用auto从客户端中的当前环境中确定正确的编码(Unix系统上是LC_CTYPE环境变量)。 tty 忽略(以前,该参数指定了发送服务器调试输出的位置)。 options 添加命令行选项以在运行时发送到服务器。 application_name 为application_name配置参数指定一个值,表明当前用户身份。 fallback_application_name 为application_name配置参数指定一个后补值。如果通过一个连接参数或PGAPPNAME环境变量没有为application_name给定一个值,将使用这个值。在一般工具程序中,若设置一个默认名,但不希望这个默认名被用户覆盖,可以通过指定一个后补值来实现。 keepalives 控制客户端侧的TCP保持激活是否使用。缺省值是1,意思为打开,但是如果不想要保持激活,可以更改为0,意思为关闭。通过Unix域套接字做的连接忽略这个参数。 keepalives_idle 在TCP应该发送一个保持激活的信息给服务器之后,控制不活动的秒数。0值表示使用系统缺省。通过Unix域套接字做的连接或者如果禁用了保持激活则忽略这个参数。 keepalives_interval 在TCP保持激活信息没有被应该传播的服务器承认之后,控制秒数。0值表示使用系统缺省。通过Unix域套接字做的连接或者如果禁用了保持激活则忽略这个参数。 keepalives_count 控制TCP发送保持激活信息的次数。0值表示使用系统缺省。通过Unix域套接字做的连接或者如果禁用了保持激活则忽略这个参数。 tcp_user_timeout 在支持TCP_USER_TIMEOUT套接字选项的操作系统上,指定传输的数据在TCP连接被强制关闭之前可以保持未确认状态的最大时长。0值表示使用系统缺省。通过Unix域套接字做的连接忽略这个参数。 rw_timeout 设置客户端连接读写超时时间。 sslmode 启用SSL加密的方式: disable:不使用SSL安全连接。 allow:如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。 prefer:如果数据库支持,那么首选使用SSL安全加密连接,但不验证数据库服务器的真实性。 require:必须使用SSL安全连接,但是只做了数据加密,而并不验证数据库服务器的真实性。 verify-ca:必须使用SSL安全连接,当前windows ODBC不支持cert方式认证。 verify-full:必须使用SSL安全连接,当前windows ODBC不支持cert方式认证。 sslcompression 如果设置为1(默认),SSL连接之上传送的数据将被压缩(这要求OpenSSL版本为0.9.8或更高)。如果设置为0,压缩将被禁用(这要求OpenSSL版本为1.0.0或更高)。如果建立的是一个没有SSL的连接,这个参数会被忽略。如果使用的OpenSSL版本不支持该参数,它也会被忽略。压缩会占用CUP时间,但是当瓶颈为网络时可以提高吞吐量。如果CPU性能是限制因素,禁用压缩能够改进响应时间和吞吐量。 sslcert 这个参数指定客户端SSL证书的文件名。如果没有建立SSL连接,这个参数会被忽略。 sslkey 这个参数指定用于客户端证书的密钥位置。它能够指定一个从外部“引擎”(引擎是OpenSSL的可载入模块)得到的密钥。一个外部引擎说明应该由一个冒号分隔的引擎名称以及一个引擎相关的关键标识符组成。如果没有建立SSL连接,这个参数会被忽略。 sslrootcert 这个参数指定一个包含SSL证书机构(CA)证书的文件名称。如果该文件存在,服务器的证书将被验证是由这些机构之一签发。 sslcrl 这个参数指定SSL证书撤销列表(CRL)的文件名。列在这个文件中的证书如果存在,在尝试认证该服务器证书时会被拒绝。 requirepeer 这个参数指定服务器的操作系统用户,例如requirepeer=postgres。当建立一个Unix域套接字连接时,如果设置了这个参数,客户端在连接开始时检查服务器进程是否运行在指定的用户名之下。如果发现不是,该连接会被一个错误中断。这个参数能被用来提供与TCP/IP连接上SSL证书相似的服务器认证(注意,如果Unix域套接字在/tmp或另一个公共可写的位置,任何用户能启动一个在那里侦听的服务器。使用这个参数来保证所连接的是一个由可信用户运行的服务器)。这个选项只在实现了peer认证方法的平台上支持。 krbsrvname 当用GSSAPI认证时,要使用的Kerberos服务名。为了让Kerberos认证成功,这必须匹配在服务器配置中指定的服务名。 gsslib 用于GSSAPI认证的GSS库。只用在Windows上。设置为gssapi可强制libpq用GSSAPI库来代替默认的SSPI进行认证。 service 用于附加参数的服务名。它指定保持附加连接参数的pg_service.conf中的一个服务名。这允许应用只指定一个服务名,这样连接参数能被集中维护。 authtype 不再使用“authtype”,因此将其标记为“不显示”。将其保留在数组中,以免拒绝旧应用程序中的conninfo字符串,这些应用程序可能仍在尝试设置它。 remote_nodename 指定连接本地节点的远端节点名称。 localhost 指定在一个连接通道中的本地地址。 localport 指定在一个连接通道中的本地端口。 fencedUdfRPCMode 控制fenced UDF RPC协议是使用unix域套接字或特殊套接字文件名。缺省值是0,意思为关闭,使用unix domain socket模式,文件类型为“.s.PGSQL.%d”,但是要使用fenced udf ,文件类型为.s.fencedMaster_unixdomain,可以更改为1,意思为开启。 replication 这个选项决定是否该连接应该使用复制协议而不是普通协议。这是PostgreSQL的复制连接以及pg_basebackup之类的工具在内部使用的协议,但也可以被第三方应用使用。支持下列值,大小写无关: true、on、yes、1:连接进入到物理复制模式。 database:连接进入到逻辑复制模式,连接到dbname参数中指定的数据库。 false、off、no、0:该连接是一个常规连接,这是默认行为。 在物理或者逻辑复制模式中,仅能使用简单查询协议。 backend_version 传递到远端的后端版本号。 prototype 设置当前协议级别,默认:PROTO_TCP。 enable_ce 控制是否允许客户端连接全密态数据库。默认值为0,如果需要开启密态等值查询基本能力,则修改为1。。 connection_info Connection_info是一个包含driver_name、driver_version、driver_path和os_user的json字符串。 如果不为NULL,使用connection_info忽略connectionExtraInf 如果为NULL,生成与libpq相关的连接信息字符串,当connectionExtraInf为false时connection_info只有driver_name和driver_version。 connectionExtraInf 设置connection_info是否存在扩展信息,默认值为0,如果包含其他信息,则需要设置为1。 target_session_attrs 设定连接的主机的类型。主机的类型和设定的值一致时才能连接成功。指定多IP时才会校验此参数。target_session_attrs的设置规则如下: any:可以对所有类型的主机进行连接。 read-write:当连接的主机允许可读可写时,才进行连接。 read-only:仅对可读的主机进行连接。 primary(默认值):仅对主备系统中的主机能进行连接。 standby:仅对主备系统中的备机进行连接。 prefer-standby:首先尝试找到一个备机进行连接。如果对hosts列表的所有机器都连接失败,那么尝试“any”模式进行连接。 父主题: 基于libpq开发
共100000条