• Nenhum resultado encontrado

O Elefante arborícola

N/A
N/A
Protected

Academic year: 2021

Share "O Elefante arborícola"

Copied!
44
0
0

Texto

(1)

. . . .

Sumário Introdução

,230 0 00 0 0,

O Elefante arborícola

Consultas recursivas com expressões comuns de tabelas

Leandro Guimarães Faria Corcete Dutra

1Comunidade Brasileira de PostgreSQL 2ArsData

III Conferência brasileira de PostgreSQL (2009)

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(2)

Sumário Introdução

(3)

. . . . Sumário Introdução

Besteirol

I NoSQL I SGBDs OO I SGBDs multivalorados I Prevayler I LDAP I …

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(4)

Sumário Introdução

Besteirol

I NoSQL I SGBDs OO I SGBDs multivalorados I Prevayler I LDAP I …

(5)

. . . . Sumário Introdução

Besteirol

I NoSQL I SGBDs OO I SGBDs multivalorados I Prevayler I LDAP I …

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(6)

Sumário Introdução

Besteirol

I NoSQL I SGBDs OO I SGBDs multivalorados I Prevayler I LDAP I …

(7)

. . . . Sumário Introdução

Besteirol

I NoSQL I SGBDs OO I SGBDs multivalorados I Prevayler I LDAP I …

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(8)

Sumário Introdução

Besteirol

I NoSQL I SGBDs OO I SGBDs multivalorados I Prevayler I LDAP I …

(9)

. . . .

Sumário Introdução

Problemas aparentes

I Dificuldade de aprendizado

I Não OO

I Não parecido com C, Java &c

I Computacionalmente incompleto

I Não lidar com dados ‘ricos’ ou ‘desestruturados’

I Não lidar com hierarquias

I …

I Mentiras! :-)

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(10)

Sumário Introdução

Problemas aparentes

I Dificuldade de aprendizado

I Não OO

I Não parecido com C, Java &c

I Computacionalmente incompleto

I Não lidar com dados ‘ricos’ ou ‘desestruturados’

I Não lidar com hierarquias

I …

(11)

. . . .

Sumário Introdução

Problemas aparentes

I Dificuldade de aprendizado

I Não OO

I Não parecido com C, Java &c

I Computacionalmente incompleto

I Não lidar com dados ‘ricos’ ou ‘desestruturados’

I Não lidar com hierarquias

I …

I Mentiras! :-)

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(12)

Sumário Introdução

Problemas aparentes

I Dificuldade de aprendizado

I Não OO

I Não parecido com C, Java &c

I Computacionalmente incompleto

I Não lidar com dados ‘ricos’ ou ‘desestruturados’

I Não lidar com hierarquias

I …

(13)

. . . .

Sumário Introdução

Problemas aparentes

I Dificuldade de aprendizado

I Não OO

I Não parecido com C, Java &c

I Computacionalmente incompleto

I Não lidar com dados ‘ricos’ ou ‘desestruturados’

I Não lidar com hierarquias

I …

I Mentiras! :-)

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(14)

Sumário Introdução

Problemas aparentes

I Dificuldade de aprendizado

I Não OO

I Não parecido com C, Java &c

I Computacionalmente incompleto

I Não lidar com dados ‘ricos’ ou ‘desestruturados’

I Não lidar com hierarquias

I …

(15)

. . . .

Sumário Introdução

Problemas aparentes

I Dificuldade de aprendizado

I Não OO

I Não parecido com C, Java &c

I Computacionalmente incompleto

I Não lidar com dados ‘ricos’ ou ‘desestruturados’

I Não lidar com hierarquias

I …

I Mentiras! :-)

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(16)

Sumário Introdução

Problemas aparentes

I Dificuldade de aprendizado

I Não OO

I Não parecido com C, Java &c

I Computacionalmente incompleto

I Não lidar com dados ‘ricos’ ou ‘desestruturados’

I Não lidar com hierarquias

I …

(17)

