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.
Themen
ALTER TABLE
Der ALTER TABLE
Befehl wird generell in Aurora PostgreSQL Limitless Database unterstützt. Weitere Informationen finden Sie unter ALTER TABLE
Einschränkungen
ALTER TABLE
hat 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
-
ONLY
Flagge -
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 CONCURRENTLY
wird für Sharded-Tabellen unterstützt:
CREATE INDEX CONCURRENTLY
index_name
ONtable_name
(column_name
);
CREATE UNIQUE INDEX
wird für alle Tabellentypen unterstützt:
CREATE UNIQUE INDEX
index_name
ONtable_name
(column_name
);
CREATE UNIQUE INDEX CONCURRENTLY
wird nicht unterstützt:
CREATE UNIQUE INDEX CONCURRENTLY
index_name
ONtable_name
(column_name
);
Weitere Informationen finden Sie unter UNIQUE. Allgemeine Informationen zum Erstellen von Indizes finden Sie unter CREATE INDEX
- Indizes anzeigen
-
Nicht alle Indizes sind auf Routern sichtbar, wenn Sie
\d
oder ähnliche Befehle verwenden. Verwenden Sie stattdessen dietable_name
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 SCHEMA
mit 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);
IDENTITY
Spalten 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
AS
gibt Primärschlüssel nicht an neue Tabellen weiter.
Allgemeine Informationen finden Sie unter CREATE TABLE AS
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 INTO
ist 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
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 NULL
Einschrä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 );
UNIQUE
Einschrä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
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
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
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 keine Objekte ändern, die der Erweiterung pg_stat_statements
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 ] [ SCHEMAschema_name
] [ VERSIONversion
] [ CASCADE ]Weitere Informationen finden Sie unter CREATE EXTENSION
in der PostgreSQL-Dokumentation. - ALTER EXTENSION
-
Folgendes wird unterstützt: DDLs
ALTER EXTENSION
name
UPDATE [ TOnew_version
] ALTER EXTENSIONname
SET SCHEMAnew_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
ADDmember_object
ALTER EXTENSIONname
DROPmember_object
pg_buffercache-Unterschiede in der Aurora PostgreSQL Limitless-Datenbank
Wenn Sie in Aurora PostgreSQL Limitless Database die Erweiterung pg_buffercachepg_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 Dateilimitless_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 derrelname
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
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 derpgstatindex
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ßer
root_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 TABLE
withFOREIGN 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 |
---|---|---|---|---|
|
Ja | Ja | Ja | Ja |
|
Ja | Ja | Ja | Ja |
|
Ja | Ja | Ja | Ja |
|
Ja | Ja | Ja | Ja |
|
Nein | Nein | Nein | Nein |
|
Ja | Ja | Ja | Ja |
|
Ja | Ja | Ja | Ja |
|
Ja | Nein | Nein | Ja |
|
Ja | Ja | Ja | Ja |
|
Ja | Ja | Ja | Ja |
|
Ja | Ja | Ja | Ja |
|
Nein | Nein | Nein | Nein |
|
Ja | Nein | Nein | Ja |
|
Nein | Nein | Nein | Ja |
|
Ja | Ja | Ja | Ja |
|
Ja | Ja | Ja | Ja |
|
Nein | Nein | Nein | Nein |
|
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:
-
— Die Funktion, die verteilt werden soll. Erwähnen Sie nur die Eingabeargumente und keines der Ausgabeargumente.function_prototype
Wenn eines der Argumente als
OUT
Parameter definiert ist, nehmen Sie seinen Typ nicht in die Argumente von auffunction_prototype
. -
ARRAY['
— Die Liste der Funktionsargumente, die als Shard-Schlüssel für die Funktion identifiziert wurden.shard_key
'] -
— Die Sharde-Tabelle, die den Datenbereich auf dem Ziel-Shard enthält.collocating_table
Um den Shard zu identifizieren, auf dem diese Funktion zur Ausführung heruntergefahren werden soll, nimmt das System das ARRAY['
Argument, hasht es und findet den Shard, der den Bereich hostet, der shard_key
']
diesen Hashwert enthält.collocating_table
- 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 vor
func
, bei der wir die Sharde-Tabellecustomers
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
undOUT
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_procprovolatile
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 auchv
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
Sequenzen
Benannte Sequenzen sind Datenbankobjekte, die eindeutige Zahlen in aufsteigender oder absteigender Reihenfolge generieren. CREATE SEQUENCE
erstellt 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
Themen
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, diepg_sequences
Funktion und dieSELECT * FROM
Anweisung zeigen alle nur den lokalen Sequenzstatus, nicht den verteilten Status.sequence_name
-
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 Sequenzmanipulationsfunktionenin 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
Spaltenminvalue
maxvalue
,start
,inc
, und haben dieselbe Bedeutung wie in der Ansicht pg_sequencesund 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 vonnextval
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 wie
LIMITLESS: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.
