De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Marlon Luis Petry
Data de Publicação: 13 de August de 2008
Postgresql suporta uma variedade de linguagens procedurais, podemos programar uma store procedure na linguagens de nossa preferência como exemplos: Pl/Perl, Pl/Python, Pl/Java, Pl/PHP, Pl/Ruby e muitas outras. Para utilizar estas linguagens primeiro é necessário habilitar na base de dados.
O comando para habilitar a linguagem na base de dados não é complicado. Nesse post iremos utilizar a linguagem nativa do PostgreSQL que PL/PGSQL.
Habilitando a linguagem em uma bases de dados.
create lang plpgsql nomedabasededados
Por exemplo na base de dados book
create lang plpgsql book
Este comando deve ser executado no shell.
O exemplo tem a finalidade de mostrar o poder de um procedimento armazenado (store procedure) da linguagem PL/PGSQL está linguagem somente irá atuar dentro da base de dados, então não será possível executar comandos externos. Caso seja necessário é possível desenvolver uma função externa em C ou usar uma linguagem procedural não confiável a qual pode inserir algum risco de segurança a base de dados.
Voltando ao exemplo vamos desenvolver o algoritmo da torre de hanoi em PL/PGSQL.
view plaincopy to clipboardprint? 1. CREATE FUNCTION towerHanoi(ndisk INTEGER,src INTEGER,dst INTEGER, tmp INTEGER) RETURNS void AS ' 2. Declare 3. 4. BEGIN 5. IF ndisk = 1 THEN 6. RAISE NOTICE '' DISK % Move da haste % para haste % '', ndisk,src,dst; 7. ELSE 8. perform towerHanoi(ndisk - 1,src,dst,tmp); 9. RAISE NOTICE '' DISK % Move da haste % para haste % '', ndisk,src,tmp; 10. perform towerHanoi(ndisk - 1,src,tmp,src); 11. END IF; 12. 13. END; 14. ' LANGUAGE 'plpgsql'; CREATE FUNCTION towerHanoi(ndisk INTEGER,src INTEGER,dst INTEGER, tmp INTEGER) RETURNS void AS ' Declare BEGIN IF ndisk = 1 THEN RAISE NOTICE '' DISK % Move da haste % para haste % '', ndisk,src,dst; ELSE perform towerHanoi(ndisk - 1,src,dst,tmp); RAISE NOTICE '' DISK % Move da haste % para haste % '', ndisk,src,tmp; perform towerHanoi(ndisk - 1,src,tmp,src); END IF; END; ' LANGUAGE 'plpgsql';
select towerHanoi(3,1,2,3);
Veja o resultado da função
NOTA: DISK 1 Move da haste 1 para haste 2 CONTEXT: comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $4 ) PL/pgSQL function towerhanoi line 7 at perform comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $4 ) PL/pgSQL function towerhanoi line 7 at perform NOTA: DISK 2 Move da haste 1 para haste 3 CONTEXT: comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $4 ) PL/pgSQL function towerhanoi line 7 at perform NOTA: DISK 1 Move da haste 1 para haste 3 CONTEXT: comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $2 ) PL/pgSQL function towerhanoi line 9 at perform comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $4 ) PL/pgSQL function towerhanoi line 7 at perform NOTA: DISK 3 Move da haste 1 para haste 3 NOTA: DISK 1 Move da haste 1 para haste 3 CONTEXT: comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $4 ) PL/pgSQL function towerhanoi line 7 at perform comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $2 ) PL/pgSQL function towerhanoi line 9 at perform NOTA: DISK 2 Move da haste 1 para haste 1 CONTEXT: comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $2 ) PL/pgSQL function towerhanoi line 9 at perform NOTA: DISK 1 Move da haste 1 para haste 1 CONTEXT: comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $2 ) PL/pgSQL function towerhanoi line 9 at perform comando SQL SELECT towerHanoi( $1 - 1, $2 , $3 , $2 ) PL/pgSQL function towerhanoi line 9 at perform Total query runtime: 2 ms. Data retrieval runtime: 7 ms. 1 rows retrieved.
Esta simples função demonstra como usar recursividade, passagem de parâmetros e como chamar uma função em PL/PGSQL.
Marlon Luis Petry - Bel. Ciência da Computação - Linux, Programação, Banco de Dados.
Colaboração: Ricardo Caldas
O que aconteceria se um dia você precisasse religar uma máquina que você nao tem acesso físico? Uma das soluções para esse problema é o recurso Wake on Lan(WOL) das atuais placas de rede(juntamente com a placa mãe).
Este recurso permite que quando a máquina desligue a placa de rede fique em estado como de hibernação, respondendo só a um pacote chamado MagicPacket. Para isso tudo funcionar necessário 2 programas: wakeonlan <== Para enviar o magicpacket a placa de rede(mac addr). ethtool <== Para iniciar o modulo WOL na placa de rede.
Veja um passo-a-passo detalhado aqui: http://ostrecosdeti.wordpress.com/2008/07/31/configurando-wake-on-lan-no-debian/
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários