if you can change your tables a bit, you can do this with a foreign key and a check constraint:
CREATE TABLE calendar_month (
id serial PRIMARY KEY,
start_date date NOT NULL UNIQUE,
end_date date NOT NULL,
reporting_month character varying(50) NOT NULL
);
CREATE TABLE calendar (
id serial PRIMARY KEY,
month_start_date date NOT NULL REFERENCES calendar_month(start_date),
holiday bool NOT NULL,
actual_date date NOT NULL CHECK (
actual_date>=month_start_date and
actual_date<(month_start_date+'1 month'::interval)::date)
);
EDIT: , "end_date = start_date + 1- ". , - , - ( ):
CREATE TABLE calendar_month (
id serial PRIMARY KEY,
start_date date NOT NULL,
end_date date NOT NULL,
reporting_month character varying(50) NOT NULL,
UNIQUE(start_date, end_date)
);
CREATE TABLE calendar (
id serial PRIMARY KEY,
month_start_date date NOT NULL,
month_end_date date NOT NULL,
holiday bool NOT NULL,
foreign key(month_start_date, month_end_date)
REFERENCES calendar_month(start_date, end_date) )
actual_date date NOT NULL
CHECK (actual_date>=month_start_date and actual_date<month_end_date)
);
, , actual_date<month_end_date actual_date<=month_end_date check - , .
user533832