我的视图取决于物化视图。 我在.sql文件中有他们的定义,级联删除了物化视图。
DROP MATERIALIZED VIEW IF EXISTS mat_view_name CASCADE;
CREATE MATERIALIZED VIEW mat_view_name AS ...;
CREATE VIEW view_name AS
SELECT ... FROM (
SELECT ... FROM mat_view_name
UNION
SELECT ... from another_table
)
;
我在物化视图中更改了一个SELECT语句,当我在迁移中执行sql脚本时,它将我的初始视图更改为我的structure.sql中的表。
这是我在structure.sql中获得的新代码
CREATE TABLE view_name (
...
);
ALTER TABLE ONLY view_name REPLICA IDENTITY NOTHING;
CREATE RULE "_RETURN" AS
ON SELECT TO view_name DO INSTEAD SELECT .....;
如果我回滚迁移,我会收回原始代码:
CREATE VIEW view_name AS...
我只在物化视图中的select中添加了两个JOIN语句。
我的数据库版本是9.6.2。
你知道为什么会这样吗? 这是性能问题,PG决定使用它而不是经典视图吗? 如何强制它创建视图?
答案 0 :(得分:0)
我假设您从转储或数据库备份中获取此脚本。
物化视图本质上是以与CREATE TABLE AS
类似的方式创建的表,其中sql存储在数据库中,因此可以刷新它。
转储materialized view
时的默认行为是转储为表。