Gérer les noms des tables

Cette page explique comment renommer des tables et comment ajouter, utiliser et supprimer des synonymes de table.

Options pour renommer les tables et utiliser des synonymes

Vous pouvez utiliser l'instruction ALTER TABLE pour effectuer les opérations suivantes:

Fonctionnement du changement de nom des tables à l'aide de synonymes

Un scénario courant consiste à renommer une table et à ajouter un synonyme contenant l'ancien nom de la table. Après avoir renommé la table, vous pouvez mettre à jour les applications pour qu'elles utilisent le nouveau nom dans votre planification. Pendant cette période, il est possible que certaines applications utilisent l'ancien nom et d'autres le nouveau.

Après avoir mis à jour toutes vos applications pour qu'elles utilisent le nouveau nom, nous vous recommandons de supprimer le synonyme. Bien que l'utilisation d'un synonyme n'affecte pas les performances, vous ne pouvez pas réutiliser l'ancien nom tant que le synonyme n'a pas été supprimé.

Les synonymes sont stockés dans le schéma en tant qu'objet synonym. Vous ne pouvez avoir qu'un seul synonyme par table.

Pour en savoir plus, consultez la section Renommer une table et ajouter un synonyme.

Fonctionnement du remplacement du nom des tables

Lorsque vous devez permuter des noms entre deux tables, vous pouvez enchaîner des instructions RENAME TO pour renommer deux tables dans la même instruction. Cela vous permet d'associer des applications à une autre table, sans interruption.

Pour en savoir plus, consultez la section Intervertir les noms de tables.

Fonctionnement du changement de nom des tables

Lorsque vous renommez une table, Spanner modifie son nom dans son schéma. Lorsque vous renommez une table, toutes les tables enfants sont entrelacées avec le nouveau nom de la table. Le changement de nom des tables modifie également les références à la table pour les éléments suivants:

  • Index
  • Clés étrangères
  • Modifier les flux
  • Contrôle précis des accès

Spanner ne met pas automatiquement à jour les vues pour utiliser le nouveau nom de table.

Pour en savoir plus, consultez Renommer une table.

Limites concernant le changement de nom des tables

Le renommage des tables présente les limites suivantes:

  • Vous ne pouvez pas renommer une table avec le nom d'une colonne de cette table si elle est entrelacée dans une autre table.
  • Si la table comporte une vue, vous pouvez la supprimer et la recréer après avoir renommé la table.

Fonctionnement des synonymes

Vous pouvez créer une table avec un synonyme ou modifier une table pour y ajouter un synonyme sans avoir à la renommer. Cela peut être utile, par exemple, si vous souhaitez utiliser une base de données à la fois pour un environnement de production et un environnement de test.

Pour en savoir plus, consultez Ajouter un synonyme à une table.

Autorisations

Pour renommer une table ou y ajouter un synonyme, vous devez disposer de l'autorisation spanner.databases.updateDdl. Pour vérifier ou modifier vos autorisations, consultez Accorder des autorisations aux comptes principaux.

Renommer un tableau et ajouter un synonyme

GoogleSQL

Utilisez ALTER TABLE RENAME TO ADD SYNONYM pour renommer une table et ajouter un synonyme.

  ALTER TABLE table_name RENAME TO new_table_name, ADD SYNONYM table_name;

PostgreSQL

Utilisez ALTER TABLE RENAME WITH ADD SYNONYM pour renommer une table et ajouter un synonyme.

  ALTER TABLE table_name RENAME WITH SYNONYM TO new_table_name;

L'exemple suivant montre comment renommer une table et ajouter un synonyme. Par exemple, si vous créez une table avec le LDD suivant:

GoogleSQL

  CREATE TABLE Singers (
      SingerId INT64 NOT NULL,
      SingerName STRING(1024)
  ), PRIMARY KEY (SingerId);

PostgreSQL

  CREATE TABLE singers (
      singer_id BIGINT,
      singer_name VARCHAR(1024),
      PRIMARY KEY (singer_id));

Vous pouvez envoyer la requête LDD suivante pour renommer la table et déplacer le nom existant vers l'objet synonym.

GoogleSQL

  ALTER TABLE Singers RENAME TO SingersNew, ADD SYNONYM Singers;

PostgreSQL

  ALTER TABLE singers RENAME WITH SYNONYM TO singers_new;

Intervertir les noms des tables

L'instruction LDD suivante modifie les noms de plusieurs tables de manière atomique. Cela est utile lorsque vous permutez les noms entre une ou plusieurs paires de tables.

GoogleSQL

Utilisez RENAME TABLE.

  RENAME TABLE old_name1 TO new_name1 [,old_name2 TO new_name2 ...];

PostgreSQL

Utilisez ALTER TABLE RENAME TO.

  ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name1
        RENAME TO new_table_name1
        [, ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name2
              RENAME TO new_table_name2 ...];

L'exemple suivant montre comment permuter les noms de deux tables. Cela nécessite que la première table soit renommée en un nom temporaire, que la deuxième table soit renommée avec le nom de la première table, puis que la première table soit renommée avec le nom de la deuxième table.

