quinta-feira, 4 de outubro de 2012

Patch sobre CREATE SCHEMA IF NOT EXISTS aceito para o PostgreSQL 9.3devel

Após algumas discussões [1] meu patch para adicionar a cláusula "IF NOT EXISTS" no "CREATE SCHEMA" foi aceito e efetuado o commit na branch master do git oficial do PostgreSQL [2] pelo commiter Mr. Tom Lane.

Agora na 9.3 poderemos usar a cláusula "IF NOT EXISTS" no "CREATE SCHEMA" para que não gere um erro (cancelando transação atual) caso o esquema que está sendo criado já exista, por exemplo:

BEGIN;
  CREATE SCHEMA IF NOT EXISTS foo;
  CREATE TABLE foo.bar();
COMMIT;

O exemplo acima caso o esquema "foo" já exista não será gerado um erro e a transação irá prosseguir normalmente. O comportamento é similar ao já existente "IF NOT EXISTS" do "CREATE TABLE" [3].

[1] https://commitfest.postgresql.org/action/patch_view?id=907
[2] http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=fb34e94d214d6767910df47aa7c605c452d11c57
[3] http://www.postgresql.org/docs/9.2/interactive/sql-createtable.html

---
Fabrízio de Royes Mello
fabriziomello [at] gmail.com

quinta-feira, 17 de maio de 2012

Instalar/Configurar "Debugador" de PL/pgSQL (pldebugger) no PostgreSQL 9.1 usando Ubuntu


O passo-a-passo abaixo foi realizado no Ubuntu 10.04LTS com o PostgreSQL 9.1 instalado via ppa do Martin Pitti, mas creio que pode ser executado tranquilamente utilizando a última versão LTS do Ubuntu, a 12.04LTS.

1) Download dos fontes do PostgreSQL

$ wget -c http://ftp.postgresql.org/pub/source/v9.1.3/postgresql-9.1.3.tar.bz2


2) Precisamos instalar ferramentas necessárias para compilação da extensão

$ sudo apt-get update
$ sudo apt-get install build-essential libreadline-dev zlib1g-dev flex bison libssl-dev git-core


3) Compilar o PostgreSQL e a extensao pldebugger

$ tar jxvf postgresql-9.1.3.tar.bz2
$ cd postgresql-9.1.3
$ ./configure --prefix=/usr --includedir=/usr/include --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib/postgresql-9.1 --srcdir=. --mandir=/usr/share/postgresql/9.1/man --docdir=/usr/share/doc/postgresql-doc-9.1 --datadir=/usr/share/postgresql/9.1 --bindir=/usr/lib/postgresql/9.1/bin --libdir=/usr/lib/postgresql/9.1/lib --includedir=/usr/include/postgresql/ --enable-integer-datetimes --with-openssl
$ make
$ cd contrib
$ git clone git://git.postgresql.org/git/pldebugger.git
$ cd pldebugger
$ make
$ sudo make install

Obs: lembrando que, apesar de extenso, o "./configure" deve ser todo escrito na mesma linha

4) Após compilar e instalar a extensao pldebugger precisamos ativa-a no PostgreSQL

$ sudo vim /etc/postgresql/9.1/main/postgresql.conf

alterar
 
  #shared_preload_libraries = ''

para
 
  shared_preload_libraries = '$libdir/plugin_debugger'
 

5) Reiniciar PostgreSQL

$ sudo /etc/init.d/postgresql restart 9.1


6) Criar a EXTENSAO "pldbgpapi" na(s) base(s) de dados que deseja fazer debug de pls

$ psql -U postgres bdteste
psql (9.1.3)
Digite "help" para ajuda.


bdteste=# CREATE EXTENSION pldbgapi;
CREATE EXTENSION
bdteste=#


7) Pronto, agora vc pode usar o PGAdmin para "debugar" suas funções PL/pgSQL



---
Fabrízio Mello
fabriziomello [at] gmail.com