Constraint on Composite Type
Use CREATE DOMAIN with a CHECK constraint. This works in PostgreSQL 9.1. It's documented to work in at least 8.0+. "A partial workaround is to use domain types as members of composite types."
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
);
This INSERT statement should succeed.
insert into sample values
(row(0, 0, 35), row(0, 0, 35));
But this one should fail.
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