Postgresql
複合類型的約束
如何在復合類型的子欄位上創建約束?
虛擬碼
create type axis( major_axis float, minor_axis float, angle float constraint angle_constraint check(angle between -90 and 90) ); create table sample( axis1 axis, axis2 axis );
這在 PostgreSQL 9.2 中可行嗎?如此處所述,在 9.1 中似乎是不可能的。
將 CREATE DOMAIN 與 CHECK 約束一起使用。這適用於 PostgreSQL 9.1。它被記錄在至少 8.0 + 中工作。“部分解決方法是使用域類型作為複合類型的成員。”
create domain angle as float check (value between -90 and 90); create type axis as ( major_axis float, minor_axis float, angle angle ); create table sample( axis1 axis, axis2 axis );
此 INSERT 語句應該成功。
insert into sample values (row(0, 0, 35), row(0, 0, 35));
但是這個應該失敗。
insert into sample values (row(0, 0, 93), row(0, 0, 35)); ERROR: value for domain angle violates check constraint "angle_check" SQL state: 23514