-
-
Save PickledDragon/dd41f4e72b428175354d to your computer and use it in GitHub Desktop.
SELECT | |
tc.constraint_name, tc.table_name, kcu.column_name, | |
ccu.table_name AS foreign_table_name, | |
ccu.column_name AS foreign_column_name | |
FROM | |
information_schema.table_constraints AS tc | |
JOIN information_schema.key_column_usage AS kcu | |
ON tc.constraint_name = kcu.constraint_name | |
JOIN information_schema.constraint_column_usage AS ccu | |
ON ccu.constraint_name = tc.constraint_name | |
WHERE constraint_type = 'FOREIGN KEY' |
good job
I ported this to ruby gem Sequel DSL if anyone is interested Note: I removed the WHERE constraint_type = 'FOREIGN KEY'
clause, but it would be easy to add it in
def very_slow_constraint_lookup_for_table(table_name)
DB[Sequel.as(:information_schema__table_constraints, :tc)].
join(Sequel.as(:information_schema__key_column_usage, :kcu),
:tc__constraint_name => :kcu__constraint_name
).
join(Sequel.as(:information_schema__constraint_column_usage, :ccu),
:tc__constraint_name => :ccu__constraint_name
).
where(:tc__table_name => table_name.to_s).
all
end
very_slow_constraint_lookup_for_table("my_table")
Example results:
[{:constraint_catalog=>"vydia",
:constraint_schema=>"public",
:constraint_name=>"asdfg",
:table_catalog=>"vydia",
:table_schema=>"public",
:table_name=>"my_table",
:constraint_type=>"FOREIGN KEY",
:is_deferrable=>"NO",
:initially_deferred=>"NO",
:column_name=>"id",
:ordinal_position=>1,
:position_in_unique_constraint=>1},
{:constraint_catalog=>"vydia",
:constraint_schema=>"public",
:constraint_name=>"asdfg",
:table_catalog=>"vydia",
:table_schema=>"public",
:table_name=>"my_table",
:constraint_type=>"PRIMARY KEY",
:is_deferrable=>"NO",
:initially_deferred=>"NO",
:column_name=>"id",
:ordinal_position=>1,
:position_in_unique_constraint=>nil}]
very helpful, thanks!
Very helpful! I used it to base this off: https://gist.github.com/wlievens/e875e489a398f856dc96a8b8dc88ec2c
very nice, thanks!
very helpful! thanks man
hi,
thnx for sharing the code,
In postgreSQL we can have same constraint name in different schema with the same table name or different. In that case we are getting some incorrect records.
by adding constraint schema name as qualifier we can avoid duplicate
tc.constraint_schema = kcu.constraint_schema ,
ccu.constraint_schema = tc.constraint_schema
Thank you very much for sharing.
nice :)
nice one.
Thanks a lot ^^
Holy crap! Was this gist so popular? I didn't realize 😆
nice
Nice ;)