Method: ActiveRecord::ConnectionAdapters::PostgreSQL::ReferentialIntegrity#check_all_foreign_keys_valid!

Defined in:
activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb

#check_all_foreign_keys_valid!Object

:nodoc:



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb', line 41

def check_all_foreign_keys_valid! # :nodoc:
  sql = <<~SQL
    do $$
      declare r record;
    BEGIN
    FOR r IN (
      SELECT FORMAT(
        'UPDATE pg_catalog.pg_constraint SET convalidated=false WHERE conname = ''%1$I'' AND connamespace::regnamespace = ''%2$I''::regnamespace; ALTER TABLE %2$I.%3$I VALIDATE CONSTRAINT %1$I;',
        constraint_name,
        table_schema,
        table_name
      ) AS constraint_check
      FROM information_schema.table_constraints WHERE constraint_type = 'FOREIGN KEY'
    )
      LOOP
        EXECUTE (r.constraint_check);
      END LOOP;
    END;
    $$;
  SQL

  transaction(requires_new: true) do
    execute(sql)
  end
end