Converter tabelas padrão em tabelas ilimitadas
É possível converter tabelas padrão em tabelas fragmentadas ou de referência. Durante a conversão, os dados são movidos da tabela padrão para a tabela distribuída e, em seguida, a tabela padrão de origem é excluída. Os dados são movidos usando o comando INSERT INTO SELECT FROM
.
Criar tabelas fragmentadas
Você cria tabelas fragmentadas executando o procedimento rds_aurora.limitless_alter_table_type_sharded
em tabelas padrão. Esse procedimento recebe uma tabela padrão e uma lista de colunas e, em seguida, distribui a tabela fornecida usando a lista de colunas como a chave de fragmento. O procedimento é executado de forma síncrona e adquire um bloqueio ACCESS EXCLUSIVE
na tabela.
Depois que o procedimento for concluído com sucesso, a tabela padrão de origem será excluída e uma tabela fragmentada com o mesmo nome ficará disponível.
O procedimento rds_aurora.limitless_alter_table_type_sharded
usa a seguinte sintaxe:
postgres=>
CALL rds_aurora.limitless_alter_table_type_sharded('schema
.table
', ARRAY['shard_key1
', 'shard_key2
', ... 'shard_keyn
']);
O procedimento requer os seguintes parâmetros:
-
schema
: o esquema do banco de dados que contém a tabela a ser fragmentada. Se o esquema não for especificado, o procedimento usa osearch_path
. -
table
: a tabela a ser fragmentada. -
shard_keyn
: uma matriz de colunas da tabela para usar como chave de fragmento.Os valores da chave de fragmento são literais de string e, portanto, diferenciam maiúsculas de minúsculas. Se uma chave de fragmento contiver aspas simples ('), use outra aspa simples de escape. Por exemplo, se uma coluna da tabela tiver o nome
customer's id
, usecustomer''s id
como chave de fragmento. Barras invertidas (\) e aspas duplas (") não precisam de escape.
nota
Todas as chaves primárias e únicas devem incluir a chave de fragmento. Isso significa que a chave de fragmento é um subconjunto da chave primária ou única.
Em tabelas fragmentadas, a restrição CHECK
não é compatível com expressões.
Para ter mais informações, consulte Restrições.
Como criar uma tabela fragmentada
O exemplo a seguir mostra como criar a tabela fragmentada customer
com a chave de fragmento customer_id
.
-
Crie a tabela padrão.
CREATE TABLE customer (customer_id INT PRIMARY KEY NOT NULL, zipcode INT, email VARCHAR);
-
Converta a tabela padrão em uma tabela fragmentada.
postgres=>
CALL rds_aurora.limitless_alter_table_type_sharded('public.customer', ARRAY['customer_id']);postgres=>
\d List of relations Schema | Name | Type | Owner --------+--------------+-------------------+-------------------- public | customer | partitioned table | postgres_limitless public | customer_fs1 | foreign table | postgres_limitless public | customer_fs2 | foreign table | postgres_limitless public | customer_fs3 | foreign table | postgres_limitless public | customer_fs4 | foreign table | postgres_limitless public | customer_fs5 | foreign table | postgres_limitless (6 rows)
Criar tabelas colocalizadas
Se duas ou mais tabelas forem fragmentadas usando a mesma chave de fragmento, você poderá alinhar (colocalizar) explicitamente essas tabelas. Quando duas ou mais tabelas são colocalizadas, as linhas dessas tabelas com os mesmos valores de chave de fragmento são colocadas no mesmo fragmento. A colocalização ajuda a restringir algumas operações a um único fragmento, o que resulta em melhor desempenho.
Você usa o procedimento rds_aurora.limitless_alter_table_type_sharded
com a seguinte sintaxe:
postgres=>
CALL rds_aurora.limitless_alter_table_type_sharded('schema
.collocated_table
', ARRAY['shard_key1
', 'shard_key2
', ... 'shard_keyn
'], 'schema
.sharded_table
');
O procedimento requer os seguintes parâmetros:
-
schema
: o esquema do banco de dados que contém as tabelas a serem colocalizadas. Se o esquema não for especificado, o procedimento usa osearch_path
. -
collocated_table
: a tabela a ser colocalizada. -
shard_keyn
: uma matriz de colunas da tabela para usar como chave de fragmento.É necessário usar a mesma chave de fragmento da tabela fragmentada original, incluindo os mesmos nomes e tipos de coluna.
-
sharded_table
: a tabela fragmentada com a qual você está colocalizando ocollocated_table
.
Para criar uma tabela colocalizada
-
Crie a primeira tabela fragmentada seguindo o procedimento em Criar tabelas fragmentadas.
-
Crie a tabela padrão para a tabela colocalizada.
CREATE TABLE mytable2 (customer_id INT PRIMARY KEY NOT NULL, column1 INT, column2 VARCHAR);
-
Converta a tabela padrão em uma tabela colocalizada.
postgres=>
CALL rds_aurora.limitless_alter_table_type_sharded('public.mytable2', ARRAY['customer_id'], 'public.customer');postgres=>
\d List of relations Schema | Name | Type | Owner --------+--------------+-------------------+-------------------- public | customer | partitioned table | postgres_limitless public | customer_fs1 | foreign table | postgres_limitless public | customer_fs2 | foreign table | postgres_limitless public | customer_fs3 | foreign table | postgres_limitless public | customer_fs4 | foreign table | postgres_limitless public | customer_fs5 | foreign table | postgres_limitless public | mytable2 | partitioned table | postgres_limitless public | mytable2_fs1 | foreign table | postgres_limitless public | mytable2_fs2 | foreign table | postgres_limitless public | mytable2_fs3 | foreign table | postgres_limitless public | mytable2_fs4 | foreign table | postgres_limitless public | mytable2_fs5 | foreign table | postgres_limitless (12 rows)
Criar tabelas de referência
Você cria tabelas de referência executando o procedimento rds_aurora.limitless_alter_table_type_reference
em tabelas padrão. Esse procedimento replica uma determinada tabela para todos os fragmentos no grupo de fragmentos de banco de dados e altera o tipo de tabela para referência. O procedimento é executado de forma síncrona e adquire um bloqueio ACCESS EXCLUSIVE
na tabela.
Depois que o procedimento for concluído com sucesso, a tabela padrão de origem será excluída e uma tabela de referência com o mesmo nome ficará disponível.
O procedimento rds_aurora.limitless_alter_table_type_reference
usa a seguinte sintaxe:
postgres=>
CALL rds_aurora.limitless_alter_table_type_reference('schema
.table
');
O procedimento armazenado requer os seguintes parâmetros:
-
schema
: o esquema do banco de dados que contém a tabela a ser replicada. Se o esquema não for especificado, o procedimento usa osearch_path
. -
table
: a tabela a ser replicada.
nota
A tabela padrão a partir da qual você cria a tabela de referência deve ter uma chave primária.
Nas tabelas de referência, a restrição CHECK
não é compatível com expressões.
A função anterior, limitless_table_alter_type_reference
, está obsoleta.
Como criar uma tabela de referência
Os exemplos a seguir mostram como criar a tabela de referência zipcodes
.
-
Crie a tabela padrão.
CREATE TABLE zipcodes (zipcode INT PRIMARY KEY, details VARCHAR);
-
Converta a tabela padrão em uma tabela de referência.
CALL rds_aurora.limitless_alter_table_type_reference('public.zipcodes');
postgres=>
\d List of relations Schema | Name | Type | Owner --------+--------------+-------------------+-------------------- public | customer | partitioned table | postgres_limitless public | customer_fs1 | foreign table | postgres_limitless public | customer_fs2 | foreign table | postgres_limitless public | customer_fs3 | foreign table | postgres_limitless public | customer_fs4 | foreign table | postgres_limitless public | customer_fs5 | foreign table | postgres_limitless public | zipcodes | foreign table | postgres_limitless (7 rows)A saída mostra a tabela fragmentada
customer
e a tabela de referênciazipcodes
.