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.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
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 /2022