DDL-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.

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

In den folgenden Themen werden Einschränkungen beschrieben oder weitere Informationen zu DDL-SQL-Befehlen in Aurora PostgreSQL Limitless Database bereitgestellt.

ALTER TABLE

Der ALTER TABLE Befehl wird generell in Aurora PostgreSQL Limitless Database unterstützt. Weitere Informationen finden Sie unter ALTER TABLE in der PostgreSQL-Dokumentation.

Einschränkungen

ALTER TABLEhat die folgenden Einschränkungen für unterstützte Optionen.

Eine Spalte entfernen
  • In Sharding-Tabellen können Sie keine Spalten entfernen, die Teil des Shard-Schlüssels sind.

  • In Referenztabellen können Sie Primärschlüsselspalten nicht entfernen.

Ändern des Datentyps einer Spalte
  • Der USING Ausdruck wird nicht unterstützt.

  • In Shard-Tabellen können Sie den Typ für Spalten, die Teil des Shard-Schlüssels sind, nicht ändern.

Eine Einschränkung hinzufügen oder entfernen

Einzelheiten darüber, was nicht unterstützt wird, finden Sie unterBeschränkungen.

Den Standardwert einer Spalte ändern

Standardwerte werden unterstützt. Weitere Informationen finden Sie unter Standardwerte.

Nicht unterstützte Optionen

Einige Optionen werden nicht unterstützt, da sie von nicht unterstützten Funktionen wie Triggern abhängen.

Die folgenden Optionen auf Tabellenebene für ALTER TABLE werden nicht unterstützt:

  • ALL IN TABLESPACE

  • ATTACH PARTITION

  • DETACH PARTITION

  • ONLYFlagge

  • RENAME CONSTRAINT

Die folgenden Optionen auf Spaltenebene für ALTER TABLE werden nicht unterstützt:

  • GENERIERT HINZUFÜGEN

  • AUSDRUCK LÖSCHEN [FALLS VORHANDEN]

  • IDENTITÄT LÖSCHEN [FALLS VORHANDEN]

  • RESET

  • RESTART

  • SET

  • KOMPRIMIERUNG EINSTELLEN

  • SET STATISTICS

CREATE DATABASE

In Aurora PostgreSQL Limitless Database werden nur grenzenlose Datenbanken unterstützt.

Während CREATE DATABASE der Ausführung können Datenbanken, die erfolgreich in einem oder mehreren Knoten erstellt wurden, in anderen Knoten fehlschlagen, da es sich bei der Datenbankerstellung um einen nicht transaktionalen Vorgang handelt. In diesem Fall werden die Datenbankobjekte, die erfolgreich erstellt wurden, innerhalb einer bestimmten Zeit automatisch von allen Knoten entfernt, um die Konsistenz in der DB-Shard-Gruppe aufrechtzuerhalten. Während dieser Zeit kann die Neuerstellung einer Datenbank mit demselben Namen zu einem Fehler führen, der darauf hinweist, dass die Datenbank bereits existiert.

Die folgenden Optionen werden unterstützt:

  • Sortierung:

    CREATE DATABASE name WITH [LOCALE = locale] [LC_COLLATE = lc_collate] [LC_CTYPE = lc_ctype] [ICU_LOCALE = icu_locale] [ICU_RULES = icu_rules] [LOCALE_PROVIDER = locale_provider] [COLLATION_VERSION = collation_version];
  • CREATE DATABASE WITH OWNER:

    CREATE DATABASE name WITH OWNER = user_name;

Die folgenden Optionen werden nicht unterstützt:

  • CREATE DATABASE WITH TABLESPACE:

    CREATE DATABASE name WITH TABLESPACE = tablespace_name;
  • CREATE DATABASE WITH TEMPLATE:

    CREATE DATABASE name WITH TEMPLATE = template;

CREATE INDEX

CREATE INDEX CONCURRENTLYwird für Sharded-Tabellen unterstützt:

CREATE INDEX CONCURRENTLY index_name ON table_name(column_name);

CREATE UNIQUE INDEXwird für alle Tabellentypen unterstützt:

CREATE UNIQUE INDEX index_name ON table_name(column_name);

CREATE UNIQUE INDEX CONCURRENTLYwird nicht unterstützt:

CREATE UNIQUE INDEX CONCURRENTLY index_name ON table_name(column_name);

Weitere Informationen finden Sie unter UNIQUE. Allgemeine Informationen zum Erstellen von Indizes finden Sie unter CREATE INDEX in der PostgreSQL-Dokumentation.

Indizes anzeigen

Nicht alle Indizes sind auf Routern sichtbar, wenn Sie \d table_name oder ähnliche Befehle verwenden. Verwenden Sie stattdessen die pg_catalog.pg_indexes Ansicht, um Indizes abzurufen, wie im folgenden Beispiel gezeigt.

SET rds_aurora.limitless_create_table_mode='sharded'; SET rds_aurora.limitless_create_table_shard_key='{"id"}'; CREATE TABLE items (id int PRIMARY KEY, val int); CREATE INDEX items_my_index on items (id, val); postgres_limitless=> SELECT * FROM pg_catalog.pg_indexes WHERE tablename='items'; schemaname | tablename | indexname | tablespace | indexdef ------------+-----------+----------------+------------+------------------------------------------------------------------------ public | items | items_my_index | | CREATE INDEX items_my_index ON ONLY public.items USING btree (id, val) public | items | items_pkey | | CREATE UNIQUE INDEX items_pkey ON ONLY public.items USING btree (id) (2 rows)

CREATE SCHEMA

CREATE SCHEMAmit einem Schemaelement wird nicht unterstützt:

CREATE SCHEMA my_schema CREATE TABLE (column_name INT);

Dadurch wird ein Fehler generiert, der dem folgenden ähnelt:

ERROR: CREATE SCHEMA with schema elements is not supported

CREATE TABLE

Beziehungen in CREATE TABLE Anweisungen werden nicht unterstützt, zum Beispiel:

CREATE TABLE orders (orderid int, customerId int, orderDate date) WITH (autovacuum_enabled = false);

IDENTITYSpalten werden nicht unterstützt, zum Beispiel:

CREATE TABLE orders (orderid INT GENERATED ALWAYS AS IDENTITY);

Aurora PostgreSQL Limitless Database unterstützt bis zu 54 Zeichen für Shard-Tabellennamen.

CREATE TABLE AS

Um eine Tabelle mit zu erstellenCREATE TABLE AS, müssen Sie die Variable verwenden. rds_aurora.limitless_create_table_mode Für Tabellen mit Sharding müssen Sie auch die rds_aurora.limitless_create_table_shard_key Variable verwenden. Weitere Informationen finden Sie unter Unbegrenzte Anzahl von Tabellen mithilfe von Variablen erstellen.

-- Set the variables. SET rds_aurora.limitless_create_table_mode='sharded'; SET rds_aurora.limitless_create_table_shard_key='{"a"}'; CREATE TABLE ctas_table AS SELECT 1 a; -- "source" is the source table whose columns and data types are used to create the new "ctas_table2" table. CREATE TABLE ctas_table2 AS SELECT a,b FROM source;

Sie können sie nicht verwendenCREATE TABLE AS, um Referenztabellen zu erstellen, da sie Primärschlüsseleinschränkungen erfordern. CREATE TABLE ASgibt Primärschlüssel nicht an neue Tabellen weiter.

