私は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 $$;