システムカタログ(pg_catalog)テーブルのフィールドを指す外部キーを持つことは可能ですか?
私が次のことを試してみると:
ALTER TABLE my_table ADD CONSTRAINT fk_my_table FOREIGN KEY (role_name) REFERENCES pg_roles(rolname) ON UPDATE CASCADE;
私は得る:
ERROR: referenced relation "pg_roles" is not a table
システムカタログ(pg_catalog)テーブルのフィールドを指す外部キーを持つことは可能ですか?
私が次のことを試してみると:
ALTER TABLE my_table ADD CONSTRAINT fk_my_table FOREIGN KEY (role_name) REFERENCES pg_roles(rolname) ON UPDATE CASCADE;
私は得る:
ERROR: referenced relation "pg_roles" is not a table
不可能です。
システムテーブルを使用しようとすると、次のようなエラーが発生します
********** Error **********
ERROR: permission denied: "pg_attribute" is a system catalog
SQL state: 42501
権限を上書きしても、システムは制約を適用しません。そのため、システムテーブル参照を使用して制約を作成することはできません。
役割がほとんどない場合は、手動チェックを行うか、pg_rolesから一時テーブルを作成してから制約を作成します。
create temp table test1 as select * from pg_roles