Si vous avez créé les deux tables suivantes:

GoogleSQL

  CREATE TABLE Singers (
        SingerId INT64 NOT NULL,
        SingerName STRING(1024)
        ), PRIMARY KEY (SingerId);

  CREATE TABLE SingersNew (
        SingerId INT64 NOT NULL,
        FirstName STRING(1024),
        MiddleName STRING(1024),
        LastName STRING(1024)
        ), PRIMARY KEY (SingerId);

PostgreSQL

  CREATE TABLE singers (
        singer_id BIGINT,
        singer_name VARCHAR(1024),
        PRIMARY KEY (singer_id)
        );

  CREATE TABLE singers_new (
        singer_id BIGINT,
        first_name VARCHAR(1024),
        middle_name VARCHAR(1024),
        last_name VARCHAR(1024)
        PRIMARY KEY (singer_id)
        );

Vous pouvez utiliser la requête LDD suivante pour permuter les noms de table:

GoogleSQL

  RENAME TABLE Singers TO Temp, SingersNew TO Singers, Temp TO SingersNew;

PostgreSQL

  ALTER TABLE singers RENAME TO temp,
        ALTER TABLE singers_new RENAME TO singers,
        ALTER TABLE temp RENAME TO singers_new;

Une fois l'instruction LDD appliquée, les noms des tables sont échangés:

GoogleSQL

  CREATE TABLE Singers (
        SingerId INT64 NOT NULL,
        FirstName STRING(1024),
        MiddleName STRING(1024),
        LastName STRING(1024)
        ), PRIMARY KEY (SingerId);

  CREATE TABLE SingersNew (
        SingerId INT64 NOT NULL,
        SingerName STRING(1024)
        ), PRIMARY KEY (SingerId);

PostgreSQL

  CREATE TABLE singers (
        singer_id BIGINT,
        first_name VARCHAR(1024),
        middle_name VARCHAR(1024),
        last_name VARCHAR(1024)
        PRIMARY KEY (singer_id)
        );

  CREATE TABLE singers_new (
        singer_id BIGINT,
        singer_name VARCHAR(1024),
        PRIMARY KEY (singer_id)
        );

Renommer une table

Pour renommer une table, utilisez la syntaxe suivante:

GoogleSQL

Utilisez l'instruction ALTER NAME ou RENAME TABLE.

  ALTER TABLE table_name RENAME TO new_table_name;
  RENAME TABLE table_name TO new_table_name;

PostgreSQL

Utilisez l'instruction ALTER TABLE RENAME TO.

  ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name
        RENAME TO new_table_name;

L'exemple suivant montre une requête LDD qui renomme la table:

GoogleSQL

  RENAME TABLE Singers TO SingersNew;

PostgreSQL

  ALTER TABLE singers RENAME TO singers_new;

Ajouter un synonyme à une table

Pour ajouter un synonyme à une table:

GoogleSQL

  ALTER TABLE table_name ADD SYNONYM synonym;

PostgreSQL

  ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name ADD SYNONYM synonym;

L'exemple suivant montre une requête LDD qui ajoute un synonyme à la table:

GoogleSQL

  ALTER TABLE Singers ADD SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers ADD SYNONYM singers_test;

Créer une table avec un synonyme

Pour créer une table avec un synonyme, procédez comme suit:

GoogleSQL

Utilisez CREATE TABLE SYNONYM synonym_name.

  CREATE TABLE table_name (
      ...
      SYNONYM (synonym)
  ), PRIMARY KEY (primary_key);

PostgreSQL

Utilisez CREATE TABLE SYNONYM synonym_name.

  CREATE TABLE table_name (
      ...
      SYNONYM (synonym)),
      PRIMARY KEY (primary_key));

L'exemple suivant crée une table et ajoute un synonyme.

GoogleSQL

  # The table's name is Singers and the synonym is Artists.
  CREATE TABLE Singers (
      SingerId INT64 NOT NULL,
      SingerName STRING(1024),
      SYNONYM (Artists)
  ), PRIMARY KEY (SingerId);

PostgreSQL

  # The table's name is singers and the synonym is artists.
  CREATE TABLE singers (
      singer_id BIGINT,
      singer_name VARCHAR(1024),
      SYNONYM (artists),
      PRIMARY KEY (singer_id));

Supprimer un synonyme d'un tableau

GoogleSQL

Utilisez ALTER TABLE DROP SYNONYM pour supprimer le synonyme de la table.

  ALTER TABLE table_name DROP SYNONYM synonym;

PostgreSQL

Utilisez ALTER TABLE DROP SYNONYM pour supprimer le synonyme de la table.

  ALTER TABLE [ IF EXISTS ] [ ONLY ] table_name DROP SYNONYM synonym;

L'exemple suivant montre une requête LDD qui supprime le synonyme de la table:

GoogleSQL

  ALTER TABLE Singers DROP SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers DROP SYNONYM singers_test;