首頁 > 資料庫 > mysql教程 > PostgreSQL 的 EXCLUDE 約束如何防止重疊和相鄰的日期/時間範圍?

PostgreSQL 的 EXCLUDE 約束如何防止重疊和相鄰的日期/時間範圍?

Susan Sarandon
發布: 2025-01-05 09:28:38
原創
287 人瀏覽過

How Can PostgreSQL's EXCLUDE Constraint Prevent Overlapping and Adjacent Date/Time Ranges?

在 PostgreSQL 中使用 EXCLUDE 約束防止重複

建立儲存任意日期/時間範圍的資料庫時,必須強制執行約束以防止條目重疊或相鄰。這些約束對於維護資料完整性和準確性至關重要。

在 PostgreSQL 中,EXCLUDE 約束透過利用 GiST 索引來實現此目的。然而,在定義這些約束時,人們普遍擔心一秒分辨率的假設。 PostgreSQL 中的時間戳記資料類型通常具有較高的分辨率,可能會導致不準確。

使用獨佔邊界的解決方案

要解決此問題並防止重疊和相鄰範圍,可以使用以下方法:建議在日期/時間範圍上強制執行獨佔邊界(“[)”)。這涉及透過 CHECK 約束包含下限(使用“lower_inc()”)並排除上限(“NOT upper_inc()”)。此外,若要排除相鄰範圍,可以使用另一個使用「-|-」運算子的 EXCLUDE 約束。

範例程式碼:

CREATE TABLE tbl (
   tbl_id serial PRIMARY KEY
 , tsr tsrange
 , CONSTRAINT tsr_no_overlap  EXCLUDE USING gist (tsr WITH &&)
 , CONSTRAINT tsr_no_adjacent EXCLUDE USING gist (tsr WITH -|-)
 , CONSTRAINT tsr_enforce_bounds CHECK (lower_inc(tsr) AND NOT upper_inc(tsr))
);
登入後複製

此解決方案確保僅允許具有獨佔邊界的範圍,有效防止重疊和相鄰條目。它還透過強制執行所需的範圍行為來確保資料完整性。

以上是PostgreSQL 的 EXCLUDE 約束如何防止重疊和相鄰的日期/時間範圍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板