DML Aurora PostgreSQL 無限資料庫的限制和其他資訊 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

DML Aurora PostgreSQL 無限資料庫的限制和其他資訊

下列主題描述限制,或提供 Aurora PostgreSQL 無限資料庫中 DML和 查詢處理SQL命令的詳細資訊。

ANALYZE

ANALYZE 命令會收集資料庫中資料表內容的統計資料。之後,查詢規劃器會使用這些統計資料來協助判斷查詢最有效率的執行計劃。如需詳細資訊,請參閱 PostgreSQL 文件ANALYZE中的 。

在 Aurora PostgreSQL 無限資料庫中,ANALYZE命令會在執行時收集所有路由器和碎片的資料表統計資料。

為了防止在ANALYZE執行期間計算每個路由器的統計資料,資料表統計資料會在其中一個路由器上計算,然後複製到對等路由器。

CLUSTER

CLUSTER 命令會根據索引實際重新排序資料表。索引必須已在資料表上定義。在 Aurora PostgreSQL 無限制資料庫中,叢集是每個碎片上索引的本機部分。

如需詳細資訊,請參閱 PostgreSQL 文件CLUSTER中的 。

EXPLAIN

您可以使用下列參數來設定來自 EXPLAIN命令的輸出:

  • rds_aurora.limitless_explain_optionsEXPLAIN輸出中要包含的內容。預設值為 single_shard_optimization:會顯示計劃是否為單一碎片最佳化,但不包含碎片計劃。

在此範例中,EXPLAIN輸出不會顯示碎片的計劃。

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)

現在,我們將 rds_aurora.limitless_explain_options 設定為包含 shard_planssingle_shard_optimization。我們可以檢視路由器和碎片上陳述式的執行計畫。此外,我們會停用 enable_seqscan 參數,強制在碎片層上使用索引掃描。

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)

如需 EXPLAIN命令的詳細資訊,請參閱 PostgreSQL 文件EXPLAIN中的 。

INSERT

Aurora PostgreSQL 無限資料庫支援大多數INSERT命令。

PostgreSQL 沒有明確的UPSERT命令,但支援INSERT ... ON CONFLICT陳述式。

INSERT ... ON CONFLICT 如果衝突動作具有子查詢或可變函數,則不支援 :

-- 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.

如需 INSERT命令的詳細資訊,請參閱 PostgreSQL 文件INSERT中的 。

UPDATE

不支援更新碎片金鑰。例如,您有一個名為 的碎片資料表customers,具有碎片索引鍵 customer_id。下列DML陳述式會導致錯誤:

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

若要更新碎片索引鍵,您必須先使用碎片索引鍵前往DELETE資料列,然後INSERT是具有更新碎片索引鍵值的新資料列。

如需 UPDATE命令的詳細資訊,請參閱 PostgreSQL 文件中的更新資料

VACUUM

您可以在碎片和參考資料表上執行清空。Aurora PostgreSQL 無限資料庫完全支援下列VACUUM函數:

  • VACUUM

  • ANALYZE

  • DISABLE_PAGE_SKIPPING

  • FREEZE

  • FULL

  • INDEX_CLEANUP

  • PARALLEL

  • PROCESS_TOAST

  • TRUNCATE

  • VERBOSE

VACUUM 在 Aurora PostgreSQL 無限制資料庫上,有下列限制:

如需 VACUUM命令的詳細資訊,請參閱 PostgreSQL 文件VACUUM中的 。如需如何在 Aurora PostgreSQL 無限制資料庫中進行清空的詳細資訊,請參閱 透過清空回收儲存空間