2020-11-12 12:25:48 +03:00
|
|
|
ALTER TABLE hdb_catalog.event_triggers
|
|
|
|
DROP CONSTRAINT IF EXISTS event_triggers_schema_name_fkey;
|
|
|
|
|
|
|
|
ALTER TABLE hdb_catalog.event_triggers
|
|
|
|
DROP CONSTRAINT IF EXISTS event_triggers_schema_name_table_name_fkey;
|
|
|
|
|
|
|
|
-- since we removed the foreign key constraint with hdb_catalog.hdb_table which had 'ON UPDATE CASCADE'
|
|
|
|
-- (see Note [Diff-and-patch event triggers on replace] in Hasura.RQL.DDL.EventTrigger), we perform the update using trigger
|
|
|
|
CREATE OR REPLACE FUNCTION hdb_catalog.event_trigger_table_name_update()
|
|
|
|
RETURNS TRIGGER
|
|
|
|
LANGUAGE PLPGSQL
|
|
|
|
AS
|
|
|
|
$$
|
|
|
|
BEGIN
|
|
|
|
IF (NEW.table_schema, NEW.table_name) <> (OLD.table_schema, OLD.table_name) THEN
|
|
|
|
UPDATE hdb_catalog.event_triggers
|
|
|
|
SET schema_name = NEW.table_schema, table_name = NEW.table_name
|
|
|
|
WHERE (schema_name, table_name) = (OLD.table_schema, OLD.table_name);
|
|
|
|
END IF;
|
|
|
|
RETURN NEW;
|
|
|
|
END;
|
|
|
|
$$;
|
|
|
|
|
|
|
|
CREATE TRIGGER event_trigger_table_name_update_trigger
|
|
|
|
AFTER UPDATE ON hdb_catalog.hdb_table
|
|
|
|
FOR EACH ROW EXECUTE PROCEDURE hdb_catalog.event_trigger_table_name_update();
|
2020-11-16 13:09:09 +03:00
|
|
|
|
|
|
|
|
|
|
|
-- this clears pre-existing invalid triggers
|
|
|
|
CREATE TEMP TABLE invalid_triggers AS
|
|
|
|
WITH valid_event_triggers AS (
|
|
|
|
SELECT name FROM hdb_catalog.event_triggers
|
|
|
|
),
|
|
|
|
archive_invalid_events AS (
|
|
|
|
UPDATE hdb_catalog.event_log set archived = 't'
|
|
|
|
WHERE trigger_name NOT IN (select name from valid_event_triggers)
|
|
|
|
)
|
|
|
|
SELECT routine_name FROM information_schema.routines
|
|
|
|
WHERE routine_type='FUNCTION' AND specific_schema='hdb_views' AND routine_name NOT IN (
|
|
|
|
SELECT 'notify_hasura_' || name || '_INSERT' FROM valid_event_triggers
|
|
|
|
UNION
|
|
|
|
SELECT 'notify_hasura_' || name || '_UPDATE' FROM valid_event_triggers
|
|
|
|
UNION
|
|
|
|
select 'notify_hasura_' || name || '_DELETE' FROM valid_event_triggers
|
|
|
|
);
|
|
|
|
|
|
|
|
DO $$ DECLARE
|
|
|
|
r RECORD;
|
|
|
|
BEGIN
|
|
|
|
FOR r IN (SELECT routine_name from invalid_triggers) LOOP
|
|
|
|
EXECUTE 'DROP FUNCTION IF EXISTS hdb_views.' || quote_ident(r.routine_name) || ' CASCADE';
|
|
|
|
END LOOP;
|
|
|
|
END $$;
|