#openGauss #入门 #安装 #数据库 #开源
知识来源:docs-opengauss.osinfra.cn/zh/
开始调试
server端执行存储过程,会在存储过程内第一条SQL语句前hang住,等待debug端发送的调试消息。仅支持直接执行存储过程的调试,不支持通过trigger调用执行的存储过程调试。匿名块在turn_on后输入执行即可。
openGauss=# call test_debug(1);
# 匿名块
openGauss=# do $$
declare
# declaration_section
begin
# executable_section
end;
$$
LANGUAGE plpgsql;
再起一个客户端,作为debug端,通过turn_on返回的数据,调用DBE_PLDEBUGGER.attach关联到该存储过程上进行调试。
openGauss=# 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。
openGauss=# SELECT * FROM DBE_PLDEBUGGER.next();
funcoid | funcname | lineno | query
---------+------------+--------+----------------------
16389 | test_debug | 0 | [EXECUTION FINISHED]
(1 row)
在执行attach的客户端调试,可以执行以下变量操作
openGauss=# SELECT * FROM DBE_PLDEBUGGER.info_locals(); --打印全部变量
varname | vartype | value | package_name | isconst
---------+---------+-------+--------------+---------
x | int4 | 1 | | f
(1 row)
openGauss=# SELECT * FROM DBE_PLDEBUGGER.set_var('x', 2); --变量赋值
set_var
---------
t
(1 row)
openGauss=# SELECT * FROM DBE_PLDEBUGGER.print_var('x'); --打印单个变量
varname | vartype | value | package_name | isconst
---------+---------+-------+--------------+---------
x | int4 | 2 | | f
(1 row)
直接执行完成当前正在调试的存储过程。
openGauss=# SELECT * FROM DBE_PLDEBUGGER.continue();
funcoid | funcname | lineno | query
---------+------------+--------+----------------------
16389 | test_debug | 0 | [EXECUTION FINISHED]
(1 row)
直接退出当前正在调试的存储过程,不执行尚未执行的语句。
openGauss=# SELECT * FROM DBE_PLDEBUGGER.abort();
abort
-------
t
(1 row)
client端查看代码信息并识别可以设置断点行号。
openGauss=# 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)
设置断点。
openGauss=# 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)
查看断点信息。
openGauss=# SELECT * FROM DBE_PLDEBUGGER.info_breakpoints();
breakpointno | funcoid | lineno | query | enable
--------------+---------+--------+---------------------------------+--------
0 | 16389 | 4 | DELETE FROM t1 WHERE a = x; | t
(1 row)
执行至断点。
openGauss=# SELECT * FROM DBE_PLDEBUGGER.continue();
funcoid | funcname | lineno | query
---------+------------+--------+---------------------------------
16389 | test_debug | 4 | DELETE FROM t1 WHERE a = x;
(1 row)
#openGauss #入门 #安装 #数据库 #开源