Allgemeine Informationen finden Sie unter CREATE TABLE AS in der PostgreSQL-Dokumentation.

DROP DATABASE

Sie können Datenbanken löschen, die Sie erstellt haben.

Der DROP DATABASE Befehl wird asynchron im Hintergrund ausgeführt. Während der Ausführung erhalten Sie eine Fehlermeldung, wenn Sie versuchen, eine neue Datenbank mit demselben Namen zu erstellen.

SELECT INTO

SELECT INTOist funktionell ähnlich CREATE TABLE AS wie. Sie müssen die rds_aurora.limitless_create_table_mode Variable verwenden. Für Tabellen mit Sharding müssen Sie auch die rds_aurora.limitless_create_table_shard_key Variable verwenden. Weitere Informationen finden Sie unter Unbegrenzte Anzahl von Tabellen mithilfe von Variablen erstellen.

-- Set the variables. SET rds_aurora.limitless_create_table_mode='sharded'; SET rds_aurora.limitless_create_table_shard_key='{"a"}'; -- "source" is the source table whose columns and data types are used to create the new "destination" table. SELECT * INTO destination FROM source;

Derzeit wird der SELECT INTO Vorgang über den Router ausgeführt, nicht direkt über die Shards. Daher kann die Leistung langsam sein.

Allgemeine Informationen finden Sie unter SELECT INTO in der PostgreSQL-Dokumentation.

Beschränkungen

Die folgenden Einschränkungen gelten für Einschränkungen in Aurora PostgreSQL Limitless Database.

CHECK

Einfache Einschränkungen, die Vergleichsoperatoren mit Literalen beinhalten, werden unterstützt. Komplexere Ausdrücke und Einschränkungen, die Funktionsvalidierungen erfordern, werden nicht unterstützt, wie in den folgenden Beispielen gezeigt.

CREATE TABLE my_table ( id INT CHECK (id > 0) -- supported , val INT CHECK (val > 0 AND val < 1000) -- supported , tag TEXT CHECK (length(tag) > 0) -- not supported: throws "Expression inside CHECK constraint is not supported" , op_date TIMESTAMP WITH TIME ZONE CHECK (op_date <= now()) -- not supported: throws "Expression inside CHECK constraint is not supported" );

Sie können Einschränkungen explizite Namen geben, wie im folgenden Beispiel gezeigt.

CREATE TABLE my_table ( id INT CONSTRAINT positive_id CHECK (id > 0) , val INT CONSTRAINT val_in_range CHECK (val > 0 AND val < 1000) );

Sie können die Einschränkungssyntax auf Tabellenebene mit der CHECK Einschränkung verwenden, wie im folgenden Beispiel gezeigt.

CREATE TABLE my_table ( id INT CONSTRAINT positive_id CHECK (id > 0) , min_val INT CONSTRAINT min_val_in_range CHECK (min_val > 0 AND min_val < 1000) , max_val INT , CONSTRAINT max_val_in_range CHECK (max_val > 0 AND max_val < 1000 AND max_val > min_val) );
EXCLUDE

Ausschlussbeschränkungen werden in Aurora PostgreSQL Limitless Database nicht unterstützt.

FOREIGN KEY

Weitere Informationen finden Sie unter Fremdschlüssel.

NICHT NULL

NOT NULLEinschränkungen werden ohne Einschränkungen unterstützt.

PRIMARY KEY

Der Primärschlüssel impliziert eindeutige Einschränkungen, weshalb dieselben Einschränkungen für eindeutige Einschränkungen auch für den Primärschlüssel gelten. Das bedeutet:

  • Wenn eine Tabelle in eine Sharded-Tabelle umgewandelt wird, muss der Shard-Schlüssel eine Teilmenge des Primärschlüssels sein. Das heißt, der Primärschlüssel enthält alle Spalten des Shard-Schlüssels.

  • Wenn eine Tabelle in eine Referenztabelle umgewandelt wird, muss sie einen Primärschlüssel haben.

Die folgenden Beispiele veranschaulichen die Verwendung von Primärschlüsseln.

-- Create a standard table. CREATE TABLE public.my_table ( item_id INT , location_code INT , val INT , comment text ); -- Change the table to a sharded table using the 'item_id' and 'location_code' columns as shard keys. CALL rds_aurora.limitless_alter_table_type_sharded('public.my_table', ARRAY['item_id', 'location_code']);

Es wird versucht, einen Primärschlüssel hinzuzufügen, der keinen Shard-Schlüssel enthält:

-- Add column 'item_id' as the primary key. -- Invalid because the primary key doesnt include all columns from the shard key: -- 'location_code' is part of the shard key but not part of the primary key ALTER TABLE public.my_table ADD PRIMARY KEY (item_id); -- ERROR -- add column "val" as primary key -- Invalid because primary key does not include all columns from shard key: -- item_id and location_code iare part of shard key but not part of the primary key ALTER TABLE public.my_table ADD PRIMARY KEY (item_id); -- ERROR

Es wird versucht, einen Primärschlüssel hinzuzufügen, der einen Shard-Schlüssel enthält:

-- Add the 'item_id' and 'location_code' columns as the primary key. -- Valid because the primary key contains the shard key. ALTER TABLE public.my_table ADD PRIMARY KEY (item_id, location_code); -- OK -- Add the 'item_id', 'location_code', and 'val' columns as the primary key. -- Valid because the primary key contains the shard key. ALTER TABLE public.my_table ADD PRIMARY KEY (item_id, location_code, val); -- OK

Ändern Sie eine Standardtabelle in eine Referenztabelle.

-- Create a standard table. CREATE TABLE zipcodes (zipcode INT PRIMARY KEY, details VARCHAR); -- Convert the table to a reference table. CALL rds_aurora.limitless_alter_table_type_reference('public.zipcode');

Weitere Informationen zum Erstellen von Sharded- und Referenztabellen finden Sie unterAurora Postgre SQL Limitless-Datenbanktabellen erstellen.

UNIQUE

In Shard-Tabellen muss der eindeutige Schlüssel den Shard-Schlüssel enthalten, das heißt, der Shard-Schlüssel muss eine Teilmenge des eindeutigen Schlüssels sein. Dies wird überprüft, wenn der Tabellentyp auf Sharded geändert wird. In Referenztabellen gibt es keine Einschränkung.

CREATE TABLE customer ( customer_id INT NOT NULL , zipcode INT , email TEXT UNIQUE );

UNIQUEEinschränkungen auf Tabellenebene werden unterstützt, wie im folgenden Beispiel gezeigt.

CREATE TABLE customer ( customer_id INT NOT NULL , zipcode INT , email TEXT , CONSTRAINT zipcode_and_email UNIQUE (zipcode, email) );

Das folgende Beispiel zeigt die gemeinsame Verwendung eines Primärschlüssels und eines eindeutigen Schlüssels. Beide Schlüssel müssen den Shard-Schlüssel enthalten.

SET rds_aurora.limitless_create_table_mode='sharded'; SET rds_aurora.limitless_create_table_shard_key='{"p_id"}'; CREATE TABLE t1 ( p_id BIGINT NOT NULL, c_id BIGINT NOT NULL, PRIMARY KEY (p_id), UNIQUE (p_id, c_id) );

