Gerenciar nomes de tabelas

Nesta página, descrevemos como renomear tabelas e como adicionar, usar e remover sinônimos delas.

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

Use 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, é possível atualizar os aplicativos para usar o novo nome na sua 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 que você remova o sinônimo. Embora ter um sinônimo não afete o desempenho, não é possível usar o nome antigo em outro lugar até que ele seja descartado.

Os sinônimos são armazenados no esquema como um objeto synonym. Você só pode ter um sinônimo em uma tabela.

Para saber mais, consulte Renomear uma tabela e adicionar um sinônimo.

Como funciona a troca de nomes de tabelas

Quando você precisar trocar nomes entre duas tabelas, é possível encadear instruções RENAME TO para renomear duas tabelas na mesma instrução. Isso permite vincular aplicativos a uma tabela diferente sem interrupções.

Saiba mais em Trocar nomes de tabelas.

Como funciona a renomeação de tabelas

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

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

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

Para saber mais, 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 para o nome de uma coluna nessa tabela se ela estiver intercalada em outra.
  • Se a tabela tiver uma visualização, é recomendável descartar e recriá-la depois de renomear a tabela.

Como funcionam os sinônimos

É possível criar uma nova tabela com um sinônimo ou alterar uma tabela para adicionar um sinônimo sem renomeá-la. Um cenário para fazer isso é se 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 ela, você precisa da permissão spanner.databases.updateDdl. Para verificar ou editar suas permissões, consulte Conceder permissões aos 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 a 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 seguinte solicitação DDL 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 nomes de 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 requer que a primeira tabela seja renomeada com um nome temporário, a segunda tabela seja renomeada para o nome da primeira e a primeira tabela seja renomeada com 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)
        );

É 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 remove o sinônimo da tabela:

GoogleSQL

  ALTER TABLE Singers DROP SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers DROP SYNONYM singers_test;