Come fare il debug di una funzione PostgreSQL

Man mano che si prende mano con Postgres ci si rende conto dell’enorme potenzialità delle funzioni personalizzate e si comincia ad usarle sempre di più finché il codice scritto, dalle poche righe iniziali, si trasforma in un’enciclopedia.
Magari non è sempre così, ma certamente quando si comincia ad usare intensamente questa meravigliosa funzionalità inserire errori diventa più facile, di conseguenza, trovarli diventa più difficile e oneroso in termini di tempo quindi l’uso di un debugger a livello di sorgente è certamente il sogno di tutti gli utenti.La buona notizia è che Postgres ha di serie questo utile strumento e questo articolo vi spiegherà come poterlo usare.
La brutta notizia e che il debugger non è normalmente attivo per motivi di performance: il suo uso infatti rallenta di molto il server.
Ad aggravare la situazione c’è il fatto che, per motivi a me sconosciuti, mentre nell’installazione Windows questo prezioso strumento  è compreso, nella normale installazione Linux no.
Quindi se avete Linux e usate PostgreSQL per sviluppare applicazioni la prima cosa da fare è installare il debugger.
Come d’uso i comandi di installazione necessitano delle autorizzazioni amministrative perciò si usa il comando “sudo”, la particolarità in questo caso è che “sudo” non basta è necessario essere connessi come utente “root”; questo lo possiamo fare, ovviamente, collegandoci con l’utente root oppure usando il comando:

sudo su

una volta superato questo prima scoglio, innanzitutto verifichiamo ed eventualmente i seguenti pacchetti:

apt-get install build-essential libssl-dev libkrb5-dev 
apt-get install postgresql-server-dev-<versione>

sostituendo a: <versione> la versione di postgresql che avete installato, ad esempio, per la versione 9.6 avremo:

apt-get install build-essential libssl-dev libkrb5-dev postgresql-server-dev-9.6

Per FREEBsd probabilmente  non servono i prerequisiti, ma nel caso ne aveste bisogno vi ricordo che si installano con il comando:

sudo pkg install ....

Non è facile trovare in rete i binari del debugger per cui dobbiamo compilarcelo.
Per fare questo la prima cosa è posizionarci nella directory /usr/local/src con il comando:

cd /usr/local/src

i sorgenti li scarichiamo direttamente dal git di postgres con:

git clone http://git.postgresql.org/git/pldebugger.git

che crea la directory: ‘pldebugger’ dove entriamo subito con:

cd pldebugger

a questo punto possiamo compilare con:

export USE_PGXS=1
make

da ricordare che su FreeBsd si dovrà usare:

gmake USE_PGXS=1

e poi installare con:

make install

sempre su FreeBSD bisognerà usare:

gmake USE_PGXS=1 install

a questo punto editiamo il file di configurazione di postgres con:

nano /etc/postgresql/<versione>/main/postgresql.conf

come di consueto al posto di <versione> mettiamo la nostra versione di postgres per cui se stiamo usando la versione 9.6:

nano /etc/postgresql/9.6/main/postgresql.conf

Una vola in edit andiamo a modificare il parametro: “shared_preload_libraries”, per indicare di caricare la libreria del debugger che abbiamo appena compilato, il risultato è:

shared_preload_libraries = 'plugin_debugger'

se il parametro è già stato assegnato ad una o più librerie aggiungiamo la nostra in coda separandola con una virgola, ad esempio:

shared_preload_libraries = 'pg_stat_statements,plugin_debugger'

non ci resta che far ripartire il servizio con

service postgresql restart

ora prendiamo in mano il mitico pgadmin3 e abilitiamo l’estensione appena installata con il comando SQL:

CREATE EXTENSION pldbgapi;

da ripetere per ciascun database dove vogliamo usare il debugger.
Possiamo verificare se tutto è andato visualizzando il menu di contesto, quello del tasto destro del mouse, di una funzione qualsiasi, se appare il menu “Debugging” c’è l’abbiamo fatta !
Una volta appurato questo la scelta “Debug” ci aprirà un nuovo mondo e dopo averci visualizzato una finestra per raccogliere gli eventuali parametri con cui avviare l’esecuzione della funzione scelta si fermerà sulla prima linea di codice a questo punto vi lascio esplorare le nuove voci di menu che vi permetteranno, analogamente ad altri prodotti della stessa categoria, di seguire visivamente passo dopo passo le istruzione eseguite.

Quando detto in questo articolo si applica a tutte le versioni di PostgreSQL ma io l’ho testato personalmente solo sulla versione 9.6 su ubuntu server 16.04.01 LTS 64bit in italiano nel momento in cui avrò notizie di problemi relative ad altre versioni sarà mia cura riportarle qui di seguito.

Alla prossima.

Lascia un commento