Merged in feature/media-analytics-logging (pull request #2659)

Add trigger to remove fk violations for media analytics.
This commit is contained in:
Patrick Fic
2025-11-10 23:38:58 +00:00
4 changed files with 54 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
alter table "public"."media_analytics_detail" drop constraint "media_analytics_detail_jobid_fkey",
add constraint "media_analytics_detail_jobid_fkey"
foreign key ("jobid")
references "public"."jobs"
("id") on update restrict on delete restrict;

View File

@@ -0,0 +1,5 @@
alter table "public"."media_analytics_detail" drop constraint "media_analytics_detail_jobid_fkey",
add constraint "media_analytics_detail_jobid_fkey"
foreign key ("jobid")
references "public"."jobs"
("id") on update set null on delete set null;

View File

@@ -0,0 +1,23 @@
-- Could not auto-generate a down migration.
-- Please write an appropriate down migration for the SQL below:
-- CREATE OR REPLACE FUNCTION set_fk_to_null_if_invalid_media_analytics()
-- RETURNS TRIGGER AS $$
-- BEGIN
-- -- Check if the foreign key value is not NULL
-- IF NEW.jobid IS NOT NULL THEN
-- -- Check if the corresponding record exists in the parent table
-- IF NOT EXISTS (SELECT 1 FROM jobs WHERE id = NEW.jobid) THEN
-- -- If it doesn't exist, set the foreign key to NULL
-- NEW.jobid = NULL;
-- END IF;
-- END IF;
--
-- -- Return the (potentially modified) record to be inserted/updated
-- RETURN NEW;
-- END;
-- $$ LANGUAGE plpgsql;
--
-- CREATE TRIGGER media_analytics_fk_null
-- BEFORE INSERT OR UPDATE ON media_analytics_detail
-- FOR EACH ROW
-- EXECUTE FUNCTION set_fk_to_null_if_invalid_media_analytics();

View File

@@ -0,0 +1,21 @@
CREATE OR REPLACE FUNCTION set_fk_to_null_if_invalid_media_analytics()
RETURNS TRIGGER AS $$
BEGIN
-- Check if the foreign key value is not NULL
IF NEW.jobid IS NOT NULL THEN
-- Check if the corresponding record exists in the parent table
IF NOT EXISTS (SELECT 1 FROM jobs WHERE id = NEW.jobid) THEN
-- If it doesn't exist, set the foreign key to NULL
NEW.jobid = NULL;
END IF;
END IF;
-- Return the (potentially modified) record to be inserted/updated
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER media_analytics_fk_null
BEFORE INSERT OR UPDATE ON media_analytics_detail
FOR EACH ROW
EXECUTE FUNCTION set_fk_to_null_if_invalid_media_analytics();