我正在查看 PostgreSQL 文档,其中:
REFRESH MATERIALIZED VIEW 完全取代了物化视图的内容。旧内容被丢弃。
但是,从 9.5 开始,我相信有一种方法可以更新 MV,而无需重新生成所有数据。
DB-B
我正在使用数据库 ( ) 的副本( DB-A
),我通过每天运行来保持最新状态:
pg_restore -U postgres -d someDB --clean -j 2 -L WhatToImportList admin.dump
Run Code Online (Sandbox Code Playgroud)
但我开始注意到DB-B
表中存在重复记录。经过进一步调查,似乎--clean
没有将表删除,DB-B
因为它需要对 my 中DB-B
但不在 origin 中的其他表和视图进行级联删除DB-A
。
DB-A
如果不是,那么什么是一个好的复制策略,我可以从中导入数据,DB-B
但保留分析所需的所有函数、视图和表DB-B
?谢谢。
编辑:可能的解决方法:截断每个表,然后导入它们...但我必须在脚本中包含每个表。
Edit2:为了帮助未来的读者,这样可以生成所有必须截断的表的列表:
SELECT 'TRUNCATE ' || table_name || ';'
FROM information_schema.tables
WHERE table_schema='my_schema'
AND table_type='BASE TABLE';
Run Code Online (Sandbox Code Playgroud) 我想我进行了错误的数据库恢复,或者转储没有此数据,并且“类似文件夹”的结构丢失了。这是 Dbeaver 的捕获,显示了我对“类似文件夹”结构的理解。我可以轻松访问存储在数据库定义中的函数、表、模式等。我不太担心原始结构的丢失,因为它没有太多,但我确实想在需要时逐步重新创建它。例如,现在我创建了一个函数并希望在“Functions”文件夹下看到它,我该怎么做?
另外,我应该在 pg_dump 生成脚本中包含什么来备份这个结构?
谢谢。