更改列忽略依赖视图

时间:2013-08-01 08:52:46

标签: postgresql

我的列columncharacter varying(20)类型,我希望将其增加到50

ALTER TABLE table ALTER COLUMN column TYPE character varying(50);

我收到view view_name depends on column "column"的错误。我想知道如何在不丢弃并重新创建大约10个依赖视图的情况下更改列?

2 个答案:

答案 0 :(得分:10)

您可以在blog

上找到问题的答案
  

PostgreSQL在修改现有内容时非常严格   对象。经常在尝试ALTER TABLE或REPLACE VIEW时   告诉你,你不能这样做,因为还有另一个对象   (通常是视图或物化视图),这取决于你   想修改。似乎唯一的解决方案是DROP依赖   对象,对目标对象进行所需的更改,然后重新创建   丢弃的物体。

     

这是繁琐而繁琐的,因为那些依赖对象可以拥有   进一步的依赖,也可能有其他依赖等等   上。我创建了utility functions,可以在这种情况下提供帮助。

     

使用非常简单 - 您只需致电:

     

select deps_save_and_drop_dependencies(p_schema_name, p_object_name);

     

您   必须传递两个参数:模式的名称和名称   该架构中的对象。该对象可以是表,视图或   物化观点。该函数将删除所有视图并实现   视图依赖于p_schema_name.p_object_name并保存DDL   在辅助表中恢复它们。

     

当你想要恢复那些被丢弃的对象时(例如当你   完成modyfing p_schema_name.p_object_name),你只需要做   另一个简单的电话:

     

select deps_restore_dependencies(p_schema_name,p_object_name);

     

将重新创建已删除的对象。

     

这些功能需要注意:

     
      
  • 依赖关系层次结构
  •   
  • 在层次结构中删除和创建视图/物化视图的正确顺序
  •   
  • 恢复对观看次数/具体化观点的评论和授权
  •   
     

点击here   对于工作的sqlfiddle示例或检查this gist是否完整   源代码

答案 1 :(得分:2)

这是不可能的,但是TODO feature。您应该创建一个能够处理简单视图创建之类的脚本。