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:
- Mude o nome de uma tabela e adicione o nome antigo a um sinónimo.
- Trocar os nomes das tabelas.
- Mude o nome de uma única tabela.
- Crie uma nova tabela com um único sinónimo.
- Adicione um único sinónimo a uma tabela sem a renomear.
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
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;