

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
<a name="limitless-reference.DML-limitations"></a>

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.

**Topics**
+ [ANALYZE](#limitless-reference.DML-limitations.ANALYZE)
+ [CLUSTER](#limitless-reference.DML-limitations.CLUSTER)
+ [EXPLAIN](#limitless-reference.DML-limitations.EXPLAIN)
+ [INSERT](#limitless-reference.DML-limitations.INSERT)
+ [UPDATE](#limitless-reference.DML-limitations.UPDATE)
+ [VACUUM](#limitless-reference.DML-limitations.VACUUM)

## ANALYZE
<a name="limitless-reference.DML-limitations.ANALYZE"></a>

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](https://www.postgresql.org/docs/current/sql-analyze.html) 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
<a name="limitless-reference.DML-limitations.CLUSTER"></a>

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](https://www.postgresql.org/docs/current/sql-cluster.html) in der PostgreSQL-Dokumentation.

## EXPLAIN
<a name="limitless-reference.DML-limitations.EXPLAIN"></a>

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](https://www.postgresql.org/docs/current/sql-explain.html).

## INSERT
<a name="limitless-reference.DML-limitations.INSERT"></a>

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](https://www.postgresql.org/docs/current/sql-insert.html).

## UPDATE
<a name="limitless-reference.DML-limitations.UPDATE"></a>

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](https://www.postgresql.org/docs/current/dml-update.html).

## VACUUM
<a name="limitless-reference.DML-limitations.VACUUM"></a>

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](#limitless-reference.DML-limitations.ANALYZE)
+ DISABLE\$1PAGE\$1SKIPPING
+ FREEZE
+ FULL
+ INDEX\$1CLEANUP
+ PARALLEL
+ PROCESS\$1TOAST
+ TRUNCATE
+ VERBOSE

Für `VACUUM` gelten in Aurora PostgreSQL Limitless Database die folgenden Einschränkungen:
+ Die Erweiterung [pg\$1visibility\$1map](https://www.postgresql.org/docs/current/pgvisibility.html) wird nicht unterstützt.
+ Die Suche nach ungenutzten Indizes über die Ansicht [pg\$1stat\$1all\$1indexes](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-ALL-INDEXES-VIEW) wird nicht unterstützt.
+ Konsolidierte Ansichten für [pg\$1stat\$1user\$1indexes](https://www.postgresql.org/docs/current/monitoring-stats.html), [pg\$1class](https://www.postgresql.org/docs/current/catalog-pg-class.html) und [pg\$1stats](https://www.postgresql.org/docs/current/view-pg-stats.html) sind nicht implementiert.

Weitere Informationen zum Befehl `VACUUM` finden Sie in der PostgreSQL-Dokumentation unter [VACUUM](https://www.postgresql.org/docs/current/sql-vacuum.html). Weitere Informationen zum Leeren von Tabellen in Aurora PostgreSQL Limitless Database finden Sie unter [Zurückgewinnen von Speicherplatz durch Bereinigung](limitless-vacuum.md).