Я не мог найти команду для этого. Я закончил вызов сценария оболочки в cron, который запускает функцию psql.
кронтаб:
0 0 * * * /home/scripts/refreshMaterializedViews.sh
refreshMaterializedViews.sh:
echo 'select RefreshAllMaterializedViews();' | dokku postgres:connect my-postgres-db
Где RefreshAllMaterializedViews() является функцией Psql, чтобы обновить все материализованные представления сразу. Я добавлю его здесь для простоты, но это уже на всем протяжении С. О.
функция Psql:
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;
Обратите внимание, что эта функция не поддерживает 'одновременно'. Это означает, что он заблокирует ваши материализованные представления во время обновления. Для других решений см. this S.O question.