Gerenciar nomes de tabelas

Esta página descreve como renomear tabelas e adicionar, usar e soltar tabelas sinônimos.

Opções para renomeação de tabelas e sinônimos

É possível usar a instrução ALTER TABLE para fazer o seguinte:

Como funciona a renomeação de tabelas com sinônimos

Um cenário comum é renomear uma tabela e adicionar um sinônimo que contenha o nome da tabela antiga. Depois de renomear a tabela, atualize os aplicativos para usar o novo nome na programação. Durante esse período, é possível que alguns aplicativos usam o nome antigo e outros usam o novo.

Depois de atualizar todos os aplicativos para usar o novo nome, recomendamos que você faça o seguinte: você remove o sinônimo. Embora ter um sinônimo não afete o desempenho, você não pode usar o nome antigo em outro lugar até que o sinônimo seja descartado.

Os sinônimos são armazenados no esquema como um objeto synonym. Só é possível ter um sinônimo em uma tabela.

Para mais informações, consulte Renomear uma tabela e adicionar um sinônimo.

Como funciona a troca de nomes de tabelas

Para trocar nomes entre duas tabelas, faça o encadeamento instruções RENAME TO para renomear duas tabelas na mesma instrução. Isso permite vincular aplicativos a uma tabela diferente sem interrupções.

Para mais informações, consulte Trocar nomes de tabelas.

Como funciona a renomeação de tabelas

Quando você renomeia uma tabela, o Spanner altera o nome dela no esquema dessa tabela. Renomear uma tabela intercala todas as tabelas filhas com o novo nome. A renomeação da tabela também altera referências à tabela para o seguinte:

  • Índices
  • Chaves estrangeiras
  • Alterar streams
  • Controle de acesso refinado (FGAC, na sigla em inglês)

O Spanner não atualiza automaticamente as visualizações para usar o novo nome da tabela.

Para mais informações, consulte Renomear uma tabela.

Limitações de renomeação de tabelas

A renomeação de tabelas tem as seguintes limitações:

  • Não é possível renomear uma tabela com o nome de uma coluna nela se a tabela estiver intercalada em outra.
  • Se a tabela tiver uma visualização, talvez seja melhor descartar e recriar a visualização depois de renomear a tabela.

Como os sinônimos funcionam

Você pode criar uma nova tabela com um sinônimo ou alterar uma tabela para adicionar um sinônimo a ela sem renomear a tabela. Um cenário em que você pode querer fazer isso é quando você quer usar um banco de dados para um ambiente de produção e teste.

Para mais informações, consulte Adicionar um sinônimo a uma tabela.

Permissões

Para renomear uma tabela ou adicionar um sinônimo a uma tabela, você precisa das spanner.databases.updateDdl. Para verificar ou editar suas permissões, consulte Conceder permissões a princípios.

Renomear uma tabela e adicionar um sinônimo

GoogleSQL

Use ALTER TABLE RENAME TO ADD SYNONYM para renomear uma tabela e adicionar um sinônimo.

  ALTER TABLE table_name RENAME TO new_table_name, ADD SYNONYM table_name;

PostgreSQL

Usar ALTER TABLE RENAME WITH ADD SYNONYM para renomear uma tabela e adicionar um sinônimo.

  ALTER TABLE table_name RENAME WITH SYNONYM TO new_table_name;

O exemplo a seguir mostra como renomear uma tabela e adicionar um sinônimo. Para exemplo, se você criar uma tabela com a DDL a seguir:

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

É possível fazer a seguinte solicitação DDL para renomear a tabela e mover as ao objeto synonym.

GoogleSQL

  ALTER TABLE Singers RENAME TO SingersNew, ADD SYNONYM Singers;

PostgreSQL

  ALTER TABLE singers RENAME WITH SYNONYM TO singers_new;

Trocar os nomes das tabelas

A instrução DDL a seguir altera os nomes de várias tabelas atomicamente. Isso é útil ao trocar os nomes entre um ou mais pares de tabelas.

GoogleSQL

Use RENAME TABLE.

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

PostgreSQL

Use 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 ...];

O exemplo a seguir mostra como trocar os nomes de duas tabelas. Isso exige que a primeira tabela seja renomeada com um nome temporário, a segunda tabela será renomeada com o nome da primeira tabela, a primeira será renomeada como nome.

Se você tiver criou duas tabelas, da seguinte maneira:

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

É possível usar a seguinte solicitação DDL para trocar os nomes das tabelas:

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;

Depois que a instrução DDL é aplicada, os nomes das tabelas são trocados:

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

Renomear uma tabela

Para renomear uma tabela, use a seguinte sintaxe:

GoogleSQL

Use a instrução ALTER NAME ou RENAME TABLE.

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

PostgreSQL

Use a instrução ALTER TABLE RENAME TO.

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

O exemplo a seguir mostra uma solicitação DDL que renomeia a tabela:

GoogleSQL

  RENAME TABLE Singers TO SingersNew;

PostgreSQL

  ALTER TABLE singers RENAME TO singers_new;

Adicionar um sinônimo a uma tabela

Para adicionar um sinônimo a uma tabela:

GoogleSQL

  ALTER TABLE table_name ADD SYNONYM synonym;

PostgreSQL

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

O exemplo a seguir mostra uma solicitação DDL que adiciona um sinônimo à tabela:

GoogleSQL

  ALTER TABLE Singers ADD SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers ADD SYNONYM singers_test;

Criar uma tabela com um sinônimo

Para criar uma tabela com um sinônimo:

GoogleSQL

Use CREATE TABLE SYNONYM synonym_name.

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

PostgreSQL

Use CREATE TABLE SYNONYM synonym_name.

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

O exemplo a seguir cria uma tabela e adiciona um sinônimo.

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

Remover um sinônimo de uma tabela

GoogleSQL

Use ALTER TABLE DROP SYNONYM para remover o sinônimo da tabela.

  ALTER TABLE table_name DROP SYNONYM synonym;

PostgreSQL

Use ALTER TABLE DROP SYNONYM para remover o sinônimo da tabela.

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

O exemplo a seguir mostra uma solicitação DDL que exclui o sinônimo da tabela:

GoogleSQL

  ALTER TABLE Singers DROP SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers DROP SYNONYM singers_test;