sql >> データベース >  >> RDS >> PostgreSQL

名前が不明なPostgreSQLドロップ制約

    外部キー制約を動的に削除して再作成するには、すべてを関数でラップするか、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 ここでスーパーユーザーになるか、テーブルの所有者になります。
    ただし、セキュリティについてマニュアルに記載されている内容を必ず知っておいてください。

    マニュアルには、動的コマンドの詳細も記載されています。




    1. 拡張機能を作成しようとしたときのPostgreSQLエラー

    2. AndroidSQLiteデータベースの単体テスト

    3. OracleFormsのクエリで表示項目の値を入力する

    4. SQL Server 2008のDateTimeOffsetをDateTimeに変換するにはどうすればよいですか?