Faça a gestão dos nomes das tabelas

Esta página descreve como mudar o nome das tabelas e como adicionar, usar e eliminar sinónimos de tabelas em bases de dados com o dialeto GoogleSQL e bases de dados com o dialeto PostgreSQL.

Opções para mudar o nome das tabelas e sinónimos

Pode usar a declaração ALTER TABLE para fazer o seguinte:

Como funciona a mudança do nome das tabelas com sinónimos

Um cenário comum é mudar o nome de uma tabela e adicionar um sinónimo que contenha o nome antigo da tabela. Depois de mudar o nome da tabela, pode atualizar as aplicações para usarem o novo nome de acordo com a sua programação. Durante este período, é possível que algumas aplicações usem o nome antigo e outras usem o novo nome.

Depois de atualizar todas as suas aplicações para usarem o novo nome, recomendamos que remova o sinónimo. Embora ter um sinónimo não afete o desempenho, não pode usar o nome antigo noutro local até o sinónimo ser removido.

Os sinónimos são armazenados no esquema como um objeto synonym. Só pode ter um sinónimo numa tabela.

Para mais informações, consulte o artigo Mude o nome de uma tabela e adicione um sinónimo.

Como funciona a troca de nomes de tabelas

Quando precisa de trocar os nomes entre duas tabelas, pode encadear declarações RENAME TO para mudar o nome de duas tabelas na mesma declaração. Isto permite-lhe associar aplicações a uma tabela diferente sem interrupções.

Para mais informações, consulte o artigo Troque os nomes das tabelas.

Como funciona a mudança do nome da tabela

Quando muda o nome de uma tabela, o Spanner altera o nome da tabela no esquema da tabela. A mudança do nome de uma tabela intercala todas as tabelas secundárias com o novo nome da tabela. A mudança do nome da tabela também altera as referências à tabela para o seguinte:

  • Índices
  • Chaves externas
  • Altere as streams
  • Controlo de acesso detalhado (FGAC)

O Spanner não atualiza automaticamente as vistas para usar o novo nome da tabela.

Para mais informações, consulte o artigo Mude o nome de uma tabela.

Limitações da mudança do nome das tabelas

A mudança do nome das tabelas tem as seguintes limitações:

  • Não pode mudar o nome de uma tabela para o nome de uma coluna nessa tabela se a tabela estiver intercalada noutra tabela.
  • Não é possível mudar o nome dos índices. Para alterar o nome de um índice, elimine-o e recrie-o com um novo nome.
  • Se a tabela tiver uma vista, é recomendável eliminar a vista e recriá-la depois de mudar o nome da tabela.

Como funcionam os sinónimos

Pode criar uma nova tabela com um sinónimo ou alterar uma tabela para lhe adicionar um sinónimo sem mudar o nome da tabela. Um cenário em que pode querer fazê-lo é se quiser usar uma base de dados para um ambiente de produção e de teste.

Para mais informações, consulte o artigo Adicione um sinónimo a uma tabela.

Autorizações

Para mudar o nome de uma tabela ou adicionar um sinónimo a uma tabela, precisa da autorização spanner.databases.updateDdl. Para verificar ou editar as suas autorizações, consulte o artigo Conceda autorizações a princípios.

Mude o nome de uma tabela e adicione um sinónimo

GoogleSQL

Use ALTER TABLE RENAME TO ADD SYNONYM para mudar o nome de 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 mudar o nome de uma tabela e adicionar um sinónimo.

  ALTER TABLE table_name RENAME WITH SYNONYM TO new_table_name;

O exemplo seguinte mostra como mudar o nome de uma tabela e adicionar um sinónimo. Por exemplo, se 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));

Pode fazer o seguinte pedido de LDD para mudar o nome da tabela e mover o nome existente para o objeto synonym.

GoogleSQL

  ALTER TABLE Singers RENAME TO SingersNew, ADD SYNONYM Singers;

PostgreSQL

  ALTER TABLE singers RENAME WITH SYNONYM TO singers_new;

Troque os nomes das tabelas

A seguinte declaração DDL altera os nomes de várias tabelas de forma atómica. Isto é útil quando troca 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 seguinte mostra como trocar os nomes de duas tabelas. Isto requer que o nome da primeira tabela seja alterado para um nome temporário, o nome da segunda tabela seja alterado para o nome da primeira tabela e, em seguida, o nome da primeira tabela seja alterado para o nome da segunda tabela.

Se tiver criado duas tabelas, conforme mostrado no exemplo seguinte:

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

Pode usar o seguinte pedido de LDD 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 de aplicar a declaração DDL, os nomes das tabelas são trocados, conforme mostrado no seguinte exemplo:

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

Mude o nome de uma tabela

Para mudar o nome de uma tabela, use a seguinte sintaxe:

GoogleSQL

Use a declaraçã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 declaração ALTER TABLE RENAME TO.

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

O exemplo seguinte mostra um pedido DDL que muda o nome da tabela:

GoogleSQL

  RENAME TABLE Singers TO SingersNew;

PostgreSQL

  ALTER TABLE singers RENAME TO singers_new;

Adicione 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 seguinte mostra um pedido DDL que adiciona um sinónimo à tabela:

GoogleSQL

  ALTER TABLE Singers ADD SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers ADD SYNONYM singers_test;

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

Remova 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 seguinte mostra um pedido DDL que elimina o sinónimo da tabela:

GoogleSQL

  ALTER TABLE Singers DROP SYNONYM SingersTest;

PostgreSQL

  ALTER TABLE singers DROP SYNONYM singers_test;