Der ADMIN 05/13 wirft einen Blick auf die frei verfügbaren Cloud-Frameworks von Eucalyptus über OpenNebula bis OpenStack. Gute Aussichten für skalierbare ... (mehr)

COPY FREEZE

Wenn große Datenmengen beispielsweise in eine Archivtabelle zu laden waren, so bot es sich vor PostgreSQL Version 9.3 an, nachträglich ein VACUUM FREEZE auf die Relation auszuführen, wenn sich die Datensätze im Anschluss garantiert nicht mehr änderten. Dies hatte den Vorteil, dass man sich einen späteren VACUUM FREEZE sparen konnte. Auf jeden Fall entfällt außerdem ein teurer zusätzlicher Scan der kompletten Tabelle im Anschluss, was gerade bei sehr großen Datenbeständen eine beachtliche Zeitersparnis ist.

In PostgreSQL 9.3 gibt es nun die Möglichkeit, das sofort beim Ladens der Daten erledigen. Das Kommando »COPY« wurde um den Parameter »FREEZE« erweitert.

»COPY« mit »FREEZE« erfordert einige Rahmenbedingungen. So muss die Zieltabelle in derselben Transaktion erzeugt worden sein, die auch den COPY-Befehl absetzt. Auch dürfen keine »CURSOR« auf diese Tabelle geöffnet sein. Das folgende Beispiel zeigt die Verwendung von »COPY FREEZE« mit einer CSV-Datei:

BEGIN;
CREATE TABLE t3(LIKE t2);
COPY archive_tbl FROM '/Users/bernd/tmp/archive.dat' FREEZE CSV;
COMMIT;

Häufiger regten Anwendern die Verfügbarkeit von Triggern beim Ausführen bestimmter DDL-Kommandos an. Solche Trigger können beispielsweise Änderungen an der Datenbank selbst verfolgen. Ein Anwendungsbeispiel sind etwa Replikationssysteme wie Slony-I, die auf eine entsprechende Benachrichtigung über veränderte Objekte angewiesen sind.

Event Trigger

Einen Event Trigger erzeugt man über das Kommando »CREATE EVENT TRIGGER« . Die Syntax folgt der normalen »CREATE TRIGGER« -Syntax, das heißt, die Trigger-Funktion ist im Vorfeld zu definieren. Listing 5 zeigt ein Beispiel, das pauschal alle »ALTER TABLE« -Kommandos in einer Datenbank mit einem Fehler verhindert:

Listing 5

Event Trigger

 

Neben dem Event-Trigger-Ereignis »ddl_command_start« stehen noch die Ereignisse »ddl_command_end« und »sql_drop« zur Verfügung. »ddl_command_start« wird vor dem Ausführen des jeweiligen DDL-Kommandos ausgeführt, »ddl_command_end« entsprechend bevor das DDL-Kommando beendet wird. Event Trigger mit dem »sql_drop« -Ereignis werden noch vor »ddl_command_end« -Event-Triggern ausgeführt: Für alle Objekte, die innerhalb dieses Ereignisses entfernt werden.

Event Trigger lassen sich im Moment in PL/pgSQL oder C implementieren. Ein CREATE-EVENT-TRIGGER-Kommando selbst kann nicht Auslöser eines Event Triggers sein.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023