PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie aktualisiere ich alle materialisierten Ansichten in Postgresql 9.3 auf einmal?

Sieht so aus, als hätte die aktuelle Version von PostgreSQL (9.3.1) keine solche Funktionalität, musste stattdessen meine eigene Funktion schreiben:

CREATE OR REPLACE FUNCTION RefreshAllMaterializedViews(schema_arg TEXT DEFAULT 'public')
RETURNS INT AS $$
DECLARE
    r RECORD;
BEGIN
    RAISE NOTICE 'Refreshing materialized view in schema %', schema_arg;
    FOR r IN SELECT matviewname FROM pg_matviews WHERE schemaname = schema_arg 
    LOOP
        RAISE NOTICE 'Refreshing %.%', schema_arg, r.matviewname;
        EXECUTE 'REFRESH MATERIALIZED VIEW ' || schema_arg || '.' || r.matviewname; 
    END LOOP;

    RETURN 1;
END 
$$ LANGUAGE plpgsql;

(auf github:https://github.com/sorokine/RefreshAllMaterializedViews )