PostgreSQL - pg_dump 时刷新具体化视图
PostgreSQL - REFRESH MATERIALIZED VIEW while pg_dump
(Postgres 版本:9.3)
四处寻找无解才问:
- 我创建了一个简单的物化视图(实际上,我有几个)。
psql my_db -c "CREATE MATERIALIZED VIEW my_view AS (SELECT * FROM my_table);"
- 我调用pg_dump备份数据库
pg_dump -Fc my_db
- 虽然 pg_dump 是 运行,但我尝试使用
REFRESH MATERIALIZED VIEW
刷新视图。
psql my_db -c "REFRESH MATERIALIZED VIEW my_view;"
只要 pg_dump 处于活动状态,REFRESH
语句就会挂起(保持 'active')(这让事情变得更糟,因为视图挂在 REFRESH
,我也不能 SELECT
从它)。
我的问题是:如何在执行转储时 REFRESH
实体化视图?
如果有帮助,我不介意从转储中排除视图数据,我不需要保存数据。但是我确实需要转储视图模式(CREATE
语句)。
我已经设置了一个脚本来从转储中排除所有 m.views,但它也排除了它们的模式,并且它使我的转储命令复杂化到不合理的数量只是为了使这项工作,所以我'我正在寻找更简单的解决方案。
提前致谢!
所以,回答我的问题:)
我搬到了 pg_basebackup
而不是 pg_dump
。当然它们是不一样的,主要是因为前者会转储整个服务器数据,但对我来说有用,无论如何要快得多,并且刷新 m.views 没问题,而它是 运行.
(Postgres 版本:9.3)
四处寻找无解才问:
- 我创建了一个简单的物化视图(实际上,我有几个)。
psql my_db -c "CREATE MATERIALIZED VIEW my_view AS (SELECT * FROM my_table);"
- 我调用pg_dump备份数据库
pg_dump -Fc my_db
- 虽然 pg_dump 是 运行,但我尝试使用
REFRESH MATERIALIZED VIEW
刷新视图。
psql my_db -c "REFRESH MATERIALIZED VIEW my_view;"
只要 pg_dump 处于活动状态,REFRESH
语句就会挂起(保持 'active')(这让事情变得更糟,因为视图挂在 REFRESH
,我也不能 SELECT
从它)。
我的问题是:如何在执行转储时 REFRESH
实体化视图?
如果有帮助,我不介意从转储中排除视图数据,我不需要保存数据。但是我确实需要转储视图模式(CREATE
语句)。
我已经设置了一个脚本来从转储中排除所有 m.views,但它也排除了它们的模式,并且它使我的转储命令复杂化到不合理的数量只是为了使这项工作,所以我'我正在寻找更简单的解决方案。
提前致谢!
所以,回答我的问题:)
我搬到了 pg_basebackup
而不是 pg_dump
。当然它们是不一样的,主要是因为前者会转储整个服务器数据,但对我来说有用,无论如何要快得多,并且刷新 m.views 没问题,而它是 运行.