Limitações e outras informações de DML no Aurora PostgreSQL Limitless Database
Os tópicos a seguir descrevem as limitações ou fornecem mais informações sobre os comandos SQL de DML e processamento de consultas no Aurora PostgreSQL Limitless Database.
ANALYZE
O comando ANALYZE
coleta estatísticas sobre o conteúdo das tabelas no banco de dados. Posteriormente, o planejador de consultas usa essas estatísticas para ajudar a determinar os planos de execução mais eficientes para as consultas. Para obter mais informações, consulte ANALYZE
No Aurora PostgreSQL Limitless Database, o comando ANALYZE
coleta estatísticas da tabela em todos os roteadores e fragmentos quando é executado.
Para evitar o cálculo de estatísticas em cada roteador durante as execuções de ANALYZE
, as estatísticas da tabela são calculadas em um dos roteadores e depois copiadas para os roteadores de mesmo nível.
CLUSTER
O comando CLUSTER
reordena fisicamente uma tabela com base em um índice. O índice já deve ter sido definido na tabela. No Aurora PostgreSQL Limitless Database, o clustering é local para a parte do índice que está presente em cada fragmento.
Para ter mais informações, consulte CLUSTER
EXPLAIN
Você usa o seguinte parâmetro para configurar a saída do comando EXPLAIN
:
-
rds_aurora.limitless_explain_options
: o que incluir na saída deEXPLAIN
. O valor padrão ésingle_shard_optimization
: é mostrado se os planos são otimizados para fragmento único, mas os planos de fragmento não estão incluídos.
Neste exemplo, a saída de EXPLAIN
não mostra planos de fragmentos.
postgres_limitless=> EXPLAIN SELECT * FROM employees where id =25; QUERY PLAN ------------------------------------------------------ Foreign Scan (cost=100.00..101.00 rows=100 width=0) Single Shard Optimized (2 rows)
Agora, configuramos rds_aurora.limitless_explain_options
para incluir shard_plans
e single_shard_optimization
. Podemos ver os planos de execução das instruções em roteadores e fragmentos. Além disso, desativamos o parâmetro enable_seqscan
para garantir que a varredura de índice seja usada na camada de fragmento.
postgres_limitless=> SET rds_aurora.limitless_explain_options = shard_plans, single_shard_optimization; SET postgres_limitless=> SET enable_seqscan = OFF; SET postgres_limitless=> EXPLAIN SELECT * FROM employees WHERE id = 25; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------- Foreign Scan (cost=100.00..101.00 rows=100 width=0) Remote Plans from Shard postgres_s4: Index Scan using employees_ts00287_id_idx on employees_ts00287 employees_fs00003 (cost=0.14..8.16 rows=1 width=15) Index Cond: (id = 25) Single Shard Optimized (5 rows)
Para obter mais informações sobre o comando EXPLAIN
, consulte EXPLAIN
INSERT
A maioria dos comandos INSERT
é compatível com o Aurora PostgreSQL Limitless Database.
O PostgreSQL não tem um comando UPSERT
explícito, mas é compatível com as instruções INSERT ... ON CONFLICT
.
INSERT ... ON CONFLICT
não é compatível se a ação de conflito tiver uma subconsulta ou uma função mutável:
-- RANDOM is a mutable function. INSERT INTO sharded_table VALUES (1, 100) ON CONFLICT (id) DO UPDATE SET other_id = RANDOM(); ERROR: Aurora Limitless Tables doesn't support pushdown-unsafe functions with DO UPDATE clauses.
Para obter mais informações sobre o comando INSERT
, consulte INSERT
UPDATE
A atualização da chave de fragmento não é compatível. Por exemplo, você tem uma tabela fragmentada chamada customers
, com uma chave de fragmento customer_id
. As seguintes instruções DML causam erros:
postgres_limitless=> UPDATE customers SET customer_id = 11 WHERE customer_id =1; ERROR: Shard key column update is not supported postgres_limitless=> UPDATE customers SET customer_id = 11 WHERE customer_name='abc'; ERROR: Shard key column update is not supported
Para atualizar uma chave de fragmento, primeiro aplique DELETE
à linha com a chave de fragmento e, em seguida, aplique INSERT
a uma nova linha com o valor atualizado da chave de fragmento.
Para obter mais informações sobre o comando UPDATE
, consulte Updating data
VACUUM
É possível realizar a limpeza em tabelas fragmentadas e de referência. As seguintes funções VACUUM
são totalmente compatíveis com o Aurora PostgreSQL Limitless Database:
-
VACUUM
-
DISABLE_PAGE_SKIPPING
-
FREEZE
-
FULL
-
INDEX_CLEANUP
-
PARALLEL
-
PROCESS_TOAST
-
TRUNCATE
-
VERBOSE
VACUUM
no Aurora PostgreSQL Limitless Database tem as seguintes limitações:
-
A extensão pg_visibility_map
não é compatível. -
A verificação de índices não utilizados com a visualização pg_stat_all_indexes
não é compatível. -
As visualizações consolidadas para pg_stat_user_indexes
, pg_class e pg_stats não foram implementadas.
Para obter mais informações sobre o comando VACUUM
, consulte VACUUM