エラー: ビューまたはルールで使用される列の型を変更できません 詳細: ビューのルール _RETURN は列 "status" に依存します 質問する

エラー: ビューまたはルールで使用される列の型を変更できません 詳細: ビューのルール _RETURN は列

私はPostgresで整数型の列をnumeric(2)に更新しようとしています

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

しかし、エラーが発生します。エラー: ビューまたはルールで使用される列の型を変更できません。詳細: ビュー v_employee_details のルール _RETURN は列 "status" に依存します。

データをドロップまたは削除せずに、これをどのように実現できますか? ルールまたはビューを無効にする方法はありますか?

ベストアンサー1

唯一可能な方法は、ビューを削除して再作成することです。

しかし、それは問題ではありません。ビュー定義は簡単に取得できます。pg_get_viewdef関数

依存ビューがたくさんある場合は、この答えすべての依存ビューを正しい順序で取得します。

ルールについては心配しないでください_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_def);
  execute exec_text;
end $$;

おすすめ記事