Arquivo

Archive for the ‘PostgreSQL’ Category

Habilitando plpythonu no PostgreSQL

Olá pessoal,

pra quem não sabe, banco de dados relacionais não apenas SQL. Eles também aceitam criar funções (procedurais) bem complexas, que podem depois ser utilizadas dentro de uma query SQL. No PosgreSQL, a linguam procedural padrão é a plpgsql, mas é possível instalar (e habilitar) outras linguagens, como Python, por exemplo. E é isso que eu “”””ensino”””” agora!

Primeiro, instalamos ela via apt-get (Ubuntu/Debian). Certifique-se sobre qual versão do PosgreSQL você está usando. No meu caso, estou usando a versão 9.3.

apt-get install postgresql-plpython-9.3

Agora, se você verificar as extensões disponíveis para o seu PostgreSQL,

SELECT name, default_version, installed_version FROM pg_available_extensions;

você verá que plpythonu encontra-se lá, mas não está habilitada.
plpython
Basta então habilitá-la.

createlang -d nomedoseubanco plpythonu

Pronto, plpythonu deverá estar habilitada para você utilizar!
plpythonu
[]’s

Inserindo e atualizando várias tabelas ao mesmo tempo usando PL/pgSQL

Olá pessoal,

esses dias eu me deparei com um probleminha um pouco chato (como sempre), depois de adicionar umas tabelas novas no sistema e atualizar umas outras antigas, teria que efetuar o link entre elas com os dados legados… bom, pare resolver isso, achei por bem criar uma funçãozinho em PL/pgSQL (sim, estou usando o PostgreSQL) para me ajudar. 😉

Segue ai em baixo, um exemplo do que tive que fazer:


create or replace function my_function(table_row my_table) returns void as $$
delegate
    next_id integer := nextval('my_other_table_id_seq');
begin
    insert into my_other_table(id, name) values (next_id, table_row.name);
    update my_table set my_other_table_link = next_id where id = table_row.id;
end;
$$language plpgsql;

Depois de criada a função, basta executá-la:

select my_function(linha) from my_table linha where linha.id between 123 and 456 order by asc;

Essa chamada fará um loop executando a função criada para cada linha resultado da query.

Simples não? 😉

[]’s

Categorias:PL/pgSQL, PostgreSQL