module Foreigner::ConnectionAdapters::PostgreSQLAdapter
Public Instance Methods
foreign_keys(table_name)
click to toggle source
# File lib/foreigner/connection_adapters/postgresql_adapter.rb, line 6 def foreign_keys(table_name) fk_info = select_all %Q{ SELECT t2.relname AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confdeltype AS dependency FROM pg_constraint c JOIN pg_class t1 ON c.conrelid = t1.oid JOIN pg_class t2 ON c.confrelid = t2.oid JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid JOIN pg_namespace t3 ON c.connamespace = t3.oid WHERE c.contype = 'f' AND t1.relname = '#{table_name}' AND t3.nspname = ANY (current_schemas(false)) ORDER BY c.conname } fk_info.map do |row| options = {column: row['column'], name: row['name'], primary_key: row['primary_key']} options[:dependent] = case row['dependency'] when 'c' then :delete when 'n' then :nullify when 'r' then :restrict end ForeignKeyDefinition.new(table_name, row['to_table'], options) end end