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