PostgreSQL - Funções

Como na maioria dos bancos de dados, podemos encadear uma série de frases SQL e tratá-los como uma unidade de um bloco funcional; os diferentes bancos de dados descrevem esta operação com diferentes nomes, procedimentos armazenados, módulos, macros, etc.

Em PostgreSQL eles são chamados de funções. Além de unificar várias instruções SQL, essas funções também nos permitem executar instruções SQL usando linguagens procedurais (PL).

Em PostgreSQL temos várias opções para isso e a capacidade de expandi-las.

1. Funções PostgreSQL


Anatomia de uma função
Independentemente da linguagem utilizada para escrever as funções, elas possuem uma estrutura, esta estrutura pode ser sintetizada com o seguinte:
 CREATE OR REPLACE FUNCTION func_name (arg1_arg1datatype) RETURNS some_type / setoff someype / TABLE / (…) / AS $$ BODY off function $$ LANGUAGE language_of_function
Se descrevermos o que vemos, é bastante simples, CRIAR OU SUBSTITUIR FUNÇÃO é a cláusula de criação da função, func_name é o nome que arg1 terá é o parâmetro que receberá e arg1_datatype é o tipo de dado que é referido parâmetro, ou seja, se for um inteiro, uma string, etc. Em RETORNOS Retornamos o resultado da nossa função, $$ é o início do bloco que dará lugar ao corpo da função e então termina o mesmo com $$ e finalmente LÍNGUA nos permite especificar o idioma no qual a função é escrita.

É uma estrutura bem definida e bastante legível, por isso não devemos ter problemas para criar nossas funções.

Escrevendo funções com SQL
Escreva as funções usando SQL É muito fácil e rápido, é pegar nossas instruções SQL basicamente e adicionar o cabeçalho e o rodapé das funções a ela e pronto.

No entanto, como tudo o mais, isso tem o custo de alguns sacrifícios, por exemplo, perdemos a flexibilidade de que se pudéssemos trabalhar com outra linguagem para criar mais ramos de controle de execução condicional, não poderíamos ter mais de uma instrução SQL, embora isso possa ser remediado usando vários métodos.

A maior vantagem é que, como o SQL é o planejador PostgreSQL nos permite aproveitar os índices e assim acelerar sua execução, por outro lado com outras linguagens a função será sempre uma caixa preta

Agora, vamos examinar uma função escrita com SQL:

 CRIAR OU SUBSTITUIR A FUNÇÃO ins_logs (param_user_name varchar, param_description text) RETURNS integer AS $$ INSERT INTO logs (user_name, description) VALUES ($ 1, $ 2) RETURNING log_id; $$ LANGUAGE 'sql' VOLATILE;
Vemos que seguimos a estrutura definida acima e ao final na seção LÍNGUA nós definimos a cláusula 'sql' VOLÁTIL O fato de possuir significa que a função pode retornar algo diferente a cada chamada feita a ela, mesmo que receba os mesmos parâmetros. Então, para chamar nossa função, podemos usar:
 SELECT ins_logs ('lhsu', 'isto é um teste') Como new_id;
Nós fazemos uma frase SELECIONE, a função está ativa e o que retorna é o que receberemos e neste caso veremos um valor que chamamos de new_id e que a função retorna como log_id.
Podemos até usar uma função para fazer uma atualização de registro e retornar um parâmetro void como neste exemplo:
 CREATE OR REPLACE FUNCTION upd_logs (log_id integer, param_user_name varchar, param_description text) RETURNS void AS $$ UPDATE logs SET user_name = $ 2, description = $ 3, log_ts = CURRENT_TIMESTAMPWHERE log_id = $ 1; $$ LANGUAGE 'sql' VOLATILE; 'VOLÁTIL'
Sendo nulos, não precisamos de um campo receptor, então o executamos da seguinte forma:
 SELECT upd_logs (12, 'robe', 'Mudar para regina');
Aqui podemos ver que removemos a última etapa de As new_id da chamada anterior.
Com isso terminamos este tutorial, agora podemos fazer nossas funções básicas em SQL, facilitando e simplificando muitas atividades que podemos precisar dentro de um programa ou sistema que estamos construindo.

