From d4507aef5e5da91abf97d0c45a7619f9739a13e2 Mon Sep 17 00:00:00 2001 From: Tiago Amorim Date: Fri, 23 Feb 2024 19:01:13 +0000 Subject: [PATCH] replaced invalid constraint with on insert trigger --- migrations/003_t_orders.sql | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/migrations/003_t_orders.sql b/migrations/003_t_orders.sql index 33f2216..a496ad0 100644 --- a/migrations/003_t_orders.sql +++ b/migrations/003_t_orders.sql @@ -12,13 +12,27 @@ CREATE TABLE IF NOT EXISTS orders( FOREIGN KEY(work_piece) REFERENCES pieces(id) ON DELETE CASCADE, FOREIGN KEY(client_id) REFERENCES clients(id) - ON DELETE CASCADE + ON DELETE CASCADE, - UNIQUE(client_id, order_number) + UNIQUE(client_id, order_number), - CONSTRAINT check_work_piece_kind CHECK ( - work_piece IN ( - SELECT id FROM pieces WHERE kind = 'final product' - ) - ) ); + +CREATE FUNCTION check_work_piece_kind() RETURNS trigger AS +$$ + BEGIN + IF NOT EXISTS ( + SELECT 1 + FROM pieces + WHERE id = NEW.work_piece AND kind = 'final product' + ) THEN + RAISE EXCEPTION 'Work piece must be a final product.'; + END IF; + RETURN NULL; + END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_work_piece_kind_trigger +BEFORE INSERT ON your_table +FOR EACH ROW EXECUTE PROCEDURE check_work_piece_kind(); +