![]() | ||
|
Was ist neu in PostgreSQL 8.2?Warm-Standby-DatenbankenSiehe hierzu: Replikation - Lösungen für PostgreSQL Online-Index-BuildsCREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] name ON table [ USING method ] ...
ohne CONCURRENTLY (bis Version 8.2)Während der Erzeugung eines Index sperrt PostgreSQL Schreibzugriffe für die betroffene Tabelle, bis der Index (in einem einzigen table-scan) erzeugt ist. Lesezugriffe sind immer möglich, aber INSERT, DELETE oder UPDATE-Operationen für diese Tabelle müssen warten, bis die Erstellung des Index abgeschlossen ist. In stark frequentierten Datenbanken oder bei grossen Tabellen kann dies zu nicht vertretbaren Wartezeiten führen, weswegen man solche Aufgaben oft in zugriffsschwache Zeiträume verlegen musste. CONCURRENTLYMit dieser Option kann PostgreSQL Indizes erzeugen, ohne Schreibsperren auf die indizierte Tabelle zu legen. Konkurrierende INSERTs, UPDATEs und DELETEs sind während der Indexerstellung möglich. Diese Art der Indexerstellung hat aber ihren Preis: Es sind zwei table-scans nötig und ausserdem muss erst gewartet werden, bis alle offenen Transaktionen beendet sind. Deshalb erfordert diese Art mehr Rechnerlast und dauert wesentlich länger, ist aber in bestehenden Produktivumgebungen nützlich, wenn neue Indizes zugefügt werden sollen, ohne Schreibzugriffe zu sperren. Die zusätzliche Rechnerlast und I/O können andere Operationen verlangsamen. GIN – Generalized Inverted IndexGIN bezeichnet eine Index-Struktur, die eine Menge von (key, dokumentenliste) - Paaren speichert, wobei dokumentenliste eine Menge von Datensätzen bezeichnet, die key in einem besimmten Feld enthalten. Invertiert meint, dass nicht etwa ein Primärschlüssel im Index gespeichert ist, um auf einen Datensatz zu verweisen, sondern Begriffe, die in dem Feld selbst enthalten sind. (siehe: http://en.wikipedia.org/wiki/Inverted_index)
Advisory locksAbgesehen von den Sperren, die bestimmte Kommandos verursachen (siehe: PostgreSQL Locks), können diese Sperren in PostgreSQL auch explizit mit LOCK table ... gesetzt werden.
Full Disjunctions (pgfoundry-Projekt)Die Tupelmengen aller Tabellen, die in gemeinsamen Attributwerten übereinstimmen, werden miteinander verknüpft, so dass
Ziel: Alle verwandten Informationen, und nur diese, sollen ohne Informationsverlust abgefragt werden. Motivation: Wenn die Einträge in den Tabellen unvollständig sind (wenn Spalten NULLwerte enthalten), verlieren NATURAL JOINs Informationen, weil nur die Datensätze zurückgegeben werden, deren Werte in den Spalten übereinstimmen und dieses Zwischenergebnis mit der nächsten Tabelle verknüpft wird. Full disjunctions erhalten diese Informationen und sind deshalb nützlich zur Abfrage heterogener Datenquellen, wie zB Webinhalte, bei denen nicht vorausgesetzt werden kann, dass alle Spalten Werte enthalten. Ein Beispiel unter: http://www.technion.ac.il/~tzahi/soc.html.
Selektiver pg_dumpAb PostgreSQL 8.2 ist es möglich, einzele Datenbankschemen zu dumpen oder auch bestimmte Datenbankschemen von einem Dump auszuschliessen. -n schema
macht einen Dump das angegebenen Schemas. Mehrere Schemen können durch wiederholte Angabe von -n schema gedumpt werden. Standardmässig werden mit -N schema
Mit dieser Option können Schemen vom Dump ausgeschlossen werden. Der Schemaname wird als pattern interpretiert und jeder Schemaname, der auf das pattern passt, wird ausgeschlossen.
Neue Option für psql\set FETCH_COUNT
Hat diese Variable einen Wert > 0, werden die Ergebnisse einer SELECT-Abfrage geholt und in Blöcken mit x Zeilen dargestellt, anstatt zuerst alle Zeilen zu holen und dann am Stück auszugeben wie in der Standardeinstellung. Dadurch wird nur eine begrenzte Menge des Speichers benutzt, egal wie gross die Ergebnismenge ist. Es kann passieren, dass eine Abfrage auch dann noch abbrechen kann, nachdem schon einige Zeilen am Bildschirm angezeigt werden. UPDATE | INSERT | DELETE ... RETURNING[ RETURNING * | output_expression [ AS output_name ] [, ...] ]
Für die Kommandos UPDATE, INSERT und DELETE steht die Option RETURNING zur Verfuegung. Damit können diese Operationen für jede aktualisierte, eingefügte oder gelöschte Zeile Werte für output_expression zurückgeben. output_expression ist ein Ausdruck, der aus den aktualisierten Spaltenwerten der Tabelle oder auch Spaltenwerten anderer Tabellen ([ FROM fromlist ] bei einem UPDATE bzw. [ USING usinglist ] bei einem DELETE) zusammengesetzt ist.
Erweiterte Syntax für UPDATE, INSERT und SELECTDie Syntax des UPDATE-Kommandos wurde dahingehend erweitert, dass es jetzt möglich ist, ganze Listen von Werten zu aktualisieren, anstatt für jedes einzelne Feld ein SET-Kommando zu schreiben: UPDATE tabelle set (feld1, feld2, ...) = (wert1, wert2, ...) WHERE ...
Bei einem INSERT können mehrere Zeilen gleichzeitig in eine Tabelle eingefügt werden: INSERT into tabelle (feld1, feld2, ...) VALUES
Bei SELECT-Kommandos können Listen von Feldern und Werten direkt verglichen werden: select * from foo where (a1,b1,b1) > (a,b,c);
Und ausserdem ...gibt es zahlreiche Performance-Verbesserungen, so dass die Geschwindigkeit von PostgreSQL bei Abfragen bis zu 20% gesteigert werden konnte. Die Einzelheiten können Sie in den PostgreSQL Release Notes 8.2 nachlesen. |
||||
| Service-Rufnummer: 0700 123 456 00 |
|||||
© und verantwortlich für den Inhalt: Ralf Burger Design und Realisierung: Cornelia Boenigk | |||||