Weitere Informationen finden Sie unter Einschränkungen in der PostgreSQL-Dokumentation.

Standardwerte

Aurora PostgreSQL Limitless Database unterstützt Ausdrücke in Standardwerten.

Das folgende Beispiel zeigt die Verwendung von Standardwerten.

CREATE TABLE t ( a INT DEFAULT 5, b TEXT DEFAULT 'NAN', c NUMERIC ); CALL rds_aurora.limitless_alter_table_type_sharded('t', ARRAY['a']); INSERT INTO t DEFAULT VALUES; SELECT * FROM t; a | b | c ---+-----+--- 5 | NAN | (1 row)

Ausdrücke werden unterstützt, wie im folgenden Beispiel gezeigt.

CREATE TABLE t1 (a NUMERIC DEFAULT random());

Im folgenden Beispiel wird eine neue Spalte hinzugefügt, die einen Standardwert hat NOT NULL und diesen hat.

ALTER TABLE t ADD COLUMN d BOOLEAN NOT NULL DEFAULT FALSE; SELECT * FROM t; a | b | c | d ---+-----+---+--- 5 | NAN | | f (1 row)

Im folgenden Beispiel wird eine vorhandene Spalte mit einem Standardwert geändert.

ALTER TABLE t ALTER COLUMN c SET DEFAULT 0.0; INSERT INTO t DEFAULT VALUES; SELECT * FROM t; a | b | c | d ---+-----+-----+----- 5 | NAN | | f 5 | NAN | 0.0 | f (2 rows)

Im folgenden Beispiel wird ein Standardwert gelöscht.

ALTER TABLE t ALTER COLUMN a DROP DEFAULT; INSERT INTO t DEFAULT VALUES; SELECT * FROM t; a | b | c | d ---+-----+-----+----- 5 | NAN | | f 5 | NAN | 0.0 | f | NAN | 0.0 | f (3 rows)

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

Erweiterungen

Die folgenden PostgreSQL-Erweiterungen werden in Aurora PostgreSQL Limitless Database unterstützt:

  • aurora_limitless_fdw— Diese Erweiterung ist vorinstalliert. Du kannst es nicht fallen lassen.

  • aws_s3— Diese Erweiterung funktioniert in Aurora PostgreSQL Limitless Database ähnlich wie in Aurora PostgreSQL.

    Sie können Daten aus einem Amazon S3 S3-Bucket in einen Aurora PostgreSQL Limitless Database DB-Cluster importieren oder Daten aus einem Aurora PostgreSQL Limitless Database DB-Cluster in einen Amazon S3 S3-Bucket exportieren. Weitere Informationen erhalten Sie unter Importieren von Amazon S3 in einen Aurora-PostgreSQL-DB-Cluster und Exportieren von Daten aus einem/einer Aurora PostgreSQL-DB-Cluster zu Amazon S3.

  • btree_gin

  • citext

  • ip4r

  • pg_buffercache— Diese Erweiterung verhält sich in Aurora PostgreSQL Limitless Database anders als in der Community PostgreSQL. Weitere Informationen finden Sie unter pg_buffercache-Unterschiede in der Aurora PostgreSQL Limitless-Datenbank.

  • pg_stat_statements

  • pg_trgm

  • pgcrypto

  • pgstattuple— Diese Erweiterung verhält sich in Aurora PostgreSQL Limitless Database anders als in der Community PostgreSQL. Weitere Informationen finden Sie unter pgstattuple Unterschiede in der Aurora PostgreSQL Limitless Database.

  • pgvector

  • plpgsql— Diese Erweiterung ist vorinstalliert, aber Sie können sie löschen.

  • PostGIS— Lange Transaktionen und Tabellenverwaltungsfunktionen werden nicht unterstützt. Das Ändern der Raumbezugstabelle wird nicht unterstützt.

  • unaccent

  • uuid

Die meisten PostgreSQL-Erweiterungen werden derzeit in Aurora PostgreSQL Limitless Database nicht unterstützt. Sie können jedoch weiterhin die Konfigurationseinstellung shared_preload_libraries (SPL) verwenden, um Erweiterungen in den primären Aurora PostgreSQL-DB-Cluster zu laden. Sie werden auch in die Aurora PostgreSQL Limitless Database geladen, funktionieren aber möglicherweise nicht richtig.

Sie können beispielsweise die pg_hint_plan Erweiterung laden, aber das Laden garantiert nicht, dass die in den Abfragekommentaren übergebenen Hinweise verwendet werden.

Anmerkung

Sie können die pg_available_extension_versions Funktionen pg_available_extensions und verwenden, um die Erweiterungen zu finden, die in Aurora PostgreSQL Limitless Database unterstützt werden.

Folgendes wird für DDLs Erweiterungen unterstützt:

CREATE EXTENSION

Sie können Erweiterungen wie in PostgreSQL erstellen.

CREATE EXTENSION [ IF NOT EXISTS ] extension_name [ WITH ] [ SCHEMA schema_name ] [ VERSION version ] [ CASCADE ]

Weitere Informationen finden Sie unter CREATE EXTENSION in der PostgreSQL-Dokumentation.

ALTER EXTENSION

Folgendes wird unterstützt: DDLs

ALTER EXTENSION name UPDATE [ TO new_version ] ALTER EXTENSION name SET SCHEMA new_schema

Weitere Informationen finden Sie unter ALTER EXTENSION in der PostgreSQL-Dokumentation.

DROP EXTENSION

Sie können Erweiterungen löschen, wie in PostgreSQL.

