pg_ivm/pg_ivm--1.10--1.11.sql

53 lines
1.6 KiB
MySQL
Raw Normal View History

2025-03-26 18:32:09 +00:00
ALTER TABLE pgivm.pg_ivm_immv ADD COLUMN querystring text NOT NULL;
CREATE FUNCTION pgivm.recreate_all_immvs() RETURNS VOID LANGUAGE PLPGSQL AS
$$
BEGIN
PERFORM pgivm.refresh_immv(n.nspname || '.' || c.relname, false)
FROM pgivm.pg_ivm_immv as ivm
JOIN pg_catalog.pg_class as c
ON c.oid = ivm.immvrelid
JOIN pg_catalog.pg_namespace as n
ON c.relnamespace = n.oid;
PERFORM pgivm.refresh_immv(n.nspname || '.' || c.relname, true)
FROM pgivm.pg_ivm_immv as ivm
JOIN pg_catalog.pg_class as c
ON c.oid = ivm.immvrelid
JOIN pg_catalog.pg_namespace as n
ON c.relnamespace = n.oid;
END
$$;
CREATE FUNCTION pgivm.refresh_query_strings()
2025-03-26 18:32:09 +00:00
RETURNS event_trigger LANGUAGE plpgsql SECURITY DEFINER AS
$$
DECLARE
old_search_path text;
BEGIN
2025-03-27 14:46:07 +00:00
-- Only need to refresh query strings if an object is renamed.
-- As a rough heuristic, check if this is an ALTER command.
IF tg_tag LIKE 'ALTER %' THEN
-- Empty search path so that get_immv_def returns a fully-qualified query.
SELECT setting INTO old_search_path FROM pg_catalog.pg_settings
WHERE name = 'search_path';
SET search_path = '';
2025-03-27 14:46:07 +00:00
UPDATE pgivm.pg_ivm_immv SET querystring = pgivm.get_immv_def(immvrelid);
2025-03-27 14:46:07 +00:00
-- Reset search path to the original value.
IF old_search_path != '' AND old_search_path != '""' THEN
EXECUTE format('SET search_path = %s', old_search_path);
END IF;
END IF;
2025-03-27 14:46:07 +00:00
EXCEPTION
WHEN internal_error THEN
RAISE WARNING 'pg_ivm could not refresh the pg_ivm_immv query strings.'
USING HINT = 'Please recreate your IMMVs using pgivm.recreate_all_immvs().';
END
$$;
CREATE EVENT TRIGGER refresh_query_strings
ON ddl_command_end
EXECUTE FUNCTION pgivm.refresh_query_strings();