Gerenciar nomes de tabelas

Esta página descreve como renomear tabelas e como adicionar, usar e descartar sinônimos de tabelas em bancos de dados do dialeto GoogleSQL e do dialeto PostgreSQL.

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 antigo da tabela. Depois de renomear a tabela, você pode 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 usem o novo.

Depois de atualizar todos os aplicativos para usar o novo nome, recomendamos que você remova o sinônimo. Embora ter um sinônimo não afete a performance, não é possível 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

Quando você precisa 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.

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

Como funciona a renomeação de tabelas

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

  • Índices
  • Chaves externas
  • Fluxos de alterações
  • Controle de acesso minucioso (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 da 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 tabela.
  • Não é possível renomear índices. Para mudar o nome de um índice, descarte-o e recrie-o com um novo nome.
  • Se a tabela tiver uma visualização, talvez seja necessário descartar a visualização e recriá-la depois de renomear a tabela.

Como os sinônimos funcionam

É possível 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 fazer isso é se quiser usar um banco de dados para um ambiente de produção e um ambiente 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 uma tabela, você precisa da permissão spanner.databases.updateDdl. Para verificar ou editar suas permissões, consulte Conceder permissões a principais.

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 seguinte solicitação de 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 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 exige que a primeira tabela seja renomeada para um nome temporário, a segunda tabela seja renomeada para o nome da primeira tabela e, em seguida, a primeira tabela seja renomeada para o nome da segunda tabela.

Se você criou duas tabelas, conforme mostrado abaixo:

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 de 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, conforme mostrado abaixo:

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 statement.

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

O exemplo a seguir mostra uma solicitação de 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 de DDL que descarta o sinônimo da tabela:

GoogleSQL

  ALTER TABLE Singers DROP SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers DROP SYNONYM singers_test;