DROP EXTENSION [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

Weitere Informationen finden Sie unter DROP EXTENSION in der PostgreSQL-Dokumentation.

Folgendes wird für DDLs Erweiterungen nicht unterstützt:

ALTER EXTENSION

Sie können keine Mitgliedsobjekte zu Erweiterungen hinzufügen oder löschen.

ALTER EXTENSION name ADD member_object ALTER EXTENSION name DROP member_object

pg_buffercache-Unterschiede in der Aurora PostgreSQL Limitless-Datenbank

Wenn Sie in Aurora PostgreSQL Limitless Database die Erweiterung pg_buffercache installieren und die pg_buffercache Ansicht verwenden, erhalten Sie pufferbezogene Informationen nur von dem Knoten, mit dem Sie gerade verbunden sind: dem Router. In ähnlicher Weise stellt die Verwendung der Funktion oder nur Informationen vom verbundenen Knoten bereitpg_buffercache_summary. pg_buffercache_usage_counts

Sie können über zahlreiche Knoten verfügen und müssen möglicherweise von jedem Knoten aus auf Pufferinformationen zugreifen, um Probleme effektiv zu diagnostizieren. Daher bietet Limitless Database die folgenden Funktionen:

  • rds_aurora.limitless_pg_buffercache(subcluster_id)

  • rds_aurora.limitless_pg_buffercache_summary(subcluster_id)

  • rds_aurora.limitless_pg_buffercache_usage_counts(subcluster_id)

Durch Eingabe der Subcluster-ID eines beliebigen Knotens, unabhängig davon, ob es sich um einen Router oder einen Shard handelt, können Sie einfach auf die für diesen Knoten spezifischen Pufferinformationen zugreifen. Diese Funktionen sind direkt verfügbar, wenn Sie die pg_buffercache Erweiterung in der Limitless-Datenbank installieren.

Anmerkung

Aurora PostgreSQL Limitless Database unterstützt diese Funktionen für Version 1.4 und höher der Erweiterung. pg_buffercache

Die in der limitless_pg_buffercache Ansicht angezeigten Spalten unterscheiden sich geringfügig von denen in der Ansicht: pg_buffercache

  • bufferid— Bleibt unverändert vonpg_buffercache.

  • relname— Anstatt die Dateiknotennummer wie in anzuzeigen, wird die zugehörige Datei limitless_pg_buffercache angezeigtpg_buffercache, relname sofern sie in der aktuellen Datenbank oder in gemeinsam genutzten Systemkatalogen verfügbar ist, andernfallsNULL.

  • parent_relname— Diese neue Spalte, die in nicht vorhanden istpg_buffercache, zeigt das übergeordnete Element an, relname wenn der Wert in der relname Spalte eine partitionierte Tabelle darstellt (im Fall von Tabellen mit Sharding). Andernfalls wird sie angezeigt. NULL

  • spcname— Anstatt den Tablespace-Objektbezeichner (OID) wie in anzuzeigenpg_buffercache, limitless_pg_buffercache wird der Tablespace-Name angezeigt.

  • datname— Anstatt die Datenbank-OID wie in anzuzeigenpg_buffercache, limitless_pg_buffercache wird der Datenbankname angezeigt.

  • relforknumber— Bleibt unverändert vonpg_buffercache.

  • relblocknumber— Bleibt unverändert vonpg_buffercache.

  • isdirty— Bleibt unverändert vonpg_buffercache.

  • usagecount— Bleibt unverändert vonpg_buffercache.

  • pinning_backends— Bleibt unverändert vonpg_buffercache.

Die Spalten in den limitless_pg_buffercache_usage_counts Ansichten limitless_pg_buffercache_summary und die Ansichten sind dieselben wie in der regulären Ansicht pg_buffercache_summary bzw. pg_buffercache_usage_counts in der Ansicht.

Mithilfe dieser Funktionen können Sie auf detaillierte Informationen zum Puffercache aller Knoten in Ihrer Limitless Database-Umgebung zugreifen und so eine effektivere Diagnose und Verwaltung Ihrer Datenbanksysteme ermöglichen.

pgstattuple Unterschiede in der Aurora PostgreSQL Limitless Database

In Aurora PostgreSQL unterstützt die Erweiterung pgstattuple derzeit keine Fremdtabellen, partitionierten Tabellen oder partitionierten Indizes. In Aurora PostgreSQL Limitless Database gehören jedoch häufig von Benutzern erstellte Objekte zu diesen nicht unterstützten Typen. Zwar gibt es reguläre Tabellen und Indizes (z. B. Katalogtabellen und ihre Indizes), aber die meisten Objekte befinden sich auf fremden Knoten, was sie zu Fremdobjekten für den Router macht.

Wir wissen, wie wichtig diese Erweiterung für das Abrufen von Statistiken auf Tupelebene ist, was für Aufgaben wie das Entfernen von Blähungen und das Sammeln von Diagnoseinformationen von entscheidender Bedeutung ist. Daher bietet Aurora PostgreSQL Limitless Database Unterstützung für die pgstattuple Erweiterung in unbegrenzten Datenbanken.

Aurora PostgreSQL Limitless Database enthält die folgenden Funktionen im Schema: rds_aurora

Statistikfunktionen auf Tupelebene

rds_aurora.limitless_pgstattuple(relation_name)

  • Zweck: Extrahieren Sie Statistiken auf Tupelebene für Standardtabellen und deren Indizes

  • Eingabe: relation_name (Text) — Der Name der Beziehung

  • Ausgabe: Spalten, die mit denen übereinstimmen, die von der pgstattuple Funktion in Aurora PostgreSQL zurückgegeben werden

rds_aurora.limitless_pgstattuple(relation_name, subcluster_id)

  • Zweck: Extrahieren Sie Statistiken auf Tupelebene für Referenztabellen, Shard-Tabellen, Katalogtabellen und deren Indizes

  • Eingabe:

    • relation_name(Text) — Der Name der Relation

    • subcluster_id(text) — Die Subcluster-ID des Knotens, auf den die Statistiken extrahiert werden sollen

  • Ausgabe:

    • Bei Referenz- und Katalogtabellen (einschließlich ihrer Indizes) stimmen die Spalten mit denen in Aurora PostgreSQL überein.

    • Bei Shard-Tabellen stellen die Statistiken nur die Partition der Sharde-Tabelle dar, die sich auf dem angegebenen Subcluster befindet.

Funktionen für Indexstatistiken

rds_aurora.limitless_pgstatindex(relation_name)

  • Zweck: Extrahieren Sie Statistiken für B-Baum-Indizes in Standardtabellen

  • Eingabe: relation_name (Text) — Der Name des B-Baum-Indexes

  • Ausgabe: Alle Spalten außer root_block_no werden zurückgegeben. Die zurückgegebenen Spalten stimmen mit der pgstatindex Funktion in Aurora PostgreSQL überein.

rds_aurora.limitless_pgstatindex(relation_name, subcluster_id)

  • Zweck: Extrahieren Sie Statistiken für B-Baum-Indizes in Referenztabellen, Shard-Tabellen und Katalogtabellen.

  • Eingabe:

    • relation_name(Text) — Der Name des B-Tree-Indexes

    • subcluster_id(Text) — Die Subcluster-ID des Knotens, auf den die Statistiken extrahiert werden sollen

  • Ausgabe:

    • Bei Referenz- und Katalogtabellenindizes werden alle Spalten (außerroot_block_no) zurückgegeben. Die zurückgegebenen Spalten stimmen mit Aurora PostgreSQL überein.

    • Bei Tabellen mit Sharding stellen die Statistiken nur die Partition des Sharded-Tabellenindexes dar, der sich auf dem angegebenen Subcluster befindet. Die tree_level Spalte zeigt den Durchschnitt aller Tabellenbereiche auf dem angeforderten Subcluster.

rds_aurora.limitless_pgstatginindex(relation_name)

  • Zweck: Extrahieren Sie Statistiken für generalisierte invertierte Indizes () GINs in Standardtabellen

  • Eingabe: relation_name (Text) — Der Name des GIN

  • Ausgabe: Spalten, die mit denen übereinstimmen, die von der pgstatginindex Funktion in Aurora PostgreSQL zurückgegeben werden

rds_aurora.limitless_pgstatginindex(relation_name, subcluster_id)

  • Zweck: Extrahieren Sie Statistiken für GIN-Indizes in Referenztabellen, Shard-Tabellen und Katalogtabellen.

  • Eingabe:

    • relation_name(Text) — Der Name des Indexes

    • subcluster_id(text) — Die Subcluster-ID des Knotens, auf den die Statistiken extrahiert werden sollen

  • Ausgabe:

    • Bei GIN-Indizes für Referenz- und Katalogtabellen stimmen die Spalten mit denen in Aurora PostgreSQL überein.

    • Bei Tabellen mit Sharding stellen die Statistiken nur die Partition des Sharded-Tabellenindexes dar, der sich auf dem angegebenen Subcluster befindet.

rds_aurora.limitless_pgstathashindex(relation_name)

  • Zweck: Extrahieren Sie Statistiken für Hash-Indizes in Standardtabellen

  • Eingabe: relation_name (Text) — Der Name des Hash-Indexes

  • Ausgabe: Spalten, die mit denen übereinstimmen, die von der pgstathashindex Funktion in Aurora PostgreSQL zurückgegeben werden

rds_aurora.limitless_pgstathashindex(relation_name, subcluster_id)

  • Zweck: Extrahieren Sie Statistiken für Hash-Indizes in Referenztabellen, Shard-Tabellen und Katalogtabellen.

  • Eingabe:

    • relation_name(Text) — Der Name des Indexes

    • subcluster_id(text) — Die Subcluster-ID des Knotens, auf den die Statistiken extrahiert werden sollen

  • Ausgabe:

    • Für Referenz- und Katalogtabellen-Hash-Indizes stimmen die Spalten mit Aurora PostgreSQL überein.

    • Bei Shard-Tabellen stellen die Statistiken nur die Partition des Sharded-Tabellenindexes dar, der sich auf dem angegebenen Subcluster befindet.

Funktionen zur Seitenzählung

rds_aurora.limitless_pg_relpages(relation_name)

  • Zweck: Extrahieren Sie die Seitenanzahl für Standardtabellen und deren Indizes

  • Eingabe: relation_name (Text) — Der Name der Relation

  • Ausgabe: Seitenanzahl der angegebenen Beziehung

rds_aurora.limitless_pg_relpages(relation_name, subcluster_id)

  • Zweck: Extrahieren Sie die Seitenanzahl für Referenztabellen, Shard-Tabellen und Katalogtabellen (einschließlich ihrer Indizes)

  • Eingabe:

    • relation_name(Text) — Der Name der Relation

    • subcluster_id(text) — Die Subcluster-ID des Knotens, auf den die Seitenanzahl extrahiert werden soll

  • Ausgabe: Bei Tabellen mit Sharding entspricht die Seitenanzahl der Summe der Seiten in allen Tabellensegmenten im angegebenen Subcluster.

Ungefähre Statistikfunktionen auf Tupelebene

rds_aurora.limitless_pgstattuple_approx(relation_name)

  • Zweck: Extrahieren Sie ungefähre Statistiken auf Tupelebene für Standardtabellen und deren Indizes

  • Eingabe: relation_name (Text) — Der Name der Beziehung

  • Ausgabe: Spalten, die mit denen übereinstimmen, die von der Funktion pgstattuple_approx in Aurora PostgreSQL zurückgegeben werden

rds_aurora.limitless_pgstattuple_approx(relation_name, subcluster_id)

  • Zweck: Extrahieren Sie ungefähre Statistiken auf Tupelebene für Referenztabellen, Shard-Tabellen und Katalogtabellen (einschließlich ihrer Indizes)

  • Eingabe:

    • relation_name(Text) — Der Name der Beziehung

    • subcluster_id(text) — Die Subcluster-ID des Knotens, auf den die Statistiken extrahiert werden sollen

  • Ausgabe:

    • Bei Referenz- und Katalogtabellen (einschließlich ihrer Indizes) stimmen die Spalten mit denen in Aurora PostgreSQL überein.

    • Bei Shard-Tabellen stellen die Statistiken nur die Partition der Sharde-Tabelle dar, die sich auf dem angegebenen Subcluster befindet.

Anmerkung

Derzeit unterstützt Aurora PostgreSQL Limitless Database die pgstattuple Erweiterung für materialisierte Ansichten, TOAST-Tabellen oder temporäre Tabellen nicht.

In Aurora PostgreSQL Limitless Database müssen Sie die Eingabe als Text bereitstellen, obwohl Aurora PostgreSQL auch andere Formate unterstützt.

Fremdschlüssel

Einschränkungen für Fremdschlüssel (FOREIGN KEY) werden mit einigen Einschränkungen unterstützt:

  • CREATE TABLEwith FOREIGN KEY wird nur für Standardtabellen unterstützt. Um eine Sharded- oder Referenztabelle mit zu erstellenFOREIGN KEY, erstellen Sie zunächst die Tabelle ohne Fremdschlüssel-Integritätsregel. Ändern Sie sie dann mit der folgenden Anweisung:

    ALTER TABLE ADD CONSTRAINT;
  • Das Konvertieren einer Standardtabelle in eine Sharded- oder Referenztabelle wird nicht unterstützt, wenn die Tabelle eine Fremdschlüsseleinschränkung hat. Löschen Sie die Einschränkung und fügen Sie sie nach der Konvertierung hinzu.

  • Die folgenden Einschränkungen gelten für Tabellentypen für Fremdschlüsseleinschränkungen:

    • Eine Standardtabelle kann eine Fremdschlüsseleinschränkung für eine andere Standardtabelle haben.

    • Eine Shard-Tabelle kann eine Fremdschlüsseleinschränkung haben, wenn die übergeordneten und untergeordneten Tabellen zusammengelegt sind und der Fremdschlüssel eine Obermenge des Shard-Schlüssels ist.

    • Für eine Sharding-Tabelle kann eine Fremdschlüsseleinschränkung für eine Referenztabelle gelten.

    • Eine Referenztabelle kann eine Fremdschlüsseleinschränkung für eine andere Referenztabelle haben.

Fremdschlüsseloptionen

Fremdschlüssel werden in Aurora PostgreSQL Limitless Database für einige DDL-Optionen unterstützt. In der folgenden Tabelle sind Optionen aufgeführt, die zwischen Aurora PostgreSQL Limitless Database-Tabellen unterstützt und nicht unterstützt werden.

DDL-Option Verweis auf Referenz Von Sharded zu Sharded (zusammengelegt) Sharded als Referenz Von Standard zu Standard

DEFERRABLE

Ja Ja Ja Ja

INITIALLY DEFERRED

Ja Ja Ja Ja

INITIALLY IMMEDIATE

Ja Ja Ja Ja

MATCH FULL

Ja Ja Ja Ja

MATCH PARTIAL

Nein Nein Nein Nein

MATCH SIMPLE

Ja Ja Ja Ja

NOT DEFERRABLE

Ja Ja Ja Ja

NOT VALID

Ja Nein Nein Ja

ON DELETE CASCADE

Ja Ja Ja Ja

ON DELETE NO ACTION

Ja Ja Ja Ja

ON DELETE RESTRICT

Ja Ja Ja Ja

ON DELETE SET DEFAULT

Nein Nein Nein Nein

ON DELETE SET NULL

Ja Nein Nein Ja

ON UPDATE CASCADE

Nein Nein Nein Ja

ON UPDATE NO ACTION

Ja Ja Ja Ja

ON UPDATE RESTRICT

Ja Ja Ja Ja

ON UPDATE SET DEFAULT

Nein Nein Nein Nein

ON UPDATE SET NULL

Ja Nein Nein Ja

Beispiele

  • Von Standard zu Standard:

    set rds_aurora.limitless_create_table_mode='standard'; CREATE TABLE products( product_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products (product_no), quantity integer ); SELECT constraint_name, table_name, constraint_type FROM information_schema.table_constraints WHERE constraint_type='FOREIGN KEY'; constraint_name | table_name | constraint_type -------------------------+-------------+----------------- orders_product_no_fkey | orders | FOREIGN KEY (1 row)
  • Von Sharded zu Sharded (zusammengelegt):

    set rds_aurora.limitless_create_table_mode='sharded'; set rds_aurora.limitless_create_table_shard_key='{"product_no"}'; CREATE TABLE products( product_no integer PRIMARY KEY, name text, price numeric ); set rds_aurora.limitless_create_table_shard_key='{"order_id"}'; set rds_aurora.limitless_create_table_collocate_with='products'; CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer, quantity integer ); ALTER TABLE orders ADD CONSTRAINT order_product_fk FOREIGN KEY (product_no) REFERENCES products (product_no);
  • Sharded als Referenz:

    set rds_aurora.limitless_create_table_mode='reference'; CREATE TABLE products( product_no integer PRIMARY KEY, name text, price numeric ); set rds_aurora.limitless_create_table_mode='sharded'; set rds_aurora.limitless_create_table_shard_key='{"order_id"}'; CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer, quantity integer ); ALTER TABLE orders ADD CONSTRAINT order_product_fk FOREIGN KEY (product_no) REFERENCES products (product_no);
  • Verweis auf Referenz:

    set rds_aurora.limitless_create_table_mode='reference'; CREATE TABLE products( product_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer, quantity integer ); ALTER TABLE orders ADD CONSTRAINT order_product_fk FOREIGN KEY (product_no) REFERENCES products (product_no);

