Nyheter i PostgreSQL 8.4(.1)
- lör 14 nov, 2009 kl 18:20
- Kommentera!
- Databaser, Konferenser, Öppen källkod
En av föreläsningarna på FSCONS som jag hann besöka var Magnus Haganders uppdatering av vad som är nytt och snabbare (det var mycket performance imporvements) i PostgreSQL. En feature som jag saknat är stöd för rekursiva frågor. Det har funnits i SQL-standarden sedan 2003 men inte funnits i PostgreSQL förrän nu.
Ett exempel är typtabellen anställda (emp), som i detta fall innehåller:
id | department | name | manager ---+-------------+------+--------- 1 | Management | Bill | 2 | Management | Carl | 3 | Finance | Lisa | 1 4 | Development | Lars | 2 5 | Development | Mats | 2 6 | Development | Ola | 5
och med följande fråga
WITH RECURSIVE t(id, department, name, manager) AS ( SELECT id, department, name, manager FROM emp WHERE name='Carl' UNION ALL SELECT emp.id, emp.department, emp.name, emp.manager FROM emp JOIN t ON t.manager=emp.id ) SELECT * FROM t ORDER BY manager NULLS FIRST, id;
så blir resultatet
id | department | name | manager ---+-------------+------+--------- 2 | Management | Carl | 4 | Development | Lars | 2 5 | Development | Mats | 2 6 | Development | Ola | 5
Det röda pekar ut roten av trädet (raden man utgår från), följt av UNION och därefter urvalet i blått för resten av raderna (behöver matcha det röda) och därefter det rekursiva förhållandet i grönt.
Så, äntligen slipper man bygga in detta i funktioner och kan förlita sig på SQL endast!
En annan trevlig feature som jag inte sett i PostgreSQL tidigare är partiella aggregat (heter det så på svenska?) där man kan låta sum, avg, rank osv alltså jobba på delar av de resulterande raderna.