Gerenciar nomes de tabelas

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

Opções para renomear 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 usem o nome antigo e outros o novo.

Depois de atualizar todos os seus aplicativos para usar o novo nome, recomendamos remover o sinônimo. Embora o uso de um sinônimo não afete o desempenho, não é possível usar o nome antigo em outro lugar até que o sinônimo seja removido.

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 nome de tabela

Quando você precisar trocar os nomes entre duas tabelas, é possível encadeiar 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 os nomes das tabelas.

Como funciona a renomeação de tabelas

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

  • Índices
  • Chaves estrangeiras
  • Alterar streams
  • Controle de acesso granular (FGAC)

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 excluí-la e recriar 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 de 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 ela, você precisa da permissão 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

Use 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. Por exemplo, se você criar uma tabela com o seguinte 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));

É possível fazer a solicitação DDL a seguir para renomear a tabela e mover o nome atual para o 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 muda os nomes de várias tabelas de forma atômica. 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 requer que a primeira tabela seja renomeada para um nome temporário, a segunda tabela seja renomeada para o nome da primeira tabela e a primeira tabela seja renomeada para o nome da segunda tabela.

Se você 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)
        );

Use 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 esta 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 de 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;