Funktionen

Funktionen werden in Aurora PostgreSQL Limitless Database unterstützt.

Folgendes wird für DDLs Funktionen unterstützt:

CREATE FUNCTION

Sie können Funktionen wie in Aurora PostgreSQL erstellen, mit der Ausnahme, dass Sie ihre Volatilität ändern und sie gleichzeitig ersetzen.

Weitere Informationen finden Sie im Abschnitt CREATE FUNCTION der PostgreSQL-Dokumentation.

ALTER FUNCTION

Sie können Funktionen wie in Aurora PostgreSQL ändern, mit der Ausnahme, dass sie ihre Volatilität ändern.

Weitere Informationen finden Sie unter ALTER FUNCTION in der PostgreSQL-Dokumentation.

DROP FUNCTION

Sie können Funktionen löschen, wie in Aurora PostgreSQL.

DROP FUNCTION [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...] [ CASCADE | RESTRICT ]

Weitere Informationen finden Sie unter DROP FUNCTION in der PostgreSQL-Dokumentation.

Verteilung der Funktionen

Wenn alle Anweisungen einer Funktion auf einen einzelnen Shard ausgerichtet sind, ist es von Vorteil, die gesamte Funktion auf den Ziel-Shard zu übertragen. Dann wird das Ergebnis zurück an den Router weitergegeben, anstatt die Funktion am Router selbst zu enträtseln. Die Pushdown-Funktion für Funktionen und gespeicherte Prozeduren ist für Kunden nützlich, die ihre Funktion oder gespeicherte Prozedur näher an der Datenquelle, also dem Shard, ausführen möchten.