. . . .

Sumário Introdução

Falsos problemas

I Forma mais simples já imaginada de lidar com dados

I Modelo relacional é ortogonal com OO

I SQL não é única implementação relacional possível

I Dados ricos ou desetruturados são ortogonais (tipos)

I SQL é computacionalmente completo desde o ISO SQL:2008…

I …e o PostgreSQL, desde a versão 8.4…

I …graças à recursividade (SQL99) e funções de janela

I Recursividade nos dá hierarquia, grafos &c!

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(18)

Sumário Introdução

Falsos problemas

I Forma mais simples já imaginada de lidar com dados

I Modelo relacional é ortogonal com OO

I SQL não é única implementação relacional possível

I Dados ricos ou desetruturados são ortogonais (tipos)

I SQL é computacionalmente completo desde o ISO SQL:2008…

I …e o PostgreSQL, desde a versão 8.4…

I …graças à recursividade (SQL99) e funções de janela

(19)

. . . .

Sumário Introdução

Falsos problemas

I Forma mais simples já imaginada de lidar com dados

I Modelo relacional é ortogonal com OO

I SQL não é única implementação relacional possível

I Dados ricos ou desetruturados são ortogonais (tipos)

I SQL é computacionalmente completo desde o ISO SQL:2008…

I …e o PostgreSQL, desde a versão 8.4…

I …graças à recursividade (SQL99) e funções de janela

I Recursividade nos dá hierarquia, grafos &c!

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(20)

Sumário Introdução

Falsos problemas

I Forma mais simples já imaginada de lidar com dados

I Modelo relacional é ortogonal com OO

I SQL não é única implementação relacional possível

I Dados ricos ou desetruturados são ortogonais (tipos)

I SQL é computacionalmente completo desde o ISO SQL:2008…

I …e o PostgreSQL, desde a versão 8.4…

I …graças à recursividade (SQL99) e funções de janela

(21)

. . . .

Sumário Introdução

Falsos problemas

I Forma mais simples já imaginada de lidar com dados

I Modelo relacional é ortogonal com OO

I SQL não é única implementação relacional possível

I Dados ricos ou desetruturados são ortogonais (tipos)

I SQL é computacionalmente completo desde o ISO SQL:2008…

I …e o PostgreSQL, desde a versão 8.4…

I …graças à recursividade (SQL99) e funções de janela

I Recursividade nos dá hierarquia, grafos &c!

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(22)

Sumário Introdução

Falsos problemas

I Forma mais simples já imaginada de lidar com dados

I Modelo relacional é ortogonal com OO

I SQL não é única implementação relacional possível

I Dados ricos ou desetruturados são ortogonais (tipos)

I SQL é computacionalmente completo desde o ISO SQL:2008…

I …e o PostgreSQL, desde a versão 8.4…

I …graças à recursividade (SQL99) e funções de janela

(23)

. . . .

Sumário Introdução

Falsos problemas

I Forma mais simples já imaginada de lidar com dados

I Modelo relacional é ortogonal com OO

I SQL não é única implementação relacional possível

I Dados ricos ou desetruturados são ortogonais (tipos)

I SQL é computacionalmente completo desde o ISO SQL:2008…

I …e o PostgreSQL, desde a versão 8.4…

I …graças à recursividade (SQL99) e funções de janela

I Recursividade nos dá hierarquia, grafos &c!

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(24)

Sumário Introdução

Falsos problemas

I Forma mais simples já imaginada de lidar com dados

I Modelo relacional é ortogonal com OO

I SQL não é única implementação relacional possível

I Dados ricos ou desetruturados são ortogonais (tipos)

I SQL é computacionalmente completo desde o ISO SQL:2008…

I …e o PostgreSQL, desde a versão 8.4…

I …graças à recursividade (SQL99) e funções de janela

(25)

. . . .

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

I Recursividade: expressões comuns de tabelas.

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(26)

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

(27)

. . . .

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

I Recursividade: expressões comuns de tabelas.

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(28)

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

