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.
ALTER TABLE APPEND
Ajoute des lignes à une table cible en déplaçant les données à partir d’une table source existante. Les données de la table source sont déplacées vers les colonnes correspondantes de la table cible. L’ordre des colonnes n’importe pas. Une fois que les données ont été correctement ajoutées à la table cible, la table source est vide. ALTERTABLEAPPENDest généralement beaucoup plus rapide qu'une INSERT INTO opération similaireCREATETABLEEN TANT QUE, car les données sont déplacées et non dupliquées.
Note
ALTERTABLEAPPENDdéplace des blocs de données entre la table source et la table cible. Pour améliorer les performances, ALTER TABLE APPEND ne compresse pas le stockage dans le cadre de l'opération d'ajout. Par conséquent, le stockage utilisé augmente provisoirement. Pour récupérer de l’espace, exécutez une opération VACUUM.
Les colonnes ayant le même nom doivent aussi avoir des attributs de colonne identiques. Si la table source ou la table cible contient des colonnes qui n'existent pas dans l'autre table, utilisez les FILLTARGET paramètres IGNOREEXTRA or pour spécifier comment les colonnes supplémentaires doivent être gérées.
Vous ne pouvez pas ajouter une colonne d’identité. Si les deux tables incluent une colonne d’identité, la commande échoue. Si une seule table possède une colonne d'identité, incluez le IGNOREEXTRA paramètre FILLTARGET or. Pour de plus amples informations, veuillez consulter ALTERTABLEAPPENDnotes d'utilisation.
Vous pouvez ajouter une IDENTITY colonne GENERATED BY DEFAULT AS. Vous pouvez mettre à jour les colonnes définies comme GENERATED BY DEFAULT AS IDENTITY avec les valeurs que vous fournissez. Pour de plus amples informations, veuillez consulter ALTERTABLEAPPENDnotes d'utilisation.
La table cible doit être une table permanente. Toutefois, la source peut être une table permanente ou une vue matérialisée configurée pour l’ingestion en streaming. Les deux objets doivent utiliser les mêmes style de distribution et clé de distribution, si l’un ou l’autre a été défini. Si les objets sont triés, les deux objets doivent utiliser le même style de tri et définir les mêmes colonnes comme clés de tri.
Une ALTER TABLE APPEND commande est automatiquement validée dès la fin de l'opération. Elle ne peut pas être annulée. Vous ne pouvez pas courir ALTER TABLE APPEND dans un bloc de transactions (BEGIN... END). Pour plus d’informations sur les transactions, consultez Isolement sérialisable.
Privilèges requis
Selon la ALTER TABLE APPEND commande, l'un des privilèges suivants est requis :
Superuser
Utilisateurs disposant du privilège ALTER TABLE système
Utilisateurs disposant DELETE de SELECT privilèges sur la table source et de INSERT privilèges sur la table cible
Syntaxe
ALTER TABLE target_table_name APPEND FROM [ source_table_name | source_materialized_view_name ] [ IGNOREEXTRA | FILLTARGET ]
L’ajout à partir d’une vue matérialisée fonctionne uniquement dans le cas où votre vue matérialisée est configurée pour Diffusion de l'ingestion vers une vue matérialisée.
Paramètres
- nom_table_cible
-
Nom de la table à laquelle les lignes sont ajoutées. Spécifiez simplement le nom de la table ou choisissez le format nom_schéma.nom_table pour utiliser un schéma spécifique. La table cible doit être une table permanente existante.
- FROMnom_table_source
-
Nom de la table qui fournit les lignes à ajouter. Spécifiez simplement le nom de la table ou choisissez le format nom_schéma.nom_table pour utiliser un schéma spécifique. La table source doit être une table permanente existante.
- FROMsource_materialized_view_name
-
Nom de la vue matérialisée qui fournit les lignes à ajouter. L’ajout à partir d’une vue matérialisée fonctionne uniquement dans le cas où votre vue matérialisée est configurée pour Diffusion de l'ingestion vers une vue matérialisée. La vue matérialisée source doit déjà exister.
- IGNOREEXTRA
-
Mot-clé qui spécifie que si la table source inclut des colonnes qui ne sont pas présentes dans la table cible, les données des colonnes supplémentaires doivent être ignorées. Vous ne pouvez pas l'utiliser IGNOREEXTRA avecFILLTARGET.
- FILLTARGET
-
Mot clé qui indique que si la table cible inclut des colonnes absentes de la table source, les colonnes doivent être remplies avec la valeur de la DEFAULT colonne, si elle a été définie, ouNULL. Vous ne pouvez pas l'utiliser IGNOREEXTRA avecFILLTARGET.
ALTERTABLEAPPENDnotes d'utilisation
ALTERTABLEAPPENDdéplace uniquement les colonnes identiques de la table source vers la table cible. L’ordre des colonnes n’importe pas.
Si la table source ou la table cible contient des colonnes supplémentaires, utilisez l'une FILLTARGET ou IGNOREEXTRA l'autre des règles suivantes :
-
Si la table source contient des colonnes qui n'existent pas dans la table cible, incluezIGNOREEXTRA. La commande ignore les colonnes supplémentaires de la table source.
-
Si la table cible contient des colonnes qui n'existent pas dans la table source, incluezFILLTARGET. La commande remplit les colonnes supplémentaires de la table cible avec la valeur de colonne par défaut ou la IDENTITY valeur, si une telle valeur a été définie, ouNULL.
-
Si la table source et la table cible contiennent des colonnes supplémentaires, la commande échoue. Vous ne pouvez pas utiliser les deux FILLTARGET etIGNOREEXTRA.
Si une colonne ayant le même nom, mais des attributs différents, existe dans les deux tables, la commande échoue. Les colonnes aux noms similaires doivent avoir en commun les attributs suivants :
-
Type de données
-
Taille de colonne
-
Encodage de compression
-
Non null
-
Style de tri
-
Colonnes de clé de tri
-
Style de distribution
-
Colonnes de clé de distribution
Vous ne pouvez pas ajouter une colonne d’identité. Si la table source et la table cible possèdent des colonnes d’identité, la commande échoue. Si seule la table source possède une colonne d'identité, incluez le IGNOREEXTRA paramètre afin que la colonne d'identité soit ignorée. Si seule la table cible possède une colonne d'identité, incluez le FILLTARGET paramètre afin que la colonne d'identité soit remplie conformément à la IDENTITY clause définie pour la table. Pour de plus amples informations, veuillez consulter DEFAULT.
Vous pouvez ajouter une colonne d'identité par défaut à l'ALTERTABLEAPPENDinstruction. Pour de plus amples informations, veuillez consulter CREATE TABLE.
ALTERTABLEAPPENDexemples
Supposons que votre organisation gère une table, SALES _MONTHLY, pour saisir les transactions de vente en cours. Vous souhaitez déplacer les données de la table des transactions vers la SALES table, chaque mois.
Vous pouvez utiliser les TRUNCATE commandes INSERT INTO et les commandes suivantes pour accomplir cette tâche.
insert into sales (select * from sales_monthly); truncate sales_monthly;
Cependant, vous pouvez effectuer la même opération de manière beaucoup plus efficace à l'aide d'une ALTER TABLE APPEND commande.
D’abord, interrogez la table catalogue système PG__ TABLE DEF pour vérifier que les deux tables ont les mêmes colonnes avec des attributs de colonne identiques.
select trim(tablename) as table, "column", trim(type) as type, encoding, distkey, sortkey, "notnull" from pg_table_def where tablename like 'sales%'; table | column | type | encoding | distkey | sortkey | notnull -----------+------------+-----------------------------+----------+---------+---------+-------- sales | salesid | integer | lzo | false | 0 | true sales | listid | integer | none | true | 1 | true sales | sellerid | integer | none | false | 2 | true sales | buyerid | integer | lzo | false | 0 | true sales | eventid | integer | mostly16 | false | 0 | true sales | dateid | smallint | lzo | false | 0 | true sales | qtysold | smallint | mostly8 | false | 0 | true sales | pricepaid | numeric(8,2) | delta32k | false | 0 | false sales | commission | numeric(8,2) | delta32k | false | 0 | false sales | saletime | timestamp without time zone | lzo | false | 0 | false salesmonth | salesid | integer | lzo | false | 0 | true salesmonth | listid | integer | none | true | 1 | true salesmonth | sellerid | integer | none | false | 2 | true salesmonth | buyerid | integer | lzo | false | 0 | true salesmonth | eventid | integer | mostly16 | false | 0 | true salesmonth | dateid | smallint | lzo | false | 0 | true salesmonth | qtysold | smallint | mostly8 | false | 0 | true salesmonth | pricepaid | numeric(8,2) | delta32k | false | 0 | false salesmonth | commission | numeric(8,2) | delta32k | false | 0 | false salesmonth | saletime | timestamp without time zone | lzo | false | 0 | false
Ensuite, regardez la taille de chaque table.
select count(*) from sales_monthly; count ------- 2000 (1 row) select count(*) from sales; count ------- 412,214 (1 row)
Exécutez maintenant la ALTER TABLE APPEND commande suivante.
alter table sales append from sales_monthly;
Regardez à nouveau la taille de chaque table. La MONTHLY table SALES _ compte désormais 0 lignes, et la SALES table a augmenté de 2 000 lignes.
select count(*) from sales_monthly; count ------- 0 (1 row) select count(*) from sales; count ------- 414214 (1 row)
Si la table source comporte plus de colonnes que la table cible, spécifiez le IGNOREEXTRA paramètre. L'exemple suivant utilise le IGNOREEXTRA paramètre pour ignorer les colonnes supplémentaires de la LISTING table SALES _ lors de l'ajout à la SALES table.
alter table sales append from sales_listing ignoreextra;
Si la table cible comporte plus de colonnes que la table source, spécifiez le FILLTARGET paramètre. L'exemple suivant utilise le FILLTARGET paramètre pour renseigner les colonnes de la REPORT table SALES _ qui n'existent pas dans la MONTH table SALES _.
alter table sales_report append from sales_month filltarget;
L'exemple suivant montre comment utiliser une ALTER TABLE APPEND vue matérialisée comme source.
ALTER TABLE target_tbl APPEND FROM my_streaming_materialized_view;
Les noms de table et de vue matérialisée de cet exemple sont des exemples. L’ajout à partir d’une vue matérialisée fonctionne uniquement dans le cas où votre vue matérialisée est configurée pour Diffusion de l'ingestion vers une vue matérialisée. Cela déplace tous les enregistrements de la vue matérialisée source vers une table cible avec le même schéma que la vue matérialisée et laisse la vue matérialisée intacte. Il s’agit du même comportement que lorsque la source des données est une table.