Um eine Funktion zu verteilen, müssen Sie zuerst die Funktion erstellen und dann die rds_aurora.limitless_distribute_function Prozedur aufrufen, um sie zu verteilen. Diese Funktion verwendet die folgende Syntax:

SELECT rds_aurora.limitless_distribute_function('function_prototype', ARRAY['shard_key'], 'collocating_table');

Die Funktion verwendet die folgenden Parameter:

  • function_prototype— Die Funktion, die verteilt werden soll. Erwähnen Sie nur die Eingabeargumente und keines der Ausgabeargumente.

    Wenn eines der Argumente als OUT Parameter definiert ist, nehmen Sie seinen Typ nicht in die Argumente von auffunction_prototype.

  • ARRAY['shard_key']— Die Liste der Funktionsargumente, die als Shard-Schlüssel für die Funktion identifiziert wurden.

  • collocating_table— Die Sharde-Tabelle, die den Datenbereich auf dem Ziel-Shard enthält.

Um den Shard zu identifizieren, auf dem diese Funktion zur Ausführung heruntergefahren werden soll, nimmt das System das ARRAY['shard_key'] Argument, hasht es und findet den Shard, der den Bereich hostet, der collocating_table diesen Hashwert enthält.

Einschränkungen

Wenn Sie eine Funktion oder Prozedur verteilen, befasst sie sich nur mit Daten, die durch den Shard-Schlüsselbereich in diesem Shard begrenzt sind. In Fällen, in denen die Funktion oder Prozedur versucht, auf Daten von einem anderen Shard zuzugreifen, sind die Ergebnisse, die von der verteilten Funktion oder Prozedur zurückgegeben werden, anders als die, die nicht verteilt wurde.

Sie erstellen beispielsweise eine Funktion, die Abfragen enthält, die mehrere Shards berühren, rufen dann aber die rds_aurora.limitless_distribute_function Prozedur auf, um sie zu verteilen. Wenn Sie diese Funktion aufrufen, indem Sie Argumente für einen Shard-Schlüssel angeben, ist es wahrscheinlich, dass die Ergebnisse ihrer Ausführung durch die in diesem Shard vorhandenen Werte begrenzt werden. Diese Ergebnisse unterscheiden sich von denen, die ohne Verteilung der Funktion erzeugt wurden.

Beispiele

Stellen Sie sich die folgende Funktion vorfunc, bei der wir die Sharde-Tabelle customers mit dem Shard-Schlüssel haben. customer_id

postgres_limitless=> CREATE OR REPLACE FUNCTION func(c_id integer, sc integer) RETURNS int language SQL volatile AS $$ UPDATE customers SET score = sc WHERE customer_id = c_id RETURNING score; $$;

Jetzt verteilen wir diese Funktion:

SELECT rds_aurora.limitless_distribute_function('func(integer, integer)', ARRAY['c_id'], 'customers');

Im Folgenden finden Sie Beispiele für Abfragepläne.

EXPLAIN(costs false, verbose true) SELECT func(27+1,10); QUERY PLAN -------------------------------------------------- Foreign Scan Output: (func((27 + 1), 10)) Remote SQL: SELECT func((27 + 1), 10) AS func Single Shard Optimized (4 rows)
EXPLAIN(costs false, verbose true) SELECT * FROM customers,func(customer_id, score) WHERE customer_id=10 AND score=27; QUERY PLAN --------------------------------------------------------------------- Foreign Scan Output: customer_id, name, score, func Remote SQL: SELECT customers.customer_id, customers.name, customers.score, func.func FROM public.customers, LATERAL func(customers.customer_id, customers.score) func(func) WHERE ((customers.customer_id = 10) AND (customers.score = 27)) Single Shard Optimized (10 rows)

Das folgende Beispiel zeigt eine Prozedur mit IN und OUT Parametern als Argumenten.

CREATE OR REPLACE FUNCTION get_data(OUT id INTEGER, IN arg_id INT) AS $$ BEGIN SELECT customer_id, INTO id FROM customer WHERE customer_id = arg_id; END; $$ LANGUAGE plpgsql;

Im folgenden Beispiel wird die Prozedur ausschließlich mithilfe von IN Parametern verteilt.

EXPLAIN(costs false, verbose true) SELECT * FROM get_data(1); QUERY PLAN ----------------------------------- Foreign Scan Output: id Remote SQL: SELECT customer_id FROM get_data(1) get_data(id) Single Shard Optimized (6 rows)

