放宽视图中的 PostgreSQL 列修改
PostgreSQL 通过要求在视图中使用的列被修改时重新创建视图来确保数据完整性。但是,当您希望简单地调整列而不影响视图时,这可能会很麻烦。
永久解决方案:使用不受限制的数据类型
要完全避免此问题,请使用数据像 text 或 varchar/character 这样的类型在没有长度说明符的情况下会发生变化。这些类型允许不受限制的数据存储,消除了需要重新创建视图的长度更改的需要。
使用 CHECK 约束强制执行最大长度
如果您需要执行最大长度,考虑使用 CHECK 约束:
ALTER TABLE monkey ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);
可以独立修改或删除此约束,而不会影响视图或者在基础表中强制进行不必要的数据修改。
视图实现的影响
与流行的看法相反,PostgreSQL 中的视图不仅仅是别名,而是具有定义规则的特殊表他们的内容。这些规则由 ON SELECT 语句强制执行,确保对底层对象的任何更改都可能需要反映在依赖视图中。
ALTER VIEW 的限制
ALTER VIEW 可以只修改视图的辅助属性,例如权限或注释。要更改基础查询,请使用 CREATE OR REPLACE VIEW。但是,当更改结果列的数据类型时,此方法不适合。
删除并重新创建视图
在这种情况下,首选方法是 DROP 现有视图并创建一个新的。这保留了底层数据,但消除了与视图关联的任何自定义属性。
以上是如何在不重新创建依赖视图的情况下修改 PostgreSQL 列?的详细内容。更多信息请关注PHP中文网其他相关文章!