我找不到這樣做的命令。我最終在cron中調用了一個shell腳本,它觸發了一個psql函數。
的crontab:
0 0 * * * /home/scripts/refreshMaterializedViews.sh
refreshMaterializedViews.sh:
echo 'select RefreshAllMaterializedViews();' | dokku postgres:connect my-postgres-db
凡RefreshAllMaterializedViews()是一個PSQL功能刷新一次全部物化視圖。爲了簡單起見,我將在這裏添加它,但它已經遍佈S.O.
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.