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. Derlo
-Datentyp ist eine Domäne desoid
-Datentyps. Mit anderen Worten, es ist eine Objekt-ID mit optionalen Beschränkungen. Weitere Informationen finden Sie unter Objekt-IDsin 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
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
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 --passwordGeben Sie bei der Aufforderung Ihr Passwort ein. Der
psql
-Client verbindet und zeigt die standardmäßige administrative Verbindungsdatenbankpostgres=>
als Eingabeaufforderung an.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 postgresdocs-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