1

PostgreSQL e Funções Recursivas

#SQL #PostgreSQL #Banco de dados relacional
C
Caroline Resek

Oi gente! Eu só vim aqui para compartilhar algo que não era um conhecimento comum pra mim.


Mas primeiro eu quero revisar alguns termos:


  1. Função recursiva: função em que é feita uma ou mais chamadas a ela mesma. Ela geralmente é usada para solucionar um problema original que, quando dividido, gera subproblemas que são iguais e, para resolvê-lo, temos que reduzi-lo até chegarmos ao problema base (que sabemos resolver), solucioná-lo, solucionar o anterior e assim por diante.
  2. Árvore: é uma estrutura de dados recursiva que permite representar dados dispostos de maneira hierárquica.


E como isso se relaciona com a informação que eu gostaria de compartilhar?


Bom, há algum tempo eu tive contato com um banco de dados no Postgres que, dentre outras coisas, continha uma estrutura hierarquizada de IDs (formato de árvore) e eu precisava fazer uma consulta recursiva para saber quais IDs eram relacionados (nós pais e filhos da árvore), quando eu descobri que o Postgres já possuía uma função para isso:


with recursive: recurso SQL do PostgreSQL para fazer busca recursiva


with recursive nome as(

consulta não recursiva

UNION [ALL]

consulta recursiva

) consulta final


*defino bases para a recursividade acontecer - será filtrado tudo o que está abaixo do ID escolhido


*usará o resultado gerado pela primeira consulta


Exemplo :


with recursive tree as(

select id, ARRAY :: INTEGER[] as ancestors

from hierarquia

where pai_id IS NULL

UNION [ALL]

select id, tree.ancestors//pai_id

from hierarquia, tree

where pai_id=tree.id

) select * from tree

where id = ANY(tree.ancestors) or id=tree.id

order by 2


Espero que isso ajude mais alguém no futuro!

1
30

Comentários (1)

None

Brasil