Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Limitations DDL et autres informations relatives à la base de données Aurora PostgreSQL Limitless
Les rubriques suivantes décrivent les limites ou fournissent des informations supplémentaires sur les commandes DDL SQL dans la base de données Aurora PostgreSQL Limitless.
Rubriques
ALTER TABLE
La ALTER TABLE
commande est généralement prise en charge dans la base de données Aurora PostgreSQL Limitless. Pour plus d'informations, consultez ALTER TABLE
Limites
ALTER TABLE
présente les limites suivantes pour les options prises en charge.
- Supprimer une colonne
-
-
Sur les tableaux fragmentés, vous ne pouvez pas supprimer les colonnes qui font partie de la clé de partition.
-
Dans les tables de référence, vous ne pouvez pas supprimer les colonnes de clé primaire.
-
- Modification du type de données d'une colonne
-
-
L'
USING
expression n'est pas prise en charge. -
Sur les tableaux fragmentés, vous ne pouvez pas modifier le type des colonnes qui font partie de la clé de partition.
-
- Ajouter ou supprimer une contrainte
-
Pour plus de détails sur ce qui n'est pas pris en charge, consultezConstraints.
- Modification de la valeur par défaut d'une colonne
-
Les valeurs par défaut sont prises en charge. Pour de plus amples informations, veuillez consulter Valeurs par défaut.
Options non prises en charge
Certaines options ne sont pas prises en charge car elles dépendent de fonctionnalités non prises en charge, telles que les déclencheurs.
Les options suivantes au niveau du tableau pour ALTER TABLE
ne sont pas prises en charge :
-
ALL IN TABLESPACE
-
ATTACH PARTITION
-
DETACH PARTITION
-
ONLY
drapeau -
RENAME CONSTRAINT
Les options suivantes au niveau des colonnes pour ALTER TABLE
ne sont pas prises en charge :
-
AJOUTER GÉNÉRÉ
-
SUPPRIMER L'EXPRESSION [SI ELLE EXISTE]
-
SUPPRIMER L'IDENTITÉ [SI ELLE EXISTE]
-
RESET
-
RESTART
-
SET
-
DÉFINIR LA COMPRESSION
-
SET STATISTICS
CREATE DATABASE
Dans Aurora PostgreSQL Limitless Database, seules les bases de données illimitées sont prises en charge.
En cours CREATE DATABASE
d'exécution, les bases de données créées avec succès sur un ou plusieurs nœuds peuvent échouer sur d'autres nœuds, car la création de base de données est une opération non transactionnelle. Dans ce cas, les objets de base de données créés avec succès sont automatiquement supprimés de tous les nœuds dans un délai prédéterminé afin de maintenir la cohérence du groupe de partitions de base de données. Pendant ce temps, la recréation d'une base de données portant le même nom peut générer une erreur indiquant que la base de données existe déjà.
Les options suivantes sont prises en charge :
-
Colloque :
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
;
Les options suivantes ne sont pas prises en charge :
-
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
est pris en charge pour les tables fragmentées :
CREATE INDEX CONCURRENTLY
index_name
ONtable_name
(column_name
);
CREATE UNIQUE INDEX
est pris en charge pour tous les types de tables :
CREATE UNIQUE INDEX
index_name
ONtable_name
(column_name
);
CREATE UNIQUE INDEX CONCURRENTLY
n'est pas pris en charge :
CREATE UNIQUE INDEX CONCURRENTLY
index_name
ONtable_name
(column_name
);
Pour plus d'informations, consultez UNIQUE. Pour des informations générales sur la création d'index, consultez CREATE INDEX
- Afficher les index
-
Les index ne sont pas tous visibles sur les routeurs lorsque vous utilisez
\d
des commandes similaires. Utilisez plutôt latable_name
pg_catalog.pg_indexes
vue pour obtenir des index, comme indiqué dans l'exemple suivant.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
avec un élément de schéma n'est pas pris en charge :
CREATE SCHEMA
my_schema
CREATE TABLE (column_name
INT);
Cela génère une erreur similaire à la suivante :
ERROR: CREATE SCHEMA with schema elements is not supported
CREATE TABLE
Les relations dans CREATE TABLE
les instructions ne sont pas prises en charge, par exemple :
CREATE TABLE orders (orderid int, customerId int, orderDate date) WITH (autovacuum_enabled = false);
IDENTITY
les colonnes ne sont pas prises en charge, par exemple :
CREATE TABLE orders (orderid INT GENERATED ALWAYS AS IDENTITY);
La base de données Aurora PostgreSQL Limitless prend en charge jusqu'à 54 caractères pour les noms de table fragmentés.
CREATE TABLE AS
Pour créer une table en utilisantCREATE TABLE AS
, vous devez utiliser la rds_aurora.limitless_create_table_mode
variable. Pour les tableaux fragmentés, vous devez également utiliser la rds_aurora.limitless_create_table_shard_key
variable. Pour de plus amples informations, veuillez consulter Création de tables illimitées à l'aide de variables.
-- 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;
Vous ne pouvez pas les utiliser CREATE TABLE AS
pour créer des tables de référence, car elles nécessitent des contraintes de clé primaire. CREATE TABLE
AS
ne propage pas les clés primaires vers les nouvelles tables.
Pour des informations générales, consultez CREATE TABLE AS
DROP DATABASE
Vous pouvez supprimer les bases de données que vous avez créées.
La DROP DATABASE
commande s'exécute de manière asynchrone en arrière-plan. Pendant son exécution, vous recevrez un message d'erreur si vous essayez de créer une nouvelle base de données portant le même nom.
SELECT INTO
SELECT INTO
est fonctionnellement similaire à. CREATE TABLE AS Vous devez utiliser la rds_aurora.limitless_create_table_mode
variable. Pour les tableaux fragmentés, vous devez également utiliser la rds_aurora.limitless_create_table_shard_key
variable. Pour de plus amples informations, veuillez consulter Création de tables illimitées à l'aide de variables.
-- 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;
Actuellement, l'SELECT INTO
opération est effectuée via le routeur, et non directement via les partitions. Par conséquent, les performances peuvent être lentes.
Pour des informations générales, consultez SELECT INTO
Constraints
Les limitations suivantes s'appliquent aux contraintes de la base de données Aurora PostgreSQL Limitless.
- CHECK
-
Les contraintes simples impliquant des opérateurs de comparaison avec des littéraux sont prises en charge. Les expressions et contraintes plus complexes qui nécessitent des validations de fonctions ne sont pas prises en charge, comme le montrent les exemples suivants.
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" );
Vous pouvez attribuer des noms explicites aux contraintes, comme illustré dans l'exemple suivant.
CREATE TABLE my_table ( id INT CONSTRAINT positive_id CHECK (id > 0) , val INT CONSTRAINT val_in_range CHECK (val > 0 AND val < 1000) );
Vous pouvez utiliser la syntaxe de contrainte au niveau de la table avec la
CHECK
contrainte, comme illustré dans l'exemple suivant.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
-
Les contraintes d'exclusion ne sont pas prises en charge dans la base de données Aurora PostgreSQL Limitless.
- FOREIGN KEY
-
Pour de plus amples informations, veuillez consulter Clés étrangères.
- NON NUL
-
NOT NULL
les contraintes sont prises en charge sans aucune restriction. - PRIMARY KEY
-
La clé primaire implique des contraintes uniques et, par conséquent, les mêmes restrictions sur les contraintes uniques s'appliquent à la clé primaire. Cela signifie :
-
Si une table est convertie en table fragmentée, la clé de partition doit être un sous-ensemble de la clé primaire. C'est-à-dire que la clé primaire contient toutes les colonnes de la clé de partition.
-
Si une table est convertie en table de référence, elle doit comporter une clé primaire.
Les exemples suivants illustrent l'utilisation des clés primaires.
-- 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']);
Essayer d'ajouter une clé primaire qui ne contient pas de clé de partition :
-- 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
Essayer d'ajouter une clé primaire contenant une clé de partition :
-- 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
Remplacez un tableau standard par un tableau de référence.
-- 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');
Pour plus d'informations sur la création de tables fragmentées et de tables de référence, consultezCréation de tables de base de données Aurora Postgre SQL Limitless.
-
- UNIQUE
-
Dans les tables fragmentées, la clé unique doit contenir la clé de partition, c'est-à-dire que la clé de partition doit être un sous-ensemble de la clé unique. Ceci est vérifié lorsque vous remplacez le type de tableau par découpé. Dans les tableaux de référence, il n'y a aucune restriction.
CREATE TABLE customer ( customer_id INT NOT NULL , zipcode INT , email TEXT UNIQUE );
Les
UNIQUE
contraintes au niveau des tables sont prises en charge, comme indiqué dans l'exemple suivant.CREATE TABLE customer ( customer_id INT NOT NULL , zipcode INT , email TEXT , CONSTRAINT zipcode_and_email UNIQUE (zipcode, email) );
L'exemple suivant montre l'utilisation conjointe d'une clé primaire et d'une clé unique. Les deux clés doivent inclure la clé shard.
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) );
Pour plus d'informations, consultez la section Contraintes
Valeurs par défaut
La base de données Aurora PostgreSQL Limitless prend en charge les expressions dans les valeurs par défaut.
L'exemple suivant montre l'utilisation des valeurs par défaut.
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)
Les expressions sont prises en charge, comme indiqué dans l'exemple suivant.
CREATE TABLE t1 (a NUMERIC DEFAULT random());
L'exemple suivant ajoute une nouvelle colonne qui est NOT NULL
et possède une valeur par défaut.
ALTER TABLE t ADD COLUMN d BOOLEAN NOT NULL DEFAULT FALSE; SELECT * FROM t; a | b | c | d ---+-----+---+--- 5 | NAN | | f (1 row)
L'exemple suivant modifie une colonne existante avec une valeur par défaut.
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)
L'exemple suivant supprime une valeur par défaut.
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)
Pour plus d'informations, consultez la section Valeurs par défaut
Extensions
Les extensions PostgreSQL suivantes sont prises en charge dans la base de données Aurora PostgreSQL Limitless :
-
aurora_limitless_fdw
— Cette extension est préinstallée. Tu ne peux pas le laisser tomber. -
aws_s3
— Cette extension fonctionne dans la base de données Aurora PostgreSQL Limitless de la même manière que dans Aurora PostgreSQL.Vous pouvez importer des données d'un compartiment Amazon S3 vers un cluster de base de données Aurora PostgreSQL Limitless ou exporter des données d'un cluster de base de données Aurora PostgreSQL Limitless vers un compartiment Amazon S3. Pour plus d’informations, consultez Importation de données Amazon S3 dans une d'un cluster de base de données Aurora PostgreSQL et Exportation de données à partir d'un cluster de base de données Aurora PostgreSQL vers Amazon S3.
-
btree_gin
-
citext
-
ip4r
-
pg_buffercache
— Cette extension se comporte différemment dans la base de données Aurora PostgreSQL Limitless par rapport à la communauté PostgreSQL. Pour de plus amples informations, veuillez consulter différences entre pg_buffercache dans la base de données Aurora PostgreSQL Limitless. -
pg_stat_statements
-
pg_trgm
-
pgcrypto
-
pgstattuple
— Cette extension se comporte différemment dans la base de données Aurora PostgreSQL Limitless par rapport à la communauté PostgreSQL. Pour de plus amples informations, veuillez consulter différences entre pgstattuple dans la base de données Aurora PostgreSQL Limitless. -
pgvector
-
plpgsql
— Cette extension est préinstallée, mais vous pouvez la supprimer. -
PostGIS
— Les transactions longues et les fonctions de gestion des tables ne sont pas prises en charge. La modification de la table de référence spatiale n'est pas prise en charge. -
unaccent
-
uuid
La plupart des extensions PostgreSQL ne sont actuellement pas prises en charge dans la base de données Aurora PostgreSQL Limitless. Toutefois, vous pouvez toujours utiliser le paramètre de configuration shared_preload_libraries
Par exemple, vous pouvez charger l'pg_hint_plan
extension, mais le fait de la charger ne garantit pas que les indications transmises dans les commentaires de requête seront utilisées.
Note
Vous ne pouvez pas modifier les objets associés à l'extension pg_stat_statementspg_stat_statements
, consultez limitless_stat_statements.
Vous pouvez utiliser les pg_available_extension_versions
fonctions pg_available_extensions
et pour rechercher les extensions prises en charge dans la base de données Aurora PostgreSQL Limitless.
Les extensions suivantes DDLs sont prises en charge :
- CREATE EXTENSION
-
Vous pouvez créer des extensions, comme dans PostgreSQL.
CREATE EXTENSION [ IF NOT EXISTS ]
extension_name
[ WITH ] [ SCHEMAschema_name
] [ VERSIONversion
] [ CASCADE ]Pour plus d'informations, consultez CREATE EXTENSION
dans la documentation de PostgreSQL. - ALTER EXTENSION
-
Les éléments suivants DDLs sont pris en charge :
ALTER EXTENSION
name
UPDATE [ TOnew_version
] ALTER EXTENSIONname
SET SCHEMAnew_schema
Pour plus d'informations, consultez ALTER EXTENSION
dans la documentation de PostgreSQL. - DROP EXTENSION
-
Vous pouvez supprimer des extensions, comme dans PostgreSQL.
DROP EXTENSION [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
Pour plus d'informations, consultez DROP EXTENSION
dans la documentation de PostgreSQL.
Les extensions suivantes DDLs ne sont pas prises en charge :
- ALTER EXTENSION
-
Vous ne pouvez pas ajouter ou supprimer des objets membres dans les extensions.
ALTER EXTENSION
name
ADDmember_object
ALTER EXTENSIONname
DROPmember_object
différences entre pg_buffercache dans la base de données Aurora PostgreSQL Limitless
Dans la base de données Aurora PostgreSQL Limitless, lorsque vous installez l'extension pg_buffercache et que vous utilisez lapg_buffercache
la mémoire tampon uniquement en provenance du nœud auquel vous êtes actuellement connecté : le routeur. De même, l'utilisation de la fonction pg_buffercache_summary
ou pg_buffercache_usage_counts
fournit des informations uniquement à partir du nœud connecté.
Vous pouvez avoir de nombreux nœuds et avoir besoin d'accéder aux informations de la mémoire tampon à partir de n'importe quel nœud pour diagnostiquer efficacement les problèmes. Par conséquent, Limitless Database fournit les fonctions suivantes :
-
rds_aurora.limitless_pg_buffercache(
subcluster_id
) -
rds_aurora.limitless_pg_buffercache_summary(
subcluster_id
) -
rds_aurora.limitless_pg_buffercache_usage_counts(
subcluster_id
)
En saisissant l'ID de sous-cluster de n'importe quel nœud, qu'il s'agisse d'un routeur ou d'une partition, vous pouvez facilement accéder aux informations de mémoire tampon spécifiques à ce nœud. Ces fonctions sont directement disponibles lorsque vous installez l'pg_buffercache
extension dans la base de données illimitée.
Note
La base de données Aurora PostgreSQL Limitless prend en charge ces fonctions pour les versions 1.4 et supérieures de l'extension. pg_buffercache
Les colonnes affichées dans la limitless_pg_buffercache
vue sont légèrement différentes de celles de la pg_buffercache
vue :
-
bufferid
— Reste inchangé par rapport àpg_buffercache
. -
relname
— Au lieu d'afficher le numéro de nœud du fichier tel qu'il estpg_buffercache
indiqué,limitless_pg_buffercache
présente le nœud associérelname
s'il est disponible dans la base de données actuelle ou dans les catalogues de systèmes partagés, sinonNULL
. -
parent_relname
— Cette nouvelle colonne, absente danspg_buffercache
, affiche le parentrelname
si la valeur de larelname
colonne représente une table partitionnée (dans le cas de tables fragmentées). Dans le cas contraire, il s'afficheNULL
. -
spcname
— Au lieu d'afficher l'identifiant d'objet de l'espace disque logique (OID) comme dans le cas présentpg_buffercache
,limitless_pg_buffercache
affiche le nom de l'espace disque logique. -
datname
— Au lieu d'afficher l'OID de la base de données tel quelpg_buffercache
,limitless_pg_buffercache
affiche le nom de la base de données. -
relforknumber
— Reste inchangé par rapport àpg_buffercache
. -
relblocknumber
— Reste inchangé par rapport àpg_buffercache
. -
isdirty
— Reste inchangé par rapport àpg_buffercache
. -
usagecount
— Reste inchangé par rapport àpg_buffercache
. -
pinning_backends
— Reste inchangé par rapport àpg_buffercache
.
Les colonnes limitless_pg_buffercache_summary
et les limitless_pg_buffercache_usage_counts
vues sont les mêmes que celles des vues normales pg_buffercache_summary
et des pg_buffercache_usage_counts
vues, respectivement.
En utilisant ces fonctions, vous pouvez accéder à des informations détaillées sur le cache tampon sur tous les nœuds de votre environnement de base de données Limitless, ce qui permet un diagnostic et une gestion plus efficaces de vos systèmes de base de données.
différences entre pgstattuple dans la base de données Aurora PostgreSQL Limitless
Dans Aurora PostgreSQL, l'extension pgstattuple ne prend actuellement pas en charge les
Nous reconnaissons l'importance de cette extension pour obtenir des statistiques au niveau des tuples, ce qui est crucial pour des tâches telles que l'élimination des ballonnements et la collecte d'informations diagnostiques. Par conséquent, la base de données Aurora PostgreSQL Limitless prend en charge l'extension dans des bases de pgstattuple
données illimitées.
La base de données Aurora PostgreSQL Limitless inclut les fonctions suivantes dans le schéma : rds_aurora
- Fonctions statistiques au niveau du tuple
-
rds_aurora.limitless_pgstattuple(
relation_name
)-
Objectif : Extraire des statistiques au niveau des tuples pour les tables standard et leurs index
-
Entrée :
relation_name
(texte) — Le nom de la relation -
Résultat : colonnes cohérentes avec celles renvoyées par la
pgstattuple
fonction dans Aurora PostgreSQL
rds_aurora.limitless_pgstattuple(
relation_name
,subcluster_id
)-
Objectif : Extraire des statistiques au niveau du tuple pour les tables de référence, les tables partitionnées, les tables de catalogue et leurs index
-
Entrée :
-
relation_name
(texte) — Le nom de la relation -
subcluster_id
(text) — L'ID du sous-cluster du nœud où les statistiques doivent être extraites
-
-
Sortie :
-
Pour les tables de référence et de catalogue (y compris leurs index), les colonnes sont cohérentes avec celles d'Aurora PostgreSQL.
-
Pour les tables fragmentées, les statistiques représentent uniquement la partition de la table fragmentée résidant sur le sous-cluster spécifié.
-
-
- Fonctions de statistiques d'index
-
rds_aurora.limitless_pgstatindex(
relation_name
)-
Objectif : Extraire des statistiques pour les index B-tree sur des tables standard
-
Entrée :
relation_name
(texte) — Le nom de l'index B-tree -
Résultat : Toutes les colonnes sauf
root_block_no
sont renvoyées. Les colonnes renvoyées sont cohérentes avec lapgstatindex
fonction d'Aurora PostgreSQL.
rds_aurora.limitless_pgstatindex(
relation_name
,subcluster_id
)-
Objectif : Extraire des statistiques pour les index B-tree des tables de référence, des tables partitionnées et des tables de catalogue.
-
Entrée :
-
relation_name
(texte) — Le nom de l'index B-tree -
subcluster_id
(text) — L'ID du sous-cluster du nœud où les statistiques doivent être extraites
-
-
Sortie :
-
Pour les index des tables de référence et de catalogue, toutes les colonnes (sauf
root_block_no
) sont renvoyées. Les colonnes renvoyées sont cohérentes avec Aurora PostgreSQL. -
Pour les tables fragmentées, les statistiques représentent uniquement la partition de l'index de table fragmenté résidant sur le sous-cluster spécifié. La
tree_level
colonne indique la moyenne de toutes les tranches de table du sous-cluster demandé.
-
rds_aurora.limitless_pgstatginindex(
relation_name
)-
Objectif : Extraire les statistiques pour les indices inversés généralisés (GINs) sur des tables standard
-
Saisie :
relation_name
(texte) — Le nom du GIN -
Résultat : colonnes cohérentes avec celles renvoyées par la
pgstatginindex
fonction dans Aurora PostgreSQL
rds_aurora.limitless_pgstatginindex(
relation_name
,subcluster_id
)-
Objectif : Extraire des statistiques pour les index GIN sur les tables de référence, les tables partitionnées et les tables de catalogue.
-
Entrée :
-
relation_name
(texte) — Le nom de l'index -
subcluster_id
(text) — L'ID du sous-cluster du nœud où les statistiques doivent être extraites
-
-
Sortie :
-
Pour les index GIN des tables de référence et de catalogue, les colonnes sont cohérentes avec celles d'Aurora PostgreSQL.
-
Pour les tables fragmentées, les statistiques représentent uniquement la partition de l'index de table fragmenté résidant sur le sous-cluster spécifié.
-
rds_aurora.limitless_pgstathashindex(
relation_name
)-
Objectif : Extraire les statistiques pour les index de hachage sur les tables standard
-
Entrée :
relation_name
(texte) — Le nom de l'index de hachage -
Résultat : colonnes cohérentes avec celles renvoyées par la
pgstathashindex
fonction dans Aurora PostgreSQL
rds_aurora.limitless_pgstathashindex(
relation_name
,subcluster_id
)-
Objectif : Extraire les statistiques relatives aux index de hachage des tables de référence, des tables partitionnées et des tables de catalogue.
-
Entrée :
-
relation_name
(texte) — Le nom de l'index -
subcluster_id
(text) — L'ID du sous-cluster du nœud où les statistiques doivent être extraites
-
-
Sortie :
-
Pour les index de hachage des tables de référence et de catalogue, les colonnes sont cohérentes avec Aurora PostgreSQL.
-
Pour les tables fragmentées, les statistiques représentent uniquement la partition de l'index de table fragmenté résidant sur le sous-cluster spécifié.
-
-
- Fonctions de comptage de pages
-
rds_aurora.limitless_pg_relpages(
relation_name
)-
Objectif : Extraire le nombre de pages pour les tables standard et leurs index
-
Entrée :
relation_name
(texte) — Le nom de la relation -
Sortie : nombre de pages de la relation spécifiée
rds_aurora.limitless_pg_relpages(
relation_name
,subcluster_id
)-
Objectif : Extraire le nombre de pages pour les tables de référence, les tables partitionnées et les tables de catalogue (y compris leurs index)
-
Entrée :
-
relation_name
(texte) — Le nom de la relation -
subcluster_id
(texte) — L'ID du sous-cluster du nœud où le nombre de pages doit être extrait
-
-
Résultat : pour les tableaux fragmentés, le nombre de pages est la somme des pages de toutes les tranches de tableau du sous-cluster spécifié.
-
- Fonctions statistiques approximatives au niveau du tuple
-
rds_aurora.limitless_pgstattuple_approx(
relation_name
)-
Objectif : Extraire des statistiques approximatives au niveau du tuple pour les tables standard et leurs index
-
Entrée :
relation_name
(texte) — Le nom de la relation -
Sortie : colonnes cohérentes avec celles renvoyées par la fonction pgstattuple_approx dans Aurora PostgreSQL
rds_aurora.limitless_pgstattuple_approx(
relation_name
,subcluster_id
)-
Objectif : Extraire des statistiques approximatives au niveau du tuple pour les tables de référence, les tables partitionnées et les tables de catalogue (y compris leurs index)
-
Entrée :
-
relation_name
(texte) — Le nom de la relation -
subcluster_id
(text) — L'ID du sous-cluster du nœud où les statistiques doivent être extraites
-
-
Sortie :
-
Pour les tables de référence et de catalogue (y compris leurs index), les colonnes sont cohérentes avec celles d'Aurora PostgreSQL.
-
Pour les tables fragmentées, les statistiques représentent uniquement la partition de la table fragmentée résidant sur le sous-cluster spécifié.
-
-
Note
Actuellement, la base de données Aurora PostgreSQL Limitless ne prend pas en charge pgstattuple
l'extension sur les vues matérialisées, les tables TOAST ou les tables temporaires.
Dans la base de données Aurora PostgreSQL Limitless, vous devez fournir l'entrée sous forme de texte, bien qu'Aurora PostgreSQL prenne en charge d'autres formats.
Clés étrangères
Les contraintes de clé étrangère (FOREIGN KEY
) sont prises en charge avec certaines restrictions :
-
CREATE TABLE
avec n'FOREIGN KEY
est pris en charge que pour les tables standard. Pour créer un tableau fragmenté ou de référence avecFOREIGN KEY
, créez d'abord le tableau sans contrainte de clé étrangère. Modifiez-le ensuite à l'aide de l'instruction suivante :ALTER TABLE ADD CONSTRAINT;
-
La conversion d'une table standard en table fragmentée ou en table de référence n'est pas prise en charge lorsque la table est soumise à une contrainte de clé étrangère. Supprimez la contrainte, puis ajoutez-la après la conversion.
-
Les limitations suivantes s'appliquent aux types de tables pour les contraintes de clé étrangère :
-
Une table standard peut avoir une contrainte de clé étrangère par rapport à une autre table standard.
-
Une table fragmentée peut être soumise à une contrainte de clé étrangère si les tables parent et enfant sont colocalisées et si la clé étrangère est un sur-ensemble de la clé de partition.
-
Une table fragmentée peut être soumise à une contrainte de clé étrangère par rapport à une table de référence.
-
Une table de référence peut avoir une contrainte de clé étrangère par rapport à une autre table de référence.
-
Rubriques
Options à clé étrangère
Les clés étrangères sont prises en charge dans la base de données Aurora PostgreSQL Limitless pour certaines options DDL. Le tableau suivant répertorie les options prises en charge et non prises en charge entre les tables de base de données Aurora PostgreSQL Limitless.
Option DDL | Référence à la référence | Découpé à fragmenté (colocalisé) | Déchiqueté pour référence | De norme en norme |
---|---|---|---|---|
|
Oui | Oui | Oui | Oui |
|
Oui | Oui | Oui | Oui |
|
Oui | Oui | Oui | Oui |
|
Oui | Oui | Oui | Oui |
|
Non | Non | Non | Non |
|
Oui | Oui | Oui | Oui |
|
Oui | Oui | Oui | Oui |
|
Oui | Non | Non | Oui |
|
Oui | Oui | Oui | Oui |
|
Oui | Oui | Oui | Oui |
|
Oui | Oui | Oui | Oui |
|
Non | Non | Non | Non |
|
Oui | Non | Non | Oui |
|
Non | Non | Non | Oui |
|
Oui | Oui | Oui | Oui |
|
Oui | Oui | Oui | Oui |
|
Non | Non | Non | Non |
|
Oui | Non | Non | Oui |
Exemples
-
De norme en norme :
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)
-
Découpé à fragmenté (colocalisé) :
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);
-
Déchiqueté pour référence :
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);
-
Référence à référence :
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);
Fonctions
Les fonctions sont prises en charge dans la base de données Aurora PostgreSQL Limitless.
Les fonctions suivantes DDLs sont prises en charge :
- CREATE FUNCTION
-
Vous pouvez créer des fonctions, comme dans Aurora PostgreSQL, à l'exception de la modification de leur volatilité lors de leur remplacement.
Pour plus d'informations, consultez CREATE FUNCTION
dans la documentation PostgreSQL. - ALTER FUNCTION
-
Vous pouvez modifier les fonctions, comme dans Aurora PostgreSQL, à l'exception de la modification de leur volatilité.
Pour plus d'informations, consultez ALTER FUNCTION
dans la documentation de PostgreSQL. - DROP FUNCTION
-
Vous pouvez supprimer des fonctions, comme dans Aurora PostgreSQL.
DROP FUNCTION [ IF EXISTS ]
name
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] [, ...] [ CASCADE | RESTRICT ]Pour plus d'informations, consultez DROP FUNCTION
dans la documentation de PostgreSQL.
Répartition des fonctions
Lorsque toutes les instructions d'une fonction sont ciblées sur une seule partition, il est avantageux de transférer l'ensemble de la fonction vers la partition cible. Le résultat est ensuite retransmis au routeur, au lieu de démêler la fonction du routeur lui-même. La fonctionnalité de transfert des fonctions et des procédures stockées est utile pour les clients qui souhaitent exécuter leur fonction ou leur procédure stockée au plus près de la source de données, à savoir le shard.
Pour distribuer une fonction, créez d'abord la fonction, puis appelez la rds_aurora.limitless_distribute_function
procédure de distribution. Cette fonction utilise la syntaxe suivante :
SELECT rds_aurora.limitless_distribute_function('
function_prototype
', ARRAY['shard_key
'], 'collocating_table
');
La fonction prend les paramètres suivants :
-
— La fonction à distribuer. Ne mentionnez que les arguments d'entrée, et aucun des arguments de sortie.function_prototype
Si l'un des arguments est défini en tant que
OUT
paramètres, n'incluez pas son type dans les arguments defunction_prototype
. -
ARRAY['
— Liste des arguments de fonction identifiés comme étant la clé de partition de la fonction.shard_key
'] -
— Le tableau fragmenté qui contient la plage de données sur la partition cible.collocating_table
Pour identifier la partition sur laquelle exécuter cette fonction, le système prend l'ARRAY['
argument, le hache et trouve la partition shard_key
']
qui héberge la plage contenant cette valeur de hachage.collocating_table
- Restrictions
-
Lorsque vous distribuez une fonction ou une procédure, elle ne traite que les données délimitées par la plage de clés de cette partition. Dans les cas où la fonction ou la procédure essaie d'accéder aux données d'une autre partition, les résultats renvoyés par la fonction ou procédure distribuée seront différents de ceux renvoyés par une fonction ou procédure non distribuée.
Par exemple, vous créez une fonction contenant des requêtes qui toucheront plusieurs partitions, puis vous appelez la
rds_aurora.limitless_distribute_function
procédure pour la distribuer. Lorsque vous invoquez cette fonction en fournissant des arguments pour une clé de partition, il est probable que les résultats de son exécution seront limités par les valeurs présentes dans cette partition. Ces résultats sont différents de ceux produits sans distribution de la fonction. - Exemples
-
Considérons la fonction suivante
func
où nous avons le tableau fragmentécustomers
avec la clé de partition.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; $$;
Maintenant, nous distribuons cette fonction :
SELECT rds_aurora.limitless_distribute_function('func(integer, integer)', ARRAY['c_id'], 'customers');
Vous trouverez ci-dessous des exemples de plans de requêtes.
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)
L'exemple suivant montre une procédure avec des
OUT
paramètresIN
et comme arguments.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;
L'exemple suivant distribue la procédure en utilisant uniquement
IN
des paramètres.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)
Volatilité des fonctions
Vous pouvez déterminer si une fonction est immuable, stable ou volatile en vérifiant sa provolatile
valeur dans la vue pg_procprovolatile
valeur indique si le résultat de la fonction dépend uniquement de ses arguments d'entrée ou s'il est affecté par des facteurs extérieurs.
La valeur est l'une des suivantes :
-
i
— Des fonctions immuables, qui fournissent toujours le même résultat pour les mêmes entrées -
s
— Fonctions stables, dont les résultats (pour les entrées fixes) ne changent pas au cours d'un scan -
v
— Fonctions volatiles, dont les résultats peuvent changer à tout moment. Utilisez-le égalementv
pour les fonctions comportant des effets secondaires, de sorte que les appels vers ces fonctions ne puissent pas être optimisés.
Les exemples suivants présentent des fonctions volatiles.
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)
La modification de la volatilité d'une fonction existante n'est pas prise en charge dans la base de données Aurora PostgreSQL Limitless. Cela s'applique à la fois aux CREATE OR REPLACE FUNCTION
commandes ALTER FUNCTION
et, comme indiqué dans les exemples suivants.
-- 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;
Nous vous recommandons vivement d'attribuer les volatilités correctes aux fonctions. Par exemple, si votre fonction utilise plusieurs tables ou fait référence SELECT
à des objets de base de données, ne la définissez pas commeIMMUTABLE
. Si le contenu de la table change, l'immuabilité est rompue.
Aurora PostgreSQL SELECT
autorise des fonctions immuables internes, mais les résultats peuvent être incorrects. La base de données Aurora PostgreSQL Limitless peut renvoyer à la fois des erreurs et des résultats incorrects. Pour plus d'informations sur la volatilité des fonctions, consultez la section Catégories de volatilité des fonctions
Séquences
Les séquences nommées sont des objets de base de données qui génèrent des numéros uniques par ordre croissant ou décroissant. CREATE SEQUENCE
crée un nouveau générateur de numéros de séquence. L'unicité des valeurs de séquence est garantie.
Lorsque vous créez une séquence nommée dans la base de données Aurora PostgreSQL Limitless, un objet de séquence distribué est créé. La base de données Aurora PostgreSQL Limitless distribue ensuite des fragments de valeurs de séquence ne se chevauchant pas sur tous les routeurs de transactions distribués (routeurs). Les segments sont représentés sous forme d'objets de séquence locaux sur les routeurs ; par conséquent, les opérations de séquence telles que nextval
et currval
sont exécutées localement. Les routeurs fonctionnent indépendamment et demandent de nouveaux fragments à partir de la séquence distribuée en cas de besoin.
Pour plus d'informations sur les séquences, consultez CREATE SEQUENCE
Rubriques
Demande d'un nouveau morceau
Vous configurez la taille des segments alloués sur les routeurs à l'aide du rds_aurora.limitless_sequence_chunk_size
paramètre. La valeur par défaut est 250000
. Chaque routeur possède initialement deux segments : actif et réservé. Les fragments actifs sont utilisés pour configurer les objets de séquence locaux (paramètre minvalue
etmaxvalue
), et les fragments réservés sont stockés dans une table de catalogue interne. Lorsqu'un segment actif atteint la valeur minimale ou maximale, il est remplacé par le segment réservé. Pour ce faire, c'ALTER SEQUENCE
est utilisé en interne, AccessExclusiveLock
c'est-à-dire acquis.
Les programmes de travail en arrière-plan s'exécutent toutes les 10 secondes sur les nœuds du routeur pour scanner les séquences à la recherche de fragments réservés utilisés. Si un fragment utilisé est trouvé, le travailleur demande un nouveau morceau à partir de la séquence distribuée. Assurez-vous de définir une taille de fragment suffisamment grande pour que les travailleurs en arrière-plan aient suffisamment de temps pour en demander de nouveaux. Les demandes à distance ne se produisent jamais dans le contexte des sessions utilisateur, ce qui signifie que vous ne pouvez pas demander directement une nouvelle séquence.
Limites
Les limitations suivantes s'appliquent aux séquences dans la base de données Aurora PostgreSQL Limitless :
-
Le
pg_sequence
catalogue, lapg_sequences
fonction et l'SELECT * FROM
instruction affichent tous uniquement l'état de séquence local, et non l'état distribué.sequence_name
-
Il est garanti que les valeurs de séquence sont uniques et qu'elles seront monotones au cours d'une session. Mais elles peuvent être désordonnées avec des
nextval
instructions exécutées dans d'autres sessions, si ces sessions sont connectées à d'autres routeurs. -
Assurez-vous que la taille de séquence (nombre de valeurs disponibles) est suffisamment grande pour être répartie sur tous les routeurs. Utilisez le
rds_aurora.limitless_sequence_chunk_size
paramètre pour configurer lechunk_size
. (Chaque routeur comporte deux segments.) -
L'
CACHE
option est prise en charge, mais le cache doit être inférieur àchunk_size
.
Options non prises en charge
Les options suivantes ne sont pas prises en charge pour les séquences dans la base de données Aurora PostgreSQL Limitless.
- Fonctions de manipulation de séquence
-
La
setval
fonction n'est pas prise en charge. Pour plus d'informations, consultez la section Fonctions de manipulation de séquencesdans la documentation de PostgreSQL. - CRÉER UNE SÉQUENCE
-
Les options suivantes ne sont pas prises en charge.
CREATE [{ TEMPORARY | TEMP} | UNLOGGED] SEQUENCE [[ NO ] CYCLE]
Pour plus d'informations, consultez CREATE SEQUENCE
dans la documentation de PostgreSQL. - MODIFIER LA SÉQUENCE
-
Les options suivantes ne sont pas prises en charge.
ALTER SEQUENCE [[ NO ] CYCLE]
Pour plus d'informations, consultez ALTER SEQUENCE
dans la documentation de PostgreSQL. - ALTER TABLE
-
La
ALTER TABLE
commande n'est pas prise en charge pour les séquences.
Exemples
- CRÉER/SUPPRIMER UNE SÉQUENCE
-
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
- MODIFIER LA SÉQUENCE
-
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)
- Fonctions de manipulation de séquence
-
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)
Vues de séquence
La base de données Aurora PostgreSQL Limitless fournit les vues suivantes pour les séquences.
- rds_aurora.séquence_distribute_illimitée
-
Cette vue montre l'état et la configuration d'une séquence distribuée. Les
cache
colonnesminvalue
maxvalue
,start
,inc
, et ont la même signification que dans la vue pg_sequenceset indiquent les options avec lesquelles la séquence a été créée. La lastval
colonne indique la dernière valeur allouée ou réservée dans un objet de séquence distribuée. Cela ne signifie pas que la valeur a déjà été utilisée, car les routeurs conservent les segments de séquence localement.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
-
Cette vue montre les métadonnées de séquence distribuées et agrège les métadonnées de séquence provenant des nœuds du cluster. Il utilise les colonnes suivantes :
-
subcluster_id
— L'ID du nœud du cluster qui possède un segment. -
Fragment actif : fragment d'une séquence en cours d'utilisation (
active_minvalue
,active_maxvalue
). -
Bloc réservé — Le segment local qui sera utilisé ensuite (
reserved_minvalue
,reserved_maxvalue
). -
local_last_value
— Dernière valeur observée à partir d'une séquence locale. -
chunk_size
— La taille d'un morceau, telle que configurée lors de sa création.
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)
-
Résolution des problèmes de séquence
Les problèmes suivants peuvent survenir avec les séquences.
- La taille des morceaux n'est pas assez grande
-
Si la taille des fragments n'est pas définie suffisamment et que le taux de transaction est élevé, les travailleurs en arrière-plan n'auront peut-être pas le temps de demander de nouveaux fragments avant que les segments actifs ne soient épuisés. Cela peut entraîner des conflits et des événements d'attente tels que
LIMITLESS:AuroraLimitlessSequenceReplace
,LWLock:LockManager
Lockrelation
, etLWlock:bufferscontent
.Augmentez la valeur du paramètre
rds_aurora.limitless_sequence_chunk_size
. - Le cache de séquence est défini trop haut
-
Dans PostgreSQL, la mise en cache des séquences s'effectue au niveau de la session. Chaque session alloue des valeurs de séquence successives lors d'un accès à l'objet de séquence et augmente le nombre de valeurs de l'objet de
last_value
séquence en conséquence. Ensuite, les utilisations suivantes de cettenextval
session renvoient simplement les valeurs préallouées sans toucher à l'objet de séquence.Tous les numéros alloués mais non utilisés au cours d'une session sont perdus à la fin de cette session, ce qui entraîne des « trous » dans la séquence. Cela peut rapidement consommer le sequence_chunk et entraîner des conflits et des événements d'attente tels que
LIMITLESS:AuroraLimitlessSequenceReplace
,, et.LWLock:LockManager
Lockrelation
LWlock:bufferscontent
Réduisez le paramètre du cache de séquences.
La figure suivante montre les événements d'attente provoqués par des problèmes de séquence.
