Drop foreign keys generally in POSTGRES

前端 未结 2 598
长发绾君心
长发绾君心 2021-01-11 15:45

How can I drop Foreign keys in general. I mean, if I have many foreign key constraints in a table. like

MonthlyEvaluatedBudgetTable Contraints:

相关标签:
2条回答
  • 2021-01-11 16:32

    Loop it in DO statement, like:

    b=# create table a (a int primary key, b int unique);
    CREATE TABLE
    b=# create table b (a int references a(a), b int references a(b));
    CREATE TABLE
    b=# do
    $$
    declare r record;
    begin
    for r in (select constraint_name from information_schema.table_constraints where table_schema = 'public' and table_name='b') loop
      raise info '%','dropping '||r.constraint_name;
      execute CONCAT('ALTER TABLE "public"."b" DROP CONSTRAINT '||r.constraint_name);
    end loop;
    end;
    $$
    ;
    INFO:  dropping b_a_fkey
    INFO:  dropping b_b_fkey
    DO
    
    0 讨论(0)
  • 2021-01-11 16:42

    Thank you Vao Tsun for the solution. It helped me.

    In my case (Posgresql 9.6) I just had to add a minor "improvement"

    and constraint_name like 'fk_%' additional constraint to prevent errors like:

    PG::SyntaxError: ERROR:  syntax error at or near "2200" LINE 1: ALTER TABLE "relationships" DROP CONSTRAINT 2200_856906_1_no...

    execute <<-SQL.squish
      DO $$
      declare r record;
      begin
        for r in (
          select constraint_name
          from information_schema.table_constraints
          where table_name='relationships'
          and constraint_name like 'fk_%'
        ) loop
        raise info '%','dropping '||r.constraint_name;
        execute CONCAT('ALTER TABLE "relationships" DROP CONSTRAINT '||r.constraint_name);
        end loop;
      end;
      $$
    SQL
    
    0 讨论(0)
提交回复
热议问题