• 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

     

  • 相关阅读:
    java properties
    js resource
    script Ruby / Rails / Arachni
    webServer / Apache / apache / apache http server / mod_cluster
    JAVA XML open protocol
    二维数组举例
    二维数组
    二维数组
    二维数组
    二维数组
  • 原文地址:https://www.cnblogs.com/songyuejie/p/5169706.html
Copyright © 2020-2023  润新知