Gérer les noms de tables

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

Options de changement de nom et de synonymes des tables

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

Fonctionnement du changement de nom d'une table à 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 selon votre programmation. Au cours de cette période, il est possible que certaines applications utilisent l'ancien nom et d'autres le nouveau.

Une fois que vous avez mis à jour toutes vos applications pour utiliser le nouveau nom, nous vous recommandons de supprimer le synonyme. Bien qu'un synonyme n'ait aucune incidence sur les performances, vous ne pouvez pas utiliser l'ancien nom ailleurs tant qu'il 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 Renommer une table et ajouter un synonyme.

Fonctionnement du changement de nom de table

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

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

Fonctionnement du changement de nom d'une table

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

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

Spanner ne met pas automatiquement à jour les vues pour qu'elles utilisent le nouveau nom de table.

Pour en savoir plus, consultez Renommer une table.

Limites concernant le changement de nom des tables

Le changement de nom d'une table présente les limites suivantes:

  • Vous ne pouvez pas renommer une table en utilisant le nom d'une colonne de cette table si celle-ci est entrelacée dans une autre table.
  • Si la table dispose d'une vue, vous pouvez supprimer cette vue 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 la renommer. Cela peut se produire 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 ajouter un synonyme à une table, vous devez disposer de l'autorisation spanner.databases.updateDdl. Pour vérifier ou modifier vos autorisations, consultez Accorder des autorisations aux principes.

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 effectuer 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 lors du permutation des 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 échanger les noms de deux tables. Cela nécessite que la première table soit renommée avec un nom temporaire, que la deuxième table soit renommée le nom de la première table, puis que la première table soit renommée sous le nom de la deuxième table.

Si vous avez créé deux tables comme suit:

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 échanger les noms des tables:

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 de table 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 à un tableau

Pour ajouter un synonyme à un tableau:

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:

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;