How to debug PostgreSQL function with pgAdminIII
How to debug plpgsql with pgAdminIII
[root@localhost soft_bak]# git clone git://git.postgresql.org/git/pldebugger.git
Initialized empty Git repository in /opt/soft_bak/pldebugger/.git/
remote: Counting objects: 445, done.
remote: Compressing objects: 100% (341/341), done.
remote: Total 445 (delta 285), reused 171 (delta 104)
Receiving objects: 100% (445/445), 170.50 KiB | 54 KiB/s, done.
Resolving deltas: 100% (285/285), done.
[root@localhost soft_bak]# cd pldebugger/
[root@localhost pldebugger]# ls
dbgcomm.c Makefile pldbgapi.control pldebugger.proj plugin_debugger.def uninstall_pldbgapi.sql
dbgcomm.h pldbgapi--1.0.sql pldbgapi--unpackaged--1.0.sql plpgsql_debugger.c README.pldebugger
globalbp.h pldbgapi.c pldebugger.h plugin_debugger.c settings.projinc
[root@localhost soft_bak]# cd postgresql-9.4.5/contrib/
[root@localhost contrib]# cp -R /opt/soft_bak/pldebugger/ ./
[root@localhost contrib]# cd pldebugger/
[root@localhost pldebugger]# make
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fpic -I../../src/pl/plpgsql/src -I. -I. -I../../src/include -D_GNU_SOURCE -c -o plpgsql_debugger.o plpgsql_debugger.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fpic -I. -I. -I../../src/include -D_GNU_SOURCE -c -o plugin_debugger.o plugin_debugger.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fpic -I. -I. -I../../src/include -D_GNU_SOURCE -c -o dbgcomm.o dbgcomm.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fpic -I. -I. -I../../src/include -D_GNU_SOURCE -c -o pldbgapi.o pldbgapi.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fpic -shared -o plugin_debugger.so plpgsql_debugger.o plugin_debugger.o dbgcomm.o pldbgapi.o -L../../src/port -L../../src/common -Wl,--as-needed -Wl,-rpath,'/ext4/pgdefaultgcc530/lib',--enable-new-dtags
[root@localhost pldebugger]# make install
/bin/mkdir -p '/ext4/pgdefaultgcc530/lib/postgresql'
/bin/mkdir -p '/ext4/pgdefaultgcc530/share/postgresql/extension'
/bin/mkdir -p '/ext4/pgdefaultgcc530/share/postgresql/extension'
/bin/mkdir -p '/ext4/pgdefaultgcc530/share/doc//postgresql/extension'
/usr/bin/install -c -m 755 plugin_debugger.so '/ext4/pgdefaultgcc530/lib/postgresql/plugin_debugger.so'
/usr/bin/install -c -m 644 pldbgapi.control '/ext4/pgdefaultgcc530/share/postgresql/extension/'
/usr/bin/install -c -m 644 pldbgapi--1.0.sql pldbgapi--unpackaged--1.0.sql '/ext4/pgdefaultgcc530/share/postgresql/extension/'
/usr/bin/install -c -m 644 README.pldebugger '/ext4/pgdefaultgcc530/share/doc//postgresql/extension/'
[root@localhost ~]# vim /ext4/pgdefaultgcc530/data/postgresql.conf
shared_preload_libraries = '$libdir/plugin_debugger'
[root@localhost ~]# su - postgres
[postgres@localhost ~]$ cd /ext4/pgdefaultgcc530/bin/
[postgres@localhost bin]$ ./pg_ctl -D /ext4/pgdefaultgcc530/data/ restart
waiting for server to shut down.... done
server stopped
server starting
[postgres@localhost bin]$ LOG: redirecting log output to logging collector process
HINT: Future log output will appear in directory "pg_log".
[postgres@localhost bin]$ ./psql -h localhost -U postgres
psql (9.4.5)
Type "help" for help.
postgres=# CREATE EXTENSION pldbgapi;
CREATE EXTENSION
postgres=# CREATE TABLE accounts(owner text, balance numeric, amount numeric);
CREATE TABLE
postgres=# INSERT INTO accounts VALUES ('Bob',100);
INSERT 0 1
postgres=# INSERT INTO accounts VALUES ('Mary',200);
INSERT 0 1
postgres=# select * from accounts ;
owner | balance | amount
-------+---------+--------
Bob | 100 |
Mary | 200 |
(2 rows)
postgres=# CREATE OR REPLACE FUNCTION transfer(
postgres(# i_payer text,
postgres(# i_recipient text,
postgres(# i_amount numeric(15,2))
postgres-# RETURNS text
postgres-# AS
postgres-# $$
postgres$# DECLARE
postgres$# payer_bal numeric;
postgres$# BEGIN
postgres$# SELECT balance INTO payer_bal
postgres$# FROM accounts
postgres$# WHERE owner = i_payer FOR UPDATE;
postgres$# IF NOT FOUND THEN
postgres$# RETURN 'Payer account not found';
postgres$# END IF;
postgres$# IF payer_bal < i_amount THEN
postgres$# RETURN 'Not enough funds';
postgres$# END IF;
postgres$# UPDATE accounts
postgres$# SET balance = balance + i_amount
postgres$# WHERE owner = i_recipient;
postgres$# IF NOT FOUND THEN
postgres$# RETURN 'Recipient does not exist';
postgres$# END IF;
postgres$# UPDATE accounts
postgres$# SET balance = balance - i_amount
postgres$# WHERE owner = i_payer;
postgres$# RETURN 'OK';
postgres$# END;
postgres$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
postgres=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+-----------------------------+------------------+------------------------------------------------------------------+--------
public | pldbg_abort_target | SETOF boolean | session integer | normal
public | pldbg_attach_to_port | integer | portnumber integer | normal
public | pldbg_continue | breakpoint | session integer | normal
public | pldbg_create_listener | integer | | normal
public | pldbg_deposit_value | boolean | session integer, varname text, linenumber integer, value text | normal
public | pldbg_drop_breakpoint | boolean | session integer, func oid, linenumber integer | normal
public | pldbg_get_breakpoints | SETOF breakpoint | session integer | normal
public | pldbg_get_proxy_info | proxyinfo | | normal
public | pldbg_get_source | text | session integer, func oid | normal
public | pldbg_get_stack | SETOF frame | session integer | normal
public | pldbg_get_target_info | targetinfo | signature text, targettype "char" | normal
public | pldbg_get_variables | SETOF var | session integer | normal
public | pldbg_oid_debug | integer | functionoid oid | normal
public | pldbg_select_frame | breakpoint | session integer, frame integer | normal
public | pldbg_set_breakpoint | boolean | session integer, func oid, linenumber integer | normal
public | pldbg_set_global_breakpoint | boolean | session integer, func oid, linenumber integer, targetpid integer | normal
public | pldbg_step_into | breakpoint | session integer | normal
public | pldbg_step_over | breakpoint | session integer | normal
public | pldbg_wait_for_breakpoint | breakpoint | session integer | normal
public | pldbg_wait_for_target | integer | session integer | normal
public | plpgsql_oid_debug | integer | functionoid oid | normal
public | transfer | text | i_payer text, i_recipient text, i_amount numeric | normal
(22 rows)
Connect to PostgreSQL Server with pgAdminIII

Find to postgreSQL function to be debuged transfer

Right click the transfer function and Input the parameter to be test




How to debug PostgreSQL function with pgAdminIII的更多相关文章
- debug PostgreSQL 9.6.18 using Eclipse IDE on CentOS7
目录 debug PostgreSQL 9.6.18 using Eclipse IDE on CentOS7 1.概览 2.建立用户 3.编译postgre 4.启动Eclipse 5.设置环境变量 ...
- PostgreSQL function examples
warehouse_db=# CREATE TABLE warehouse_tbl(warehouse_id INTEGER NOT NULL,warehouse_name TEXT NOT NULL ...
- postgresql function 返回 select
pq函数功能很强大,我打算把统计的功能都放在数据库端.优势让运算离数据更近一些,缺点无法服用代码.牺牲了django的灵魂性,项目必须依赖postgresql. 项目中,希望实现返回select内容 ...
- 移植Oracle procedure 到 postgresql
1.登录postgresql psql -h 192.168.137.131 -p 5432 postgres satusc@6789#JKL 2.创建用户 CREATE USER name thun ...
- 使用RStudio调试(debug)基础学习(一)
点击行号的左侧,即可设置断点(或者按下Shift+F9),如果没有出现,反而出现下图的警告: 那么只是因为我的坏习惯--写一段脚本测试的时候都是新建,但不save到本地,不喜欢保存,写的差不多了才开始 ...
- WRITING POSTGRESQL TRIGGERS IN GO
转自:https://www.opsdash.com/blog/postgresql-triggers-golang.html 可以学习如何使用golang 编写pg extension Trigge ...
- PostgreSQL 存储过程/函数
1.有用的链接 postgresql 常用小函数 Postgresql数据库的一些字符串操作函数 PostgreSQL function里面调用function PostgreSQL学习手册(函数和操 ...
- postgresql spi开发笔记
#include "postgres.h" #include "fmgr.h" #include <string.h> #ifdef PG_MODU ...
- PHP调试工具PHP DEBUG TOOLS 使用方法
一.安装篇安装前的准备环境:必须得先装X-Debug,至于怎样安装X-Debug请看http://www.xdebug.org/docs/install 1. 从http://www.xdebug.o ...
随机推荐
- javaWeb中struts开发——helloworld
1.新建一个web项目 2.选中project,右键,选择MyElcipse,选择add struts capab...添加struts支持,然后自己命名包 3.Struts在建立jsp时,标签要到 ...
- What is Heterogeneous Computing?
http://developer.amd.com/resources/heterogeneous-computing/what-is-heterogeneous-computing/ Heteroge ...
- javascript:void(0)与#整理
window.location.href="/signup/devicelogin.shtml"; 指跳转到引号的url地址 #包含了一个位置信息,默认的锚点#是top,网页的顶端 ...
- Visual Studio 2008破解激活升级方法
声明:本文中涉及到的序列号及更新方法均来自互联网,请支持正版. 微软为业余爱好者.热衷者和学生提供了免费版——Express Edition (轻型.易学.易用的开发工具). 如不想支付任何费用,建议 ...
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
主要掌握String中的方法 char[] toCharArray() 将此字符串转换为一个新的字符数组. int indexOf(String str) 返回 ...
- linux指定目录安装软件后,程序找不到共享库问题
以svn为例,64位centos yum install subversion --installroot=/usr/svn/后 执行svn命令,报错svn: error while loading ...
- Android Studio工具修理集
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 1.Common依赖项目找不到.因为主项目没有引进setting.gradle 2.从Eclipse ...
- 流媒体学习二-------SIP协议学习(基本场景分析 )
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.SIP业务基本知识 1.1 业务介绍 会话初始协议(Session Initiation Protocol) ...
- [LeetCode]题解(python):098 Validate Binary Search Tree
题目来源 https://leetcode.com/problems/validate-binary-search-tree/ Given a binary tree, determine if it ...
- {$ecs_css_path}
includes里的init.php的187-194行 if (!empty($_CFG['stylename'])) { $smarty->assign('ecs_css_path', 'th ...