Add recreate_all_immvs function.
Recreate change prevent triggers during refresh_immv in addition to base table triggers.
This commit is contained in:
parent
0a5bd500e6
commit
7bc34dfa90
2 changed files with 27 additions and 2 deletions
|
|
@ -444,7 +444,8 @@ RefreshImmvByOid(Oid matviewOid, bool is_create, bool skipData,
|
|||
tgform = (Form_pg_trigger) GETSTRUCT(tgtup);
|
||||
|
||||
/* If trigger is created by IMMV, delete it. */
|
||||
if (strncmp(NameStr(tgform->tgname), "IVM_trigger_", 12) == 0)
|
||||
if (strncmp(NameStr(tgform->tgname), "IVM_trigger_", 12) == 0 ||
|
||||
strncmp(NameStr(tgform->tgname), "IVM_prevent_", 12) == 0)
|
||||
{
|
||||
obj.classId = foundDep->classid;
|
||||
obj.objectId = foundDep->objid;
|
||||
|
|
@ -474,7 +475,10 @@ RefreshImmvByOid(Oid matviewOid, bool is_create, bool skipData,
|
|||
* is created.
|
||||
*/
|
||||
if (!skipData && !oldPopulated)
|
||||
{
|
||||
CreateIvmTriggersOnBaseTables(dataQuery, matviewOid);
|
||||
CreateChangePreventTrigger(matviewOid);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the transient table that will receive the regenerated data. Lock
|
||||
|
|
|
|||
|
|
@ -1,5 +1,24 @@
|
|||
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()
|
||||
RETURNS event_trigger LANGUAGE plpgsql SECURITY DEFINER AS
|
||||
$$
|
||||
|
|
@ -14,7 +33,9 @@ BEGIN
|
|||
UPDATE pgivm.pg_ivm_immv SET querystring = pgivm.get_immv_def(immvrelid);
|
||||
|
||||
-- Reset search path to the original value.
|
||||
EXECUTE format('SET search_path = %s', old_search_path);
|
||||
IF old_search_path != '' AND old_search_path != '""' THEN
|
||||
EXECUTE format('SET search_path = %s', old_search_path);
|
||||
END IF;
|
||||
END
|
||||
$$;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue