首页 > 解决方案 > 错误:无法更改视图或规则使用的列的类型详细信息:视图上的规则 _RETURN 取决于列“状态”

问题描述

我正在尝试在 postgres 中将整数类型的列更新为 numeric(2)

ALTER TABLE employee_status
    ALTER COLUMN status TYPE numeric(2);

但收到错误错误:无法更改视图或规则使用的列的类型详细信息:视图 v_employee_details 上的规则 _RETURN 取决于列“状态”

在不删除或删除数据的情况下,我该如何实现?有什么方法可以禁用规则或视图

标签: postgresqlviewdependencies

解决方案


唯一可能的方法是删除并重新创建视图。

但这没问题,您可以使用pg_get_viewdeffunction轻松获取视图定义。

如果您有很多依赖视图,请查看此答案以按正确顺序获取所有依赖视图。

不要担心_RETURN规则:这只是 PostgreSQL 中视图如何实现的一个实现细节:作为ON SELECT DO INSTEAD名为_RETURN.


do $$            
  declare v_employee_details_def text;
  declare exec_text text;
begin          
  v_employee_details_def := pg_get_viewdef('v_employee_details');
  drop view v_employee_details;
  
  -- do your other stuff
  
  exec_text := format('create view v_employee_details as %s', 
      v_employee_details_dev);
  execute exec_text;
end $$;

推荐阅读