程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了更改视图中使用的 PostgreSQL 列大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决更改视图中使用的 POSTGReSQL 列?

开发过程中遇到更改视图中使用的 POSTGReSQL 列的问题如何解决?下面主要结合日常开发的经验,给出你关于更改视图中使用的 POSTGReSQL 列的解决方法建议,希望对你解决更改视图中使用的 POSTGReSQL 列有所启发或帮助;

此案例的永久@R_419_6954@案

为了完全避免该问题,请使用数据类型textvarchar/character varying不带长度说明符而不是character varying(n). 在手册中阅读这些数据类型。

create table monkey(@R_54_4687@t NOT NulL)

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

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新的看法。这永远不会删除基础表的任何数据。但是,它删除视图的任何其他属性,这些属性也必须重新创建。

解决方法

我想让 PostegreSQL 放松一点。每次我想更改视图中使用的列时,似乎我必须删除视图,更改字段,然后重新创建视图。我可以放弃额外的保护,只告诉 POSTGReSQL 让我改变字段,然后找出对视图的调整吗?

澄清: 我理解什么是视图。事实上,这是因为视图就像一个子查询,我希望我可以只更改基础表并让视图接收更改。

假设我有以下内容:

create table monkey
(
  "name" character varying(50) NOT NULL,)

CREATE OR replaCE VIEW monkey_names AS 
 SELECT name
   FROM monkey

我真的只想在迁移脚本中执行以下操作,不必删除并重新创建视图。

alter table monkey alter colUMN "name" character varying(100) NOT NULL

大佬总结

以上是大佬教程为你收集整理的更改视图中使用的 PostgreSQL 列全部内容,希望文章能够帮你解决更改视图中使用的 PostgreSQL 列所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。