2. Funções PostgreSQL em outras linguagens


Uma das características mais atraentes de PostgreSQL é que não se limita apenas à linguagem SQLGraças ao carregamento dos módulos, podemos optar por incorporar funcionalidades avançadas, incluindo a possibilidade de utilizar diferentes linguagens para construir funções, com isso podemos alcançar uma grande flexibilidade utilizando as melhores capacidades de geração de condicionais e as vantagens inerentes às várias linguagens.

Escrevendo funções com PL / pgSQL
No momento em que percebemos que o padrão SQL é insuficiente para as consultas que queremos realizar em uma função, podemos sempre recorrer ao uso do PL / pgSQL; uma de suas diferenças e melhorias em relação ao SQL é que as variáveis ​​locais podem ser declaradas usando a instrução DECLARE, também podemos ter controle sobre o fluxo e devemos colocar o corpo da função em um bloco BEGIN END.

Vejamos um exemplo de função escrita nesta linguagem:

 CRIAR FUNÇÃO sel_logs_rt (param_user_name varchar) RETURNS TABLE (log_id int, user_name varchar (50), texto de descrição, log_ts timestamptz) AS $$ BEGIN RETURN QUERY SELECT log_id, user_name, descrição, log_ts FROM logs WHERE user_name = param_user_name; FIM; $$ LANGUAGE 'plpgsql' STABLE; 
Agora vamos ver como escrever funções com Python.

Escrevendo funções com Python
Python é uma linguagem de programação bastante limpa, que possui um grande número de bibliotecas disponíveis.
PostgreSQL é o único mecanismo de banco de dados que permite usar Python para construir funções.

Para obter a possibilidade de criar funções com Python, devemos primeiro nos certificar de que temos a linguagem instalada em nosso servidor. Assim que soubermos que o instalamos, devemos habilitar as extensões dentro do PostgreSQL usando os seguintes comandos:

 CRIAR EXTENSÃO plpython2u; CRIAR EXTENSÃO plpython3u; 
Devemos ter certeza de que o Python está instalado e funcionando antes de habilitar as extensões para evitar erros.

Funções básicas com Python
Assim que tivermos tudo ativado para poder usar Python, vamos começar a construir nossa função, é importante saber que o PostgreSQL pode converter seus tipos de dados em tipos de dados Python e vice-versa. PL / Python é até capaz de retornar arrays e tipos compostos.

Vejamos a seguir uma função que realiza uma busca de texto em um recurso online, algo que não poderia ser feito com PL / pgSQL, na imagem a seguir veremos o código e a seguir faremos a explicação correspondente.

  • Importamos as bibliotecas que vamos usar.
  • Fazemos a pesquisa na web concatenando os parâmetros de entrada do usuário.
  • Lemos a resposta e a salvamos em um arquivo HTML chamado raw_html.
  • Salvamos a parte do HTML que começa com e termina antes do início de.
  • Removemos as tags HTML e os espaços em branco e salvamos a variável chamada resultado novamente.
  • Devolvemos o resultado final.
  • Outro recurso interessante de usar Python é que podemos interagir diretamente com o sistema operacional, vamos ver uma função que faz uma listagem de diretório, deve-se notar que isso deve ser criado por um superusuário:
 CRIAR OU SUBSTITUIR A FUNÇÃO list_incoming_files () RETORNA SETOF text AS $$ import os return os.listdir ('/ Entry') $$ LANGUAGE 'plpython2u' VOLATILE SECURITY DEFINER;
Qual a utilidade disso? Podemos nos perguntar, pois imagine que queremos consultar os arquivos que temos disponíveis em um sistema, a chamada para a função seria algo assim:
 SELECT nome do arquivo FROM list_incoming_files () Como nome do arquivo WHERE nome do arquivo ILIKE '% .csv'
Com isso finalizamos este tutorial, já tratamos da criação de funções em outras linguagens em PostgreSQL, o que nos dá um campo infinito quando se trata de atender às nossas necessidades.

wave wave wave wave wave