Funktion: Volatilität

Sie können feststellen, ob eine Funktion unveränderlich, stabil oder volatil ist, indem Sie den provolatile Wert in der Ansicht pg_proc überprüfen. Der provolatile Wert gibt an, ob das Ergebnis der Funktion nur von ihren Eingabeargumenten abhängt oder von externen Faktoren beeinflusst wird.

Der Wert ist einer der folgenden:

  • i— Unveränderliche Funktionen, die immer dasselbe Ergebnis für dieselben Eingaben liefern

  • s— Stabile Funktionen, deren Ergebnisse (für feste Eingaben) sich innerhalb eines Scans nicht ändern

  • v— Flüchtige Funktionen, deren Ergebnisse sich jederzeit ändern können. Wird auch v für Funktionen mit Nebenwirkungen verwendet, sodass deren Aufrufe nicht wegoptimiert werden können.

Die folgenden Beispiele zeigen flüchtige Funktionen.

SELECT proname, provolatile FROM pg_proc WHERE proname='pg_sleep'; proname | provolatile ----------+------------- pg_sleep | v (1 row) SELECT proname, provolatile FROM pg_proc WHERE proname='uuid_generate_v4'; proname | provolatile ------------------+------------- uuid_generate_v4 | v (1 row) SELECT proname, provolatile FROM pg_proc WHERE proname='nextval'; proname | provolatile ---------+------------- nextval | v (1 row)

Das Ändern der Volatilität einer vorhandenen Funktion wird in Aurora PostgreSQL Limitless Database nicht unterstützt. Dies gilt sowohl für CREATE OR REPLACE FUNCTION Befehle als ALTER FUNCTION auch, wie in den folgenden Beispielen gezeigt.

-- Create an immutable function CREATE FUNCTION immutable_func1(name text) RETURNS text language plpgsql AS $$ BEGIN RETURN name; END; $$IMMUTABLE; -- Altering the volatility throws an error ALTER FUNCTION immutable_func1 STABLE; -- Replacing the function with altered volatility throws an error CREATE OR REPLACE FUNCTION immutable_func1(name text) RETURNS text language plpgsql AS $$ BEGIN RETURN name; END; $$VOLATILE;

Es wird dringend empfohlen, den Funktionen die richtigen Volatilitäten zuzuweisen. Wenn Ihre Funktion beispielsweise Datenbankobjekte SELECT aus mehreren Tabellen verwendet oder auf Datenbankobjekte verweist, legen Sie sie nicht als fest. IMMUTABLE Wenn sich der Tabelleninhalt jemals ändert, ist die Unveränderlichkeit beeinträchtigt.

Aurora PostgreSQL erlaubt unveränderliche SELECT interne Funktionen, aber die Ergebnisse könnten falsch sein. Aurora PostgreSQL Limitless Database kann sowohl Fehler als auch falsche Ergebnisse zurückgeben. Weitere Informationen zur Funktionsvolatilität finden Sie unter Kategorien der Funktionsvolatilität in der PostgreSQL-Dokumentation.

Sequenzen

Benannte Sequenzen sind Datenbankobjekte, die eindeutige Zahlen in aufsteigender oder absteigender Reihenfolge generieren. CREATE SEQUENCEerstellt einen neuen Sequenznummerngenerator. Sequenzwerte sind garantiert eindeutig.

Wenn Sie eine benannte Sequenz in Aurora PostgreSQL Limitless Database erstellen, wird ein verteiltes Sequenzobjekt erstellt. Dann verteilt Aurora PostgreSQL Limitless Database nicht überlappende Blöcke von Sequenzwerten auf alle Distributed Transaction Router (Router). Chunks werden als lokale Sequenzobjekte auf Routern dargestellt; daher werden Sequenzoperationen wie und lokal ausgeführt. nextval currval Router arbeiten unabhängig voneinander und fordern bei Bedarf neue Chunks aus der verteilten Sequenz an.

Weitere Informationen zu Sequenzen finden Sie unter CREATE SEQUENCE in der PostgreSQL-Dokumentation.

Einen neuen Chunk anfordern

Sie konfigurieren die Größe der Chunks, die Routern zugewiesen sind, mithilfe des Parameters. rds_aurora.limitless_sequence_chunk_size Der Standardwert ist 250000. Jeder Router besitzt zunächst zwei Chunks: aktive und reservierte. Aktive Chunks werden verwendet, um lokale Sequenzobjekte zu konfigurieren (Einstellung minvalue undmaxvalue), und reservierte Chunks werden in einer internen Katalogtabelle gespeichert. Wenn ein aktiver Chunk den Minimal- oder Maximalwert erreicht, wird er durch den reservierten Chunk ersetzt. Um das zu tun, ALTER SEQUENCE wird es intern verwendet, was bedeutet, dass AccessExclusiveLock es erworben wird.

Hintergrund-Worker werden alle 10 Sekunden auf Router-Knoten ausgeführt, um Sequenzen nach benutzten reservierten Chunks zu durchsuchen. Wenn ein benutzter Block gefunden wird, fordert der Worker einen neuen Chunk aus der verteilten Sequenz an. Stellen Sie sicher, dass die Chunk-Größe groß genug ist, damit die Mitarbeiter im Hintergrund genügend Zeit haben, neue anzufordern. Remoteanfragen werden niemals im Kontext von Benutzersitzungen ausgeführt, was bedeutet, dass Sie nicht direkt eine neue Sequenz anfordern können.

Einschränkungen

Die folgenden Einschränkungen gelten für Sequenzen in Aurora PostgreSQL Limitless Database:

  • Der pg_sequence Katalog, die pg_sequences Funktion und die SELECT * FROM sequence_name Anweisung zeigen alle nur den lokalen Sequenzstatus, nicht den verteilten Status.

  • Sequenzwerte sind garantiert eindeutig und innerhalb einer Sitzung garantiert monoton. Sie können jedoch bei nextval Anweisungen, die in anderen Sitzungen ausgeführt werden, nicht in der richtigen Reihenfolge sein, wenn diese Sitzungen mit anderen Routern verbunden sind.

  • Stellen Sie sicher, dass die Sequenzgröße (Anzahl der verfügbaren Werte) groß genug ist, um auf alle Router verteilt zu werden. Verwenden Sie den rds_aurora.limitless_sequence_chunk_size Parameter, um den zu konfigurieren. chunk_size (Jeder Router hat zwei Chunks.)

  • Die CACHE Option wird unterstützt, aber der Cache muss kleiner als sein. chunk_size

Nicht unterstützte Optionen

Die folgenden Optionen werden für Sequenzen in Aurora PostgreSQL Limitless Database nicht unterstützt.

Sequenz-Bearbeitungsfunktionen

Die setval Funktion wird nicht unterstützt. Weitere Informationen finden Sie unter Sequenzmanipulationsfunktionen in der PostgreSQL-Dokumentation.

CREATE SEQUENCE

Die folgenden Optionen werden nicht unterstützt.

CREATE [{ TEMPORARY | TEMP} | UNLOGGED] SEQUENCE [[ NO ] CYCLE]

Weitere Informationen finden Sie unter CREATE SEQUENCE in der PostgreSQL-Dokumentation.