(29)

. . . .

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

I Recursividade: expressões comuns de tabelas.

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(30)

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

(31)

. . . .

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

I Recursividade: expressões comuns de tabelas.

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(32)

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

(33)

. . . .

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

I Recursividade: expressões comuns de tabelas.

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(34)

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

(35)

. . . .

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

I Recursividade: expressões comuns de tabelas.

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(36)

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

(37)

. . . .

Sumário Introdução

Soluções para hierarquias‽

I Processamento externo

I Caro em recursos — escalabilidade

I Não relacional

I Enumeração de caminhos materializados

I Funções & procedimentos armazenados

I Conjuntos aninhados (nested sets)

I Caro na escrita

I Complicado

I Estúpido

I Oracle CONNECT BY

I Antigo, e implementado no contrib

I Incomum, e obsoleto no Oracle 11gr2

I Recursividade: expressões comuns de tabelas.

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(38)

Sumário Introdução

Recursividade

I Solução correta para o problema da hierarquia

I Solução genérica: grafos &c

I Interessante: conjuntos de Mandelbrot, caixeiro�viajante &c

I Relacional (na medida do possível em SQL)

(39)

. . . .

Sumário Introdução

Recursividade com expressões comuns de tabelas

I Padrão ISO SQL:1999

I prenunciado como a solução desde 1997 ao menos

I relacional, ao menos em espírito e na prática

I veloz, econômico…

I e (relativamente) simples

I ISO SQL, Yoshiyuki Asaba, Ishii Tatsuo, Jeff Davis,

Gregory Stark, Tom Lane, David Fetter, comunidade japonesa

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(40)

Sumário Introdução

Expressões de tabelas: WITH

WITH a p e l i d o ( l i s t a _ a t r i b u t o s ) AS ( c o n s u l t a ) [ , … ] SELECT l i s t a _ p r o j e ç ã o

FROM a p e l i d o [ , … ] …

A ordem em que aparecem os apelidos é essencial. Uma tabela para o exemplo: CREATE TABLE p e d i d o s ( r e g i ã o , p r o d u t o , v a l o r ,

(41)

. . . .

Sumário Introdução

WITH v e n d a s _ r e g i ã o AS

(SELECT r e g i ã o , SUM ( montante ) AS t o t a i s FROM p e d i d o s

GROUP BY r e g i ã o ) , m e l h o r e s _ r e g i õ e s AS (SELECT r e g i ã o

FROM v e n d a s _ r e g i ã o

WHERE t o t a i s > (SELECT SUM( t o t a i s ) / 1 0 FROM v e n d a s _ r e g i ã o ) ) SELECT r e g i ã o , p r o d u t o , SUM( q u a n t i d a d e ) AS u n i d a d e s , SUM( montante ) AS v a l o r FROM p e d i d o s WHERE r e g i ã o IN (SELECT r e g i ã o FROM m e l h o r e s _ r e g i õ e s ) GROUP BY r e g i ã o , p r o d u t o ;

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(42)

Sumário Introdução

Mecanismo de recursão

I Condição inicial

I Passo de recursão (consulta)

I Condição terminal

Se não…

I GNU Hurd

I Gnu Não é Unix

(43)

. . . .

Sumário Introdução

Expressões recursivas de tabelas

WITH RECURSIVE a p e l i d o [ ( a t r i b u t o s ) ] AS ( t e r m o _ n ã o _ r e c u r s i v o UNION [ ALL ] t e r m o _ r e c u r s i v o ) c o n s u l t a ;

Leandro Guimarães Faria Corcete Dutra PostgreSQL BR, ArsData O Elefante arborícola

(44)

Sumário Introdução

Exemplo simplicíssimo, do manual

WITH RECURSIVE t ( n ) AS (VALUES ( 1 ) UNION ALL SELECT n + 1 FROM t WHERE n < 100 ) SELECT SUM ( n ) FROM t ;

Referências

Documentos relacionados