外部キー制約を動的に削除して再作成するには、すべてを関数でラップするか、DO
を使用します。 コマンド:
DO
$body$
DECLARE
_con text := (
SELECT quote_ident(conname)
FROM pg_constraint
WHERE conrelid = 'myschema.mytable'::regclass
AND confrelid = 'myschema.myreftable'::regclass
LIMIT 1 -- there could be multiple fk constraints. Deal with it ...
);
BEGIN
EXECUTE '
ALTER TABLE wuchtel12.bet DROP CONSTRAINT ' || _con;
-- do stuff here
EXECUTE '
ALTER TABLE myschema.mytable
ADD CONSTRAINT ' || _con || ' FOREIGN KEY (col)
REFERENCES myschema.myreftable (col)';
END
$body$
ALTER TABLE
を使用するには、テーブルを所有している必要があります 。
それ以外の場合は、LANGUAGE plpgsql SECURITY DEFINER
を使用して関数を作成できます。 (同じボディを使用)および
ALTER FUNCTION foo() OWNER TO postgres;
postgres
ここでスーパーユーザーになるか、テーブルの所有者になります。
ただし、セキュリティについてマニュアルに記載されている内容を必ず知っておいてください。
マニュアルには、動的コマンドの詳細も記載されています。