Postgresql

我可以在不實際執行檢查的情況下告訴 Postgres 一個新的約束是有效的嗎?

  • April 23, 2020

我有一個約束來確保填充三列之一,並且我正在添加一個新列,因此我用四列版本替換舊約束。由於我從舊約束中知道必須填充三分之一的列,因此我可以確定將填充四分之一併且新約束是有效的。

我知道我可以將它添加為NOT VALID並稍後同時驗證它,這是猶太教要做的事情,但是 Postgres 驗證所有 50 億個有效行有點浪費時間。我可以將其標記為有效而不再次檢查所有行嗎?或者,讓它無限期無效有什麼缺點嗎?

如果不打擾您,您可以安全地使檢查約束無效。我想不出任何地方使用檢查約束來進行查詢計劃,並且將強制執行數據修改。

convalidated在這種情況下設置為TRUEin應該是安全的pg_constraint,但既然你沒有從中獲得任何實際好處,為什麼要這樣做呢?

引用自:https://dba.stackexchange.com/questions/265628