SEQUENZ ÄNDERN

Die folgenden Optionen werden nicht unterstützt.

ALTER SEQUENCE [[ NO ] CYCLE]

Weitere Informationen finden Sie unter ALTER SEQUENCE in der PostgreSQL-Dokumentation.

ALTER TABLE

Der ALTER TABLE Befehl wird für Sequenzen nicht unterstützt.

Beispiele

SEQUENZ ERSTELLEN/LÖSCHEN
postgres_limitless=> CREATE SEQUENCE s; CREATE SEQUENCE postgres_limitless=> SELECT nextval('s'); nextval --------- 1 (1 row) postgres_limitless=> SELECT * FROM pg_sequence WHERE seqrelid='s'::regclass; seqrelid | seqtypid | seqstart | seqincrement | seqmax | seqmin | seqcache | seqcycle ----------+----------+----------+--------------+--------+--------+----------+---------- 16960 | 20 | 1 | 1 | 10000 | 1 | 1 | f (1 row) % connect to another router postgres_limitless=> SELECT nextval('s'); nextval --------- 10001 (1 row) postgres_limitless=> SELECT * FROM pg_sequence WHERE seqrelid='s'::regclass; seqrelid | seqtypid | seqstart | seqincrement | seqmax | seqmin | seqcache | seqcycle ----------+----------+----------+--------------+--------+--------+----------+---------- 16959 | 20 | 10001 | 1 | 20000 | 10001 | 1 | f (1 row) postgres_limitless=> DROP SEQUENCE s; DROP SEQUENCE
SEQUENZ ÄNDERN
postgres_limitless=> CREATE SEQUENCE s; CREATE SEQUENCE postgres_limitless=> ALTER SEQUENCE s RESTART 500; ALTER SEQUENCE postgres_limitless=> SELECT nextval('s'); nextval --------- 500 (1 row) postgres_limitless=> SELECT currval('s'); currval --------- 500 (1 row)
Sequenz-Bearbeitungsfunktionen
postgres=# CREATE TABLE t(a bigint primary key, b bigint); CREATE TABLE postgres=# CREATE SEQUENCE s minvalue 0 START 0; CREATE SEQUENCE postgres=# INSERT INTO t VALUES (nextval('s'), currval('s')); INSERT 0 1 postgres=# INSERT INTO t VALUES (nextval('s'), currval('s')); INSERT 0 1 postgres=# SELECT * FROM t; a | b ---+--- 0 | 0 1 | 1 (2 rows) postgres=# ALTER SEQUENCE s RESTART 10000; ALTER SEQUENCE postgres=# INSERT INTO t VALUES (nextval('s'), currval('s')); INSERT 0 1 postgres=# SELECT * FROM t; a | b -------+------- 0 | 0 1 | 1 10000 | 10000 (3 rows)

Sequenzansichten

Aurora PostgreSQL Limitless Database bietet die folgenden Ansichten für Sequenzen.

rds_aurora.limitless_distributed_sequence

Diese Ansicht zeigt den Status und die Konfiguration einer verteilten Sequenz. Die cache Spalten minvaluemaxvalue,start,inc, und haben dieselbe Bedeutung wie in der Ansicht pg_sequences und zeigen die Optionen, mit denen die Sequenz erstellt wurde. Die lastval Spalte zeigt den letzten zugewiesenen oder reservierten Wert in einem verteilten Sequenzobjekt. Dies bedeutet nicht, dass der Wert bereits verwendet wurde, da Router Sequenzblöcke lokal speichern.

postgres_limitless=> SELECT * FROM rds_aurora.limitless_distributed_sequence WHERE sequence_name='test_serial_b_seq'; schema_name | sequence_name | lastval | minvalue | maxvalue | start | inc | cache -------------+-------------------+---------+----------+------------+-------+-----+------- public | test_serial_b_seq | 1250000 | 1 | 2147483647 | 1 | 1 | 1 (1 row)
rds_aurora.limitless_sequence_metadata

Diese Ansicht zeigt verteilte Sequenzmetadaten und aggregiert Sequenzmetadaten von Clusterknoten. Sie verwendet die folgenden Spalten:

  • subcluster_id— Die Clusterknoten-ID, der ein Chunk gehört.

  • Aktiver Chunk — Ein Teil einer Sequenz, der verwendet wird (active_minvalue,). active_maxvalue

  • Reservierter Chunk — Der lokale Chunk, der als Nächstes verwendet wird (,). reserved_minvalue reserved_maxvalue

  • local_last_value— Der zuletzt beobachtete Wert aus einer lokalen Sequenz.

  • chunk_size— Die Größe eines Chunks, wie sie bei der Erstellung konfiguriert wurde.

postgres_limitless=> SELECT * FROM rds_aurora.limitless_sequence_metadata WHERE sequence_name='test_serial_b_seq' order by subcluster_id; subcluster_id | sequence_name | schema_name | active_minvalue | active_maxvalue | reserved_minvalue | reserved_maxvalue | chunk_size | chunk_state | local_last_value ---------------+-------------------+-------------+-----------------+-----------------+-------------------+-------------------+------------+-------------+------------------ 1 | test_serial_b_seq | public | 500001 | 750000 | 1000001 | 1250000 | 250000 | 1 | 550010 2 | test_serial_b_seq | public | 250001 | 500000 | 750001 | 1000000 | 250000 | 1 | (2 rows)

Behebung von Sequenzproblemen

Die folgenden Probleme können bei Sequenzen auftreten.

Die Chunk-Größe ist nicht groß genug

Wenn die Chunk-Größe nicht groß genug eingestellt ist und die Transaktionsrate hoch ist, haben die Mitarbeiter im Hintergrund möglicherweise nicht genug Zeit, um neue Chunks anzufordern, bevor die aktiven Chunks erschöpft sind. Dies kann zu Konflikten und Warteereignissen wie,, und führen. LIMITLESS:AuroraLimitlessSequenceReplace LWLock:LockManager Lockrelation LWlock:bufferscontent

Erhöhen Sie den Wert des Parameters rds_aurora.limitless_sequence_chunk_size.

Der Sequenz-Cache ist zu hoch eingestellt

In PostgreSQL erfolgt das Sequenz-Caching auf Sitzungsebene. Jede Sitzung weist während eines Zugriffs auf das Sequenzobjekt aufeinanderfolgende Sequenzwerte zu und erhöht die Werte des Sequenzobjekts entsprechend. last_value Bei der nächsten Verwendung von nextval innerhalb dieser Sitzung werden dann einfach die vorab zugewiesenen Werte zurückgegeben, ohne das Sequenzobjekt zu berühren.

Alle Nummern, die innerhalb einer Sitzung zugewiesen, aber nicht verwendet wurden, gehen verloren, wenn die Sitzung endet, was zu „Löchern“ in der Sequenz führt. Dies kann den sequence_chunk schnell verbrauchen und zu Konflikten und Warteereignissen wieLIMITLESS:AuroraLimitlessSequenceReplace,, und führen. LWLock:LockManager Lockrelation LWlock:bufferscontent

Reduzieren Sie die Einstellung für den Sequenz-Cache.

Die folgende Abbildung zeigt Warteereignisse, die durch Sequenzprobleme verursacht wurden.

Warteereignisse, die durch Sequenzprobleme verursacht werden.