我想知道是否可以撰寫一個使范圍唯一的約束。這些范圍表示為底部和頂部兩個字串型別的列。說,如果我在資料庫中有以下行,
| id | bottom | top |
|----|--------|-------|
| 1 | 10000 | 10999 |
插入行 (2, 10100, 10200) 將立即導致約束違反錯誤。
PS
我不能切換到整數,不幸的是——只有字串
uj5u.com熱心網友回復:
永遠不要將數字存盤為字串,并且始終使用范圍資料型別int4range來存盤范圍。使用范圍,您可以輕松地使用排除約束:
ALTER TABLE tab ADD EXCLUDE USING gist (bottom_top WITH &&);
這里,bottom_top是一個范圍資料型別。
如果您必須使用兩個字串列堅持使用損壞的資料模型,您可以剝離#字符并且仍然具有排除約束
ALTER TABLE tab ADD EXCLUDE USING gist (
int4range(
CAST(trim(bottom, '#') AS integer),
CAST(trim(top, '#') AS integer),
'[]'
) WITH &&
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/516611.html
