返回首页

gbase数据、南大通用产品文档:GBase8a_t_gcluster_kafka_consumer_force_compare_field

更新日期:2024年09月11日

取值:[0|1]
默认值:1
说明:
缺省值为1,
代表打开,
consumer 会对每个JSON 消息都严格比对字段名称、
字段顺序,最大程度的确保源端数据库没有发生DDL。一般不建议关闭此参数。
修改方式:
可使用set 语句修改值也可在配置文件中修改值。
适用于session、
global
范围均可。

DBE_PLDEBUGGER 下系统函数用于单机下调试存储过程,目前支持的接口及其描述
如下所示。仅管理员有权限执行这些调试接口。
须知:当在函数体中创建用户时,
调用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 端使用。
postgres=# 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
postgres=# SELECT OID FROM PG_PROC WHERE PRONAME='test_debug';
oid
-------
16389
(1 row)

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1104
postgres=# SELECT * FROM DBE_PLDEBUGGER.turn_on(16389);
nodename | port
----------+------
datanode |
0
(1 row)

开始调试
server 端执行存储过程,会在存储过程内第一条SQL 语句前hang 住,等待debug 端发
送的调试消息。仅支持直接执行存储过程的调试,不支持通过trigger 调用执行的存储过程
调试。
postgres=# call test_debug(1);
再起一个客户端,作为debug 端,通过turn_on 返回的数据,调用
DBE_PLDEBUGGER.attach 关联到该存储过程上进行调试。
postgres=# 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。
postgres=# SELECT * FROM DBE_PLDEBUGGER.next();
funcoid |
funcname
| lineno |
query
---------+------------+--------+----------------------
16389 | test_debug |
0 | [EXECUTION FINISHED]
(1 row)
在执行attach 的客户端调试,可以执行以下变量操作
postgres=# SELECT * FROM DBE_PLDEBUGGER.info_locals(); --打印全部变量
varname | vartype | value | package_name | isconst
---------+---------+-------+--------------+---------

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1105
x
| int4
| 1
|
| f
(1 row)
postgres=# SELECT * FROM DBE_PLDEBUGGER.set_var('x', 2); --变量赋值
set_var
---------
t
(1 row)
postgres=# SELECT * FROM DBE_PLDEBUGGER.print_var('x'); --打印单个变量
varname | vartype | value | package_name | isconst
---------+---------+-------+--------------+---------
x
| int4
| 2
|
| f
(1 row)
直接执行完成当前正在调试的存储过程。
postgres=# SELECT * FROM DBE_PLDEBUGGER.continue();
funcoid |
funcname
| lineno |
query
---------+------------+--------+----------------------
16389 | test_debug |
0 | [EXECUTION FINISHED]
(1 row)
直接退出当前正在调试的存储过程,不执行尚未执行的语句。
postgres=# SELECT * FROM DBE_PLDEBUGGER.abort();
abort
-------
t
(1 row)
client 端查看代码信息并识别可以设置断点行号。
postgres=# SELECT * FROM DBE_PLDEBUGGER.info_code(16389);
lineno |
query
| canbreak

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1106
--------+-----------------------------------------------------------+----------
| 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)
设置断点。
postgres=# SELECT * FROM DBE_PLDEBUGGER.add_breakpoint(16389,4);
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)
查看断点信息。
postgres=# SELECT * FROM DBE_PLDEBUGGER.info_breakpoints();
breakpointno | funcoid | lineno |
query
| enable
--------------+---------+--------+---------------------------------+--------
0 |
16389 |
4 |
DELETE FROM t1 WHERE a = x; | t
(1 row)
执行至断点。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1107
postgres=# 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。具体调试接口请见下面列表。
表DBE_PLDEBUGGER
接口名称
描述
DBE_PLDEBUGGER.turn_on
server 端调用,
标记存储过程可以调试,
调用后执行该存储
过程时会hang 住等待调试信息。
DBE_PLDEBUGGER.turn_of
f
server 端调用,标记存储过程关闭调试。
DBE_PLDEBUGGER.local_d
ebug_server_info
server 端调用,
打印本session 内所有已turn_on 的存储过程。
DBE_PLDEBUGGER.attach
debug 端调用,关联到正在调试存储过程。
DBE_PLDEBUGGER.info_lo
cals
debug 端调用,打印正在调试的存储过程中的变量当前值。
DBE_PLDEBUGGER.next
debug 端调用,单步执行。
DBE_PLDEBUGGER.continu
e
debug 端调用,继续执行,直到断点或存储过程结束。
DBE_PLDEBUGGER.abort
debug 端调用,停止调试,server 端报错长跳转。
DBE_PLDEBUGGER.print_v
ar
debug 端调用,
打印正在调试的存储过程中指定的变量当前
值。
DBE_PLDEBUGGER.info_co
de
debug 和server 端都可以调用,
打印指定存储过程的源语句
和各行对应的行号。
DBE_PLDEBUGGER.step
debug 端调用,单步进入执行。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1108
接口名称
描述
DBE_PLDEBUGGER.add_br
eakpoint
debug 端调用,新增断点。
DBE_PLDEBUGGER.delete_
breakpoint
debug 端调用,删除断点。
DBE_PLDEBUGGER.info_br
eakpoints
debug 端调用,查看当前的所有断点。
DBE_PLDEBUGGER.backtra
ce
debug 端调用,查看当前的调用栈。
DBE_PLDEBUGGER.enable_
breakpoint
debug 端调用,激活被禁用的断点。
DBE_PLDEBUGGER.disable
_breakpoint
debug 端调用,禁用已激活的断点。
DBE_PLDEBUGGER.finish
debug 端调用,继续调试,直到断点或返回上一层调用栈。
DBE_PLDEBUGGER.set_var
debug 端调用,为变量进行赋值操作。

数据库服务器调用转型函数将数据从源GBase 8s SQL 数据类型转换为目标 GBase 8s SQL
数据类型。
如果数据库服务器上的行或集合的数据类型与检索行或集合缓冲区的数据类型不同,则数
据库服务器调用强制转型函数将数据从源 GBase 8s SQL 数据类型转换为目标GBase 8s
SQL 数据类型。下表列出了源数据类型和目标数据类型每组组合的强制转型函数的提供者。
数据类型提供的强制转型函数位于数据库服务器上。
源数据类型
目标数据类型 强制转型函数的提供者
内置
内置
数据库服务器
内置
扩展
数据类型
扩展
内置
数据类型
扩展
扩展
数据类型


GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 136 -