更改视图中使用的 PostgreSQL 列

更改视图中使用的 PostgreSQL 列,第1张

更改视图中使用的 PostgreSQL 列 此案例的永久解决方案

为了完全避免该问题,请使用数据类型

text
varchar
/
character varying
不带长度说明符而不是
character varying(n)
. 在手册中阅读这些数据类型。

CREATE TABLE monkey(name text NOT NULL)

如果您真的想强制执行最大长度,请创建一个

CHECK
约束

ALTER TABLE monkey   ADD ConSTRAINT monkey_name_len CHECK (length(name) < 101);

您可以随时更改或删除该约束,而无需接触依赖对象(如视图),并且不会由于类型的更改而强制 Postgres 在表中写入新行(这在现代版本的 Postgres 中不再总是必要的)。

详细说明

正如@Michael 所提议的,我添加了一些更一般的信息:

PostgreSQL 中的视图不仅仅是“子查询的别名”。视图被实现为带有规则的特殊表

ON SELECT TO my_view DO INSTEAD
。(这就是您可以使用
ALTER TABLE
命令更改视图的原因。)您可以
GRANT
为其授予权限、添加注释甚至定义列默认值(对规则有用
ON INSERT TO my_view DO INSTEAD...
)。

如果您更改底层对象,您也需要更改任何依赖视图的定义查询。该

ALTER VIEW
语句只能更改视图的辅助属性。使用
CREATE OR REPLACE VIEW
更改查询-它将保留任何附加属性。

但是,如果您想更改结果列的数据类型(如手头的情况),

CREATE OR REPLACE VIEW
则是不可能的。你必须对
DROP
旧的和
CREATE
新的看法。这永远不会删除基础表的任何数据。但是,它删除视图的任何其他属性,这些属性也必须重新创建。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4936596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存