ao Objetivo 2 Padr˜ ao SQL Defini¸ c˜ ao Organiza¸ c˜ ao do SQL:2008 Conformidade 3 Recursos do PostgreSQL Gerenciamento de Dados Externos Common Table Expression (CTEs) Window Functions Full Text Search Mais recursos Leonardo Cezar SQL Proficiente
recursos da linguagem para manipula¸ c˜ ao de dados e otimizar o acesso a esses dados atrav´ es do padr˜ ao ISO/IEC 9075 e das extens˜ oes do PostgreSQL Leonardo Cezar SQL Proficiente
carga de processamento na aplica¸ c˜ ao • Diminuir o tr´ afego de rede • Migrar algoritmos complexos para o servidor de banco de dados Leonardo Cezar SQL Proficiente
ao Objetivo 2 Padr˜ ao SQL Defini¸ c˜ ao Organiza¸ c˜ ao do SQL:2008 Conformidade 3 Recursos do PostgreSQL Gerenciamento de Dados Externos Common Table Expression (CTEs) Window Functions Full Text Search Mais recursos Leonardo Cezar SQL Proficiente
Criado nos anos 80 pelo ISO/IEC • Comitˆ e gestor JTC-1 (information technology) • Especifica uma base para os dialetos SQL • Define features opcionais e obrigat´ orios • Define packages de funcionalidades • Dividido em 9 subse¸ c˜ oes Leonardo Cezar SQL Proficiente
Partes do ISO/IEC SQL:2008 • 9075-1: SQL/Framework (n´ ucleo) • Implementa o conceito sistem´ atico da linguagem e processadores de resultado • 9075-2: SQL/Foundation (n´ ucleo) • Implementa a especifica¸ c˜ ao de manipuladores de dados • 9075-3: SQL/CLI (externo - ODBC) • Define camada de acesso externa (exceto java) • 9075-4: SQL/PSM (externo - PL/pgPSM) • Define a semˆ antica de instru¸ c˜ oes de linguagens procedurais Leonardo Cezar SQL Proficiente
Partes do ISO/IEC SQL:2008 • 9075-9: SQL/MED (n´ ucleo) • Define extens˜ oes para suportar gerenciamento de fonte de dados externa atrav´ es de datalink • 9075-11: SQL/Schemata (n´ ucleo) • Implementa a cria¸ c˜ ao e acesso aos dados • 9075-13: SQL/JRT (externo - PL/Java) • Fun¸ c˜ oes e tipos utilizando Java • 9075-14: SQL/XML (n´ ucleo) • Suporte XML Leonardo Cezar SQL Proficiente
E quanto as outras sequˆ encias do ISO/IEC 9075? • 9075-5: SQL/Bindings (n´ ucleo) • Migrado para 9075-2 em 2003 • 9075-6: SQL/Transaction (XA) • Cancelado em 1999 • 9075-7: SQL/Temporal • Cancelado • 9075-10: SQL/OLB • Especifica a s´ ıntaxe para incorporar SQL na linguagem Java atrav´ es de amarra¸ c˜ oes. • 9075-12: SQL/Replication (n´ ucleo) • Cancelado Leonardo Cezar SQL Proficiente
• Conformidade m´ ınima (Core SQL) • SQL/Foundations e SQL/Schemata • Conformidade em partes • Implementar todas as features de uma parte (ex.: ISO/IEC 9075-9 SQL/MED) • Conformidade com features • Implementar a funcionalidade e suas subfuncionalidades em sua totalidade • Conformidade com Packages • Agrupamento de features opcionais • Implementar todas as features da Package Leonardo Cezar SQL Proficiente
ao Objetivo 2 Padr˜ ao SQL Defini¸ c˜ ao Organiza¸ c˜ ao do SQL:2008 Conformidade 3 Recursos do PostgreSQL Gerenciamento de Dados Externos Common Table Expression (CTEs) Window Functions Full Text Search Mais recursos Leonardo Cezar SQL Proficiente
Externos • ISO/IEC 9075-9:2003 SQL/MED • M´ etodos de acess a dados armazenados em fontes externas • SGBDs • MS SQLServer • MySQL • Oracle • Arquivos • XML • YAML • CSV • Outras instˆ ancias PostgreSQL • Unificar acesso externo (DBI, dblink, PLProxy) • Maior controle na administra¸ c˜ ao de links externos Leonardo Cezar SQL Proficiente
Externos MED postgres=# CREATE FOREIGN DATA WRAPPER pgday VALIDATOR postgresql_fdw_validator; postgres=# CREATE SERVER srvpgday FOREIGN DATA WRAPPER pgday OPTIONS (host ’srv-pgday’, dbname ’pgday’, port ’5432’); postgres=# CREATE USER MAPPING FOR lhcezar SERVER srvpgday OPTIONS (user ’lhcezar’, password ’lhcezar’); postgres=$ SELECT dblink_connect(’pgday_c’, ’srvpgday’); postgres=$ SELECT * from dblink(’pgday_c’, ’SELECT * FROM pgday’) AS (id int, palestra varchar); id | palestra ----+----------------- 1 | SQL Proficiente Leonardo Cezar SQL Proficiente
RECURSIVE • ISO/IEC 9075-2:2003 • Permite reaproveitar express˜ oes pr´ eviamente definidas em uma mesma instru¸ c˜ ao • Semelhante a utiliza¸ c˜ ao de uma vis˜ ao • Permite gerar chamadas recursivas • Utilizado para percorrer uma lista finita de valores em uma express˜ ao Leonardo Cezar SQL Proficiente
RECURSIVE - s´ erie de Fibonacci WITH RECURSIVE t ( x , y ) AS ( VALUES(0 ,1) UNION ALL SELECT GREATEST( x , y ) , x + y AS a FROM t WHERE y < 5 ) SELECT a AS f i b o n a c c i FROM t ; +-----------+ | fibonacci | +-----------+ | 0 | | 1 | | 1 | | 2 | | 3 | +-----------+ Leonardo Cezar SQL Proficiente
RECURSIVE - sequˆ encias vazias WITH RECURSIVE cte ( n ) AS ( SELECT p r o d u t o s p a i . i d + 1 FROM produtos p r o d u t o s p a i WHERE NOT EXISTS (SELECT NULL FROM produtos p r o d u t o s f i l h o WHERE p r o d u t o s f i l h o . i d = p r o d u t o s p a i . i d +1) AND p r o d u t o s p a i . i d < (SELECT MAX( i d ) FROM produtos ) UNION ALL SELECT cte . n +1 FROM cte WHERE NOT EXISTS (SELECT NULL FROM produtos r WHERE r . i d = cte . n + 1) ) SELECT n AS v a z i a s FROM cte ; Leonardo Cezar SQL Proficiente
ISO/IEC 9075-2 • Efetivar c´ alculos para determinado agrupamento de linhas • N˜ ao limita a sa´ ıda das tuplas com opera¸ c˜ oes GROUP BY • Utiliza a cl´ ausula OVER e PARTITION BY (SQL ANSI) Leonardo Cezar SQL Proficiente
BY SELECT nspname AS esquema , relname AS tabela , r e l t u p l e s AS l i n h a s , −− windows frame c r i a d o para cada grupo de esquemas SUM( r e l t u p l e s ) OVER (PARTITION BY nspname ) AS t o t a l l i n h a s FROM p g c l a s s r JOIN pg namespace n ON r . relnamespace = n . oid WHERE r e l k i n d = ’ r ’ AND nspname NOT IN( ’ pg catalog ’ , ’ information schema ’ ) ; Leonardo Cezar SQL Proficiente
Busca atrav´ es de similaridade • Classificar resultados pela relevˆ ancia • Consulta baseada em dicion´ arios • Defini¸ c˜ ao de stop words Leonardo Cezar SQL Proficiente
Exemplo de consulta SELECT t i t l e , t s h e a d l i n e ( d e s c r i p t i o n , t o t s q u e r y ( ’ f a t e&i n d i a ’ )) FROM f i l m WHERE f u l l t e x t @@ t o t s q u e r y ( ’ f a t e&i n d i a ’ ) ; +--------------------+--------------------------------------------------------- | title | ts_headline +--------------------+--------------------------------------------------------- | ANTITRUST TOMATOES | <b>Fateful</b> Yarn of a Womanizer in Ancient <b>India</ | EASY GLADIATOR | <b>Fateful</b> Story of a Monkey Ancient <b>India</b> | SLEUTH ORIENT | <b>Fateful</b> Character Study of a <b>India</b> +--------------------+--------------------------------------------------------- Leonardo Cezar SQL Proficiente