Capítulo 39. PL/Ruby - Linguagem procedural Ruby

Sumário
39.1. Visão geral
39.1.1. Instalação do PL/Ruby
39.1.2. Criação da linguagem PL/Ruby no PostgreSQL
39.2. Funções escritas em PL/Ruby
39.2.1. Funções simples
39.2.2. Funções com métodos Ruby definidos na criação
39.2.3. Funções com métodos Ruby na tabela plruby_singleton_methods
39.2.4. Funções que recebem tuplas como argumentos
39.2.5. Funções que retornam conjuntos
39.3. Validação de dígito verificador usando PL/Ruby
39.3.1. Funções PL/Ruby para validar o número do CPF e do CNPJ
39.3.2. Funções PL/Ruby para validar dígitos verificadores- FEBRABAN
39.3.3. Função PL/Ruby para validar o número de inscrição eleitoral
39.4. Gatilhos escritos em PL/Ruby
39.5. Extensão para acesso ao PostgreSQL pela linguagem Ruby
39.5.1. Instalação do Ruby-Postgres
39.5.2. Utilização do Ruby-Postgres
39.6. Módulos e classes do PL/Ruby
39.6.1. Global
39.6.2. Módulo PL
39.6.3. Classe PL::Plan
39.6.4. Classe PL::Cursor

Autor: Halley Pacheco de Oliveira ( ). Iniciado em 2006-01-11.

O PL/Ruby é uma linguagem procedural carregável, que permite a criação de funções e gatilhos do PostgreSQL escritos na linguagem Ruby.

39.1. Visão geral

O PL/Ruby é um projeto independente, que não faz parte da distribuição padrão do PostgreSQL, cujo dono é Guy Decoux . O projeto está relacionado em RAA - Ruby Application Archive, na categoria Biblioteca/Banco de Dados, e descrito na página RAA - pl-ruby. A página do projeto se encontra em PL/Ruby. Para instalar o PL/Ruby, primeiro deve ser baixado o arquivo plruby.tar.gz.

O PL/Ruby pode ser instalado como um tratador de chamadas confiável (TRUSTED), ou não. No comando CREATE LANGUAGE, quando não é especificado TRUSTED ao criar a linguagem, somente os usuários do PostgreSQL com privilégio de superusuário podem usar a linguagem para criar novas funções. Neste capítulo só será visto o modo confiável. Para obter informações sobre o modo não confiável deve ser consultado o artigo Installing untrusted PL/Ruby for PostgreSQL.

39.1.1. Instalação do PL/Ruby

Antes de instalar o PL/Ruby pode ser necessário instalar todos os cabeçalhos do PostgreSQL através do comando gmake install (consulte o Capítulo 14). A instalação foi feita no diretório /usr/local/src/plruby-0.4.6/, com o arquivo plruby.tar.gz baixado no diretório /download, conforme mostrado a seguir:

cd /download
wget ftp://moulon.inra.fr/pub/ruby/plruby.tar.gz
cd /usr/local/src/
tar xzvf /download/plruby.tar.gz
cd plruby-0.4.6/
ruby extconf.rb
make
make install

O arquivo README.en no diretório de instalação contém as instruções de instalação.

No comando ruby extconf.rb pode ser necessário especificar as opções:

--with-pgsql-dir=PREFIXO

prefixo dos diretórios de inclusão e de biblioteca do PostgreSQL

--with-pgsql-include=DIRETÓRIO

diretório dos arquivos de inclusão do PostgreSQL

--with-pgsql-lib=DIRETÓRIO

diretório dos arquivos de biblioteca do PostgreSQL

--with-pgsql-version=VERSÃO

número da versão do PostgreSQL, como 73 ou 74, ou seja, número principal e secundário

--disable-conversion

por padrão o PL/Ruby tenta converter o tipo do PostgreSQL em uma classe do Ruby. Esta opção dá a possibilidade de desativar todas as conversões.

--with-suffix=SUFIXO

sufixo a ser adicionado

Exemplo:

ruby extconf.rb --with-pgsql-include=/usr/local/pgsql/include \
                --with-pgsql-lib=/usr/local/pgsql/lib

39.1.2. Criação da linguagem PL/Ruby no PostgreSQL

Uma vez que o catálogo do sistema pg_language é privativo de cada banco de dados, a nova linguagem somente pode ser criada individualmente em cada um dos bancos de dados, ou no banco de dados template1 para que fique disponível automaticamente em todos os bancos de dados criados após a instalação, uma vez que sua entrada em template1 é copiada pelo comando CREATE DATABASE.

No exemplo abaixo é criado o banco de dados plruby e instalada a linguagem PL/Ruby. Este banco de dados é utilizado em todos os exemplos deste capítulo.

# su - postgres
$ psql template1
Bem-vindo ao psql 8.0.0, o terminal interativo do PostgreSQL.

Digite:  \copyright para mostrar a licença da distribuição
         \h para ajuda nos comandos SQL
         \? para ajuda nos comandos do psql
         \g ou finalizar com ponto-e-vírgula para executar o comando
         \q para sair

template1=# CREATE DATABASE plruby;
CREATE DATABASE
template1=# \c plruby
Conectado ao banco de dados "plruby".
plruby=# CREATE FUNCTION plruby_call_handler () RETURNS language_handler
plruby-# AS '/usr/lib/site_ruby/1.8/i386-linux/plruby.so'
plruby-# LANGUAGE 'C';
CREATE FUNCTION
plruby=# CREATE TRUSTED LANGUAGE 'plruby'
plruby-# HANDLER plruby_call_handler
plruby-# LANCOMPILER 'PL/Ruby';
CREATE LANGUAGE

plruby=# SELECT * FROM pg_language;

 lanname  | lanispl | lanpltrusted | lanplcallfoid | lanvalidator |    lanacl
----------+---------+--------------+---------------+--------------+---------------
 internal | f       | f            |             0 |         2246 |
 c        | f       | f            |             0 |         2247 |
 plruby   | t       | t            |       1632033 |            0 |
 sql      | f       | t            |             0 |         2248 | {=U/postgres}
 plpgsql  | t       | t            |       1632662 |      1632663 |
(5 linhas)

Pela consulta acima à tabela pg_language, pode ser visto que a linguagem plruby: é uma linguagem procedural, como a linguagem plpgsql (coluna lanispl); é uma linguagem confiável (TRUSTED), como as linguagens SQL e plpgsql (coluna lanpltrusted); não é uma linguagem interna, porque possui uma função tratadora de chamadas, como a linguagem plpgsql (coluna lanplcallfoid); não possui uma função validadora, responsável pela verificação da sintaxe e validação das novas funções criadas, como as demais linguagens possuem (coluna lanvalidator).

SourceForge.net Logo CSS válido!