DML-Einschränkungen und andere Informationen für Aurora PostgreSQL Limitless Database - 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.

DML-Einschränkungen und andere Informationen für Aurora PostgreSQL Limitless Database

In den folgenden Themen werden Einschränkungen beschrieben oder weitere Informationen zu DML und zu SQL-Befehlen für die Abfrageverarbeitung in Aurora PostgreSQL Limitless Database bereitgestellt.

ANALYZE

Der Befehl ANALYZE sammelt Statistiken über den Inhalt von Tabellen in der Datenbank. Anschließend verwendet der Abfrageplaner diese Statistiken, um die effizientesten Ausführungspläne für Abfragen zu ermitteln. Weitere Informationen finden Sie unter ANALYZE in der PostgreSQL-Dokumentation.

In Aurora PostgreSQL Limitless Database sammelt der Befehl ANALYZE bei seiner Ausführung Tabellenstatistiken für alle Router und Shards.

Um zu verhindern, dass während der Ausführung von ANALYZE Statistiken für jeden Router berechnet werden, werden Tabellenstatistiken auf einem der Router berechnet und dann auf Peer-Router kopiert.

CLUSTER

Der Befehl CLUSTER ordnet eine Tabelle anhand eines Indexes physisch neu an. Der Index muss zuvor für die Tabelle definiert worden sein. In Aurora PostgreSQL Limitless Database findet das Clustering lokal für den Teil des Index statt, der auf jedem Shard vorhanden ist.

Weitere Informationen finden Sie unter CLUSTER in der PostgreSQL-Dokumentation.

EXPLAIN

Sie verwenden den folgenden Parameter, um die Ausgabe des Befehls EXPLAIN zu konfigurieren:

  • rds_aurora.limitless_explain_options: Bestimmt, was in die Ausgabe EXPLAIN aufgenommen werden soll. Der Standardwert lautet single_shard_optimization: Er zeigt an, ob Pläne für Single-Shard optimiert sind, Shard-Pläne sind jedoch nicht enthalten.

In diesem Beispiel werden in der Ausgabe EXPLAIN keine Pläne aus Shards angezeigt.

postgres_limitless=> EXPLAIN SELECT * FROM employees where id =25; QUERY PLAN ------------------------------------------------------ Foreign Scan (cost=100.00..101.00 rows=100 width=0) Single Shard Optimized (2 rows)

Jetzt legen wir den Wert rds_aurora.limitless_explain_options fest, damit shard_plans und single_shard_optimization eingeschlossen sind. Wir können die Ausführungspläne von Anweisungen sowohl auf Routern als auch auf Shards anzeigen lassen. Außerdem deaktivieren wir den Parameter enable_seqscan, um zu erzwingen, dass der Indexscan auf Shard-Ebene verwendet wird.

postgres_limitless=> SET rds_aurora.limitless_explain_options = shard_plans, single_shard_optimization; SET postgres_limitless=> SET enable_seqscan = OFF; SET postgres_limitless=> EXPLAIN SELECT * FROM employees WHERE id = 25; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------- Foreign Scan (cost=100.00..101.00 rows=100 width=0) Remote Plans from Shard postgres_s4: Index Scan using employees_ts00287_id_idx on employees_ts00287 employees_fs00003 (cost=0.14..8.16 rows=1 width=15) Index Cond: (id = 25) Single Shard Optimized (5 rows)

Weitere Informationen zum Befehl EXPLAIN finden Sie in der PostgreSQL-Dokumentation unter EXPLAIN.

INSERT

Die meisten INSERT-Befehle werden in Aurora PostgreSQL Limitless Database unterstützt.

PostgreSQL hat keinen expliziten UPSERT-Befehl, unterstützt aber INSERT ... ON CONFLICT-Anweisungen.

INSERT ... ON CONFLICT wird nicht unterstützt, wenn die Konfliktaktion eine Unterabfrage oder eine veränderbare Funktion hat:

-- RANDOM is a mutable function. INSERT INTO sharded_table VALUES (1, 100) ON CONFLICT (id) DO UPDATE SET other_id = RANDOM(); ERROR: Aurora Limitless Tables doesn't support pushdown-unsafe functions with DO UPDATE clauses.

Weitere Informationen zum Befehl INSERT finden Sie in der PostgreSQL-Dokumentation unter INSERT.

UPDATE

Das Aktualisieren des Shard-Schlüssels wird nicht unterstützt. Sie haben beispielsweise eine Sharded-Tabelle namens customers mit dem Shard-Schlüssel customer_id. Die folgenden DML-Anweisungen verursachen Fehler:

postgres_limitless=> UPDATE customers SET customer_id = 11 WHERE customer_id =1; ERROR: Shard key column update is not supported postgres_limitless=> UPDATE customers SET customer_id = 11 WHERE customer_name='abc'; ERROR: Shard key column update is not supported

Um einen Shard-Schlüssel zu aktualisieren, müssen Sie zuerst die Zeile mit dem Shard-Schlüssel löschen (DELETE) und dann eine neue Zeile mit dem aktualisierten Shard-Schlüsselwert einfügen (INSERT).

Weitere Informationen zum Befehl UPDATE finden Sie in der PostgreSQL-Dokumentation unter Aktualisieren von Daten.

VACUUM

Sie können sowohl Sharded- als auch Referenztabellen leeren. Die folgenden VACUUM-Funktionen werden in Aurora PostgreSQL Limitless Database vollständig unterstützt:

  • VACUUM

  • ANALYZE

  • DISABLE_PAGE_SKIPPING

  • FREEZE

  • FULL

  • INDEX_CLEANUP

  • PARALLEL

  • PROCESS_TOAST

  • TRUNCATE

  • VERBOSE

Für VACUUM gelten in Aurora PostgreSQL Limitless Database die folgenden Einschränkungen:

Weitere Informationen zum Befehl VACUUM finden Sie in der PostgreSQL-Dokumentation unter VACUUM. Weitere Informationen zum Leeren von Tabellen in Aurora PostgreSQL Limitless Database finden Sie unter Zurückgewinnen von Speicherplatz durch Bereinigung.