Vastus (27.10.2022 10:31): Jah, mõnikord tuleb. Toon näite.
PostgreSQLi DATE ja TIMESTAMP tüüpidesse kuuluvad spetsiaalväärtused 'infinity' (suurem kui kõik ülejäänud DATE/TIMESTAMP väärtused) ja '-infinity' (väiksem kui kõik ülejäänud DATE/TIMESTAMP väärtused).
CREATE TABLE Bronn (bronn_id SERIAL,
ruumi_nr INTEGER NOT NULL,
alguse_aeg TIMESTAMP NOT NULL,
lopu_aeg TIMESTAMP NOT NULL DEFAULT 'infinity',
CONSTRAINT pk_bronn PRIMARY KEY (bronn_id),
CONSTRAINT ak_bronn UNIQUE (ruumi_nr, alguse_aeg),
CONSTRAINT chk_bronn_alguse_aeg CHECK(alguse_aeg>='2020-01-01' AND alguse_aeg<'2200-01-01'),
CONSTRAINT chk_bronn_lopu_aeg CHECK(lopu_aeg>='2020-01-01' AND lopu_aeg<'2200-01-01'));
INSERT INTO Bronn (ruumi_nr, alguse_aeg)
VALUES (1, '2022-10-04 12:00'),
(2, '2022-10-04 12:00');
/*Lisamine ebaõnnestub ERROR: new row for relation "bronn" violates check constraint "chk_bronn_lopu_aeg" DETAIL: Failing row contains (1, 1, 2022-10-04 12:00:00, infinity).*/
ALTER TABLE Bronn DROP CONSTRAINT chk_bronn_lopu_aeg;
ALTER TABLE Bronn ADD CONSTRAINT chk_bronn_lopu_aeg CHECK(lopu_aeg>='2020-01-01' AND lopu_aeg<'2200-01-01' OR lopu_aeg='infinity');
INSERT INTO Bronn (ruumi_nr, alguse_aeg)
VALUES (1, '2022-10-04 12:00'),
(2, '2022-10-04 12:00');
/*Lisamine õnnestub*/ |