Verwalten großer Objekte mit dem lo-Modul - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwalten großer Objekte mit dem lo-Modul

Das lo-Modul (Erweiterung) richtet sich an Datenbankbenutzer und Entwickler, die mit PostgreSQL-Datenbanken über JDBC- oder ODBC-Treiber arbeiten. Sowohl JDBC als auch ODBC erwarten, dass die Datenbank das Löschen großer Objekte bewältigt, wenn sich Verweise auf sie ändern. PostgreSQL funktioniert jedoch nicht so. PostgreSQL geht nicht davon aus, dass ein Objekt gelöscht werden sollte, wenn sich sein Verweis ändert. Demzufolge verbleiben Objekte auf der Festplatte und sind nicht referenziert. Die Erweiterung lo enthält eine Funktion, mit der bei Referenzänderungen das Löschen von Objekten bei Bedarf ausgelöst wird.

Tipp

Wenn Sie feststellen möchten, ob Ihre Datenbank von der lo-Erweiterung profitieren kann, suchen Sie mit dem vakuumlo-Dienstprogramm nach verwaisten großen Objekten. Um die Anzahl von verwaisten großen Objekten zu erhalten, ohne Maßnahmen zu ergreifen, führen Sie das Dienstprogramm mit der -n Option (no-op) aus. Weitere Informationen erhalten Sie unter vacuumlo utility.

Das lo-Modul ist für Aurora PostgreSQL 13.7, 12.11, 11.16, 10.21 und höhere Nebenversionen verfügbar.

Zum Installieren des Moduls (Erweiterung) benötigen Sie rds_superuser-Berechtigungen. Durch die Installation der lo-Erweiterung wird Ihrer Datenbank Folgendes hinzugefügt:

  • lo – Dies ist ein Datentyp für große Objekte (lo), den Sie für binäre große Objekte (BLOBs) und andere große Objekte verwenden können. Der lo-Datentyp ist eine Domäne des oid-Datentyps. Mit anderen Worten, es ist eine Objekt-ID mit optionalen Beschränkungen. Weitere Informationen finden Sie unter Objekt-IDs in der PostgreSQL-Dokumentation. Vereinfacht gesagt, können Sie anhand des lo-Datentyps Ihre Datenbankspalten, die große Objektreferenzen enthalten, von anderen Objekt-IDs (OIDs) unterscheiden.

  • lo_manage – Dies ist eine Funktion, die Sie in Triggern für Tabellenspalten verwenden können, die große Objektreferenzen enthalten. Immer wenn Sie einen Wert löschen oder ändern, der auf ein großes Objekt verweist, hebt der Trigger die Verknüpfung des Objekts (lo_unlink) mit seiner Referenz auf. Verwenden Sie den Trigger für eine Spalte nur, wenn die Spalte der einzige Datenbankverweis auf das große Objekt ist.

Weitere Informationen zum Modul für große Objekte erhalten Sie unter lo in der PostgreSQL-Dokumentation.

Installieren der lo-Erweiterung

Stellen Sie vor der Installation der lo-Erweiterung sicher, dass Sie über rds_superuser-Berechtigungen verfügen.

So installieren Sie die lo-Erweiterung
  1. Verwenden Sie psql, um eine Verbindung mit der primären DB-Instance Ihres Aurora-PostgreSQL-DB-Clusters herzustellen.

    psql --host=your-cluster-instance-1.666666666666.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password

    Geben Sie bei der Aufforderung Ihr Passwort ein. Der psql-Client verbindet und zeigt die standardmäßige administrative Verbindungsdatenbank postgres=> als Eingabeaufforderung an.

  2. Installieren Sie die Erweiterung wie folgt.

    postgres=> CREATE EXTENSION lo; CREATE EXTENSION

Sie können jetzt den lo-Datentyp zum Definieren von Spalten in Ihren Tabellen verwenden. Beispielsweise können Sie eine Tabelle (images) erstellen, die Raster-Bilddaten enthält. Sie können den lo-Datentyp für eine Spalte raster verwenden, wie im folgenden Beispiel, mit dem eine Tabelle erstellt wird, gezeigt.

postgres=> CREATE TABLE images (image_name text, raster lo);

Verwenden der Triggerfunktion lo_manage zum Löschen von Objekten

Sie können die lo_manage-Funktion in einem Trigger in einer lo oder anderen großen Objektspalten verwenden, um verwaiste Objekte zu bereinigen (und zu verhindern), wenn lo aktualisiert oder gelöscht wird.

So richten Sie Trigger für Spalten ein, die auf große Objekte verweisen
  • Führen Sie eine der folgenden Aktionen aus:

    • Erstellen Sie einen BEFORE UPDATE ODER DELETE-Trigger für jede Spalte, damit diese eindeutige Verweise auf große Objekte enthält, wobei der Spaltenname als Argument verwendet wird.

      postgres=> CREATE TRIGGER t_raster BEFORE UPDATE OR DELETE ON images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster);
    • Wenden Sie einen Trigger nur an, wenn die Spalte aktualisiert wird.

      postgres=> CREATE TRIGGER t_raster BEFORE UPDATE OF images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster);

Die lo_manage-Trigger-Funktion funktioniert nur im Kontext des Einfügens oder Löschens von Spaltendaten, je nachdem, wie Sie den Trigger definieren. Er hat keine Auswirkung, wenn Sie eine DROP- oder TRUNCATE-Operation in einer Datenbank ausführen. Das bedeutet, dass Sie vor der Verwendung der DROP-Operation Objektspalten aus allen Tabellen löschen sollten, um das Erstellen von verwaisten Objekten zu verhindern.

Angenommen, Sie möchten die Datenbank entfernen, die die Tabelle images enthält. Sie löschen die Spalte wie folgt.

postgres=> DELETE FROM images COLUMN raster

Vorausgesetzt, die lo_manage-Funktion ist in dieser Spalte definiert, um Löschvorgänge zu behandeln, können Sie die Tabelle jetzt sicher entfernen.

Verwenden des vacuumlo-Dienstprogramms

Das vakuumlo-Dienstprogramm identifiziert verwaiste große Objekte und kann diese aus Datenbanken entfernen. Dieses Dienstprogramm ist seit PostgreSQL 9.1.24 verfügbar. Wenn Ihre Datenbankbenutzer routinemäßig mit großen Objekten arbeiten, empfehlen wir Ihnen, vakuumlo gelegentlich auszuführen, um verwaiste große Objekte zu bereinigen.

Bevor Sie die lo-Erweiterung installieren, können Sie mit vacuumlo beurteilen, ob Ihr Aurora-PostgreSQL-DB-Cluster davon profitieren kann. Führen Sie dazu vacuumlo mit der -n-Option (no-op) aus, um zu zeigen, was entfernt würde, wie im Folgenden gezeigt:

$ vacuumlo -v -n -h your-cluster-instance-1.666666666666.aws-region.rds.amazonaws.com -p 5433 -U postgres docs-lab-spatial-db Password:***** Connected to database "docs-lab-spatial-db" Test run: no large objects will be removed! Would remove 0 large objects from database "docs-lab-spatial-db".

Wie die Ausgabe zeigt, stellen verwaiste große Objekte für diese bestimmte Datenbank kein Problem dar.

Weitere Informationen über dieses Dienstprogramm finden Sie unter vacuumlo in der PostgreSQL-Dokumentation.