Gestisci i nomi delle tabelle

Questa pagina descrive come rinominare le tabelle e come aggiungere, utilizzare ed eliminare i sinonimi delle tabelle nei database con dialetto GoogleSQL e PostgreSQL.

Opzioni per la ridenominazione e i sinonimi delle tabelle

Puoi utilizzare l'istruzione ALTER TABLE per:

Come funziona la ridenominazione delle tabelle con i sinonimi

Uno scenario comune è rinominare una tabella e aggiungere un sinonimo che contenga il vecchio nome della tabella. Dopo aver rinominato la tabella, puoi aggiornare le applicazioni in modo che utilizzino il nuovo nome nella pianificazione. Durante questo periodo, è possibile che alcune applicazioni utilizzino il vecchio nome e altre il nuovo.

Dopo aver aggiornato tutte le applicazioni in modo che utilizzino il nuovo nome, ti consigliamo di rimuovere il sinonimo. Anche se avere un sinonimo non influisce sul rendimento, non puoi utilizzare il vecchio nome altrove finché il sinonimo non viene eliminato.

I sinonimi vengono archiviati nello schema come oggetto synonym. Puoi avere un solo sinonimo in una tabella.

Per saperne di più, vedi Rinominare una tabella e aggiungere un sinonimo.

Come funziona lo scambio dei nomi delle tabelle

Quando devi scambiare i nomi tra due tabelle, puoi concatenare le istruzioni RENAME TO per rinominare due tabelle nella stessa istruzione. In questo modo puoi collegare le applicazioni a una tabella diversa senza interruzioni.

Per saperne di più, consulta Scambiare i nomi delle tabelle.

Come funziona la ridenominazione delle tabelle

Quando rinomini una tabella, Spanner modifica il nome della tabella nello schema della tabella. Se rinomini una tabella, le tabelle secondarie vengono intercalate con il nuovo nome della tabella. La ridenominazione della tabella modifica anche i riferimenti alla tabella per quanto segue:

  • Indici
  • Chiavi esterne
  • Modifiche in tempo reale
  • Controllo dell'accesso granulare (FGAC)

Spanner non aggiorna automaticamente le viste per utilizzare il nuovo nome della tabella.

Per ulteriori informazioni, vedi Rinominare una tabella.

Limitazioni relative alla ridenominazione delle tabelle

La ridenominazione delle tabelle presenta le seguenti limitazioni:

  • Non puoi rinominare una tabella con il nome di una colonna della tabella se la tabella è interleaved in un'altra tabella.
  • Non puoi rinominare gli indici. Per modificare il nome di un indice, eliminalo e ricrealo con un nuovo nome.
  • Se la tabella ha una visualizzazione, ti consigliamo di eliminarla e ricrearla dopo aver rinominato la tabella.

Come funzionano i sinonimi

Puoi creare una nuova tabella con un sinonimo o modificare una tabella per aggiungerne uno senza rinominarla. Uno scenario in cui potresti volerlo fare è se vuoi utilizzare un database sia per un ambiente di produzione che per un ambiente di test.

Per maggiori informazioni, vedi Aggiungere un sinonimo a una tabella.

Autorizzazioni

Per rinominare una tabella o aggiungere un sinonimo a una tabella, devi disporre dell'autorizzazione spanner.databases.updateDdl. Per controllare o modificare le autorizzazioni, vedi Concedere autorizzazioni ai principal.

Rinominare una tabella e aggiungere un sinonimo

GoogleSQL

Utilizza ALTER TABLE RENAME TO ADD SYNONYM per rinominare una tabella e aggiungere un sinonimo.

  ALTER TABLE table_name RENAME TO new_table_name, ADD SYNONYM table_name;

PostgreSQL

Utilizza ALTER TABLE RENAME WITH ADD SYNONYM per rinominare una tabella e aggiungere un sinonimo.

  ALTER TABLE table_name RENAME WITH SYNONYM TO new_table_name;

Il seguente esempio mostra come rinominare una tabella e aggiungere un sinonimo. Ad esempio, se crei una tabella con il seguente DDL:

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));

Puoi effettuare la seguente richiesta DDL per rinominare la tabella e spostare il nome esistente nell'oggetto synonym.

GoogleSQL

  ALTER TABLE Singers RENAME TO SingersNew, ADD SYNONYM Singers;

PostgreSQL

  ALTER TABLE singers RENAME WITH SYNONYM TO singers_new;

Invertire i nomi delle tabelle

La seguente istruzione DDL modifica i nomi di più tabelle in modo atomico. Questa opzione è utile quando si scambiano i nomi tra una o più coppie di tabelle.

GoogleSQL

Utilizza RENAME TABLE.

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

PostgreSQL

Utilizza 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'esempio seguente mostra come scambiare i nomi di due tabelle. Ciò richiede che la prima tabella venga rinominata con un nome temporaneo, la seconda tabella venga rinominata con il nome della prima tabella, quindi la prima tabella venga rinominata con il nome della seconda tabella.

Se hai creato due tabelle come mostrato di seguito:

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)
        );

Puoi utilizzare la seguente richiesta DDL per scambiare i nomi delle tabelle:

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;

Dopo l'applicazione dell'istruzione DDL, i nomi delle tabelle vengono scambiati, come mostrato di seguito:

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)
        );

Rinominare una tabella

Per rinominare una tabella, utilizza la seguente sintassi:

GoogleSQL

Utilizza l'istruzione ALTER NAME o RENAME TABLE.

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

PostgreSQL

Utilizza l'istruzione ALTER TABLE RENAME TO.

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

Il seguente esempio mostra una richiesta DDL che rinomina la tabella:

GoogleSQL

  RENAME TABLE Singers TO SingersNew;

PostgreSQL

  ALTER TABLE singers RENAME TO singers_new;

Aggiungere un sinonimo a una tabella

Per aggiungere un sinonimo a una tabella:

GoogleSQL

  ALTER TABLE table_name ADD SYNONYM synonym;

PostgreSQL

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

Il seguente esempio mostra una richiesta DDL che aggiunge un sinonimo alla tabella:

GoogleSQL

  ALTER TABLE Singers ADD SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers ADD SYNONYM singers_test;

Crea una tabella con un sinonimo

Per creare una tabella con un sinonimo:

GoogleSQL

Utilizza CREATE TABLE SYNONYM synonym_name.

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

PostgreSQL

Utilizza CREATE TABLE SYNONYM synonym_name.

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

L'esempio seguente crea una tabella e aggiunge un sinonimo.

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));

Rimuovere un sinonimo da una tabella

GoogleSQL

Utilizza ALTER TABLE DROP SYNONYM per rimuovere il sinonimo dalla tabella.

  ALTER TABLE table_name DROP SYNONYM synonym;

PostgreSQL

Utilizza ALTER TABLE DROP SYNONYM per rimuovere il sinonimo dalla tabella.

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

Il seguente esempio mostra una richiesta DDL che elimina il sinonimo dalla tabella:

GoogleSQL

  ALTER TABLE Singers DROP SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers DROP SYNONYM singers_test;