aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/postgresql
diff options
context:
space:
mode:
authorAndrew White <pixeltrix@users.noreply.github.com>2017-03-29 14:39:02 +0100
committerGitHub <noreply@github.com>2017-03-29 14:39:02 +0100
commit55ccec637212a2232a64f86360b2a25fa1c25759 (patch)
tree37c2fc553e267d3c0072caa9bda3df419665c743 /activerecord/lib/active_record/connection_adapters/postgresql
parenta02fb802e9cb87f751c34c5a25c4b18cfc3b6a6a (diff)
parentdbd2fc8907e7fa4756ea26c5c52334cd4baefd2b (diff)
downloadrails-55ccec637212a2232a64f86360b2a25fa1c25759.tar.gz
rails-55ccec637212a2232a64f86360b2a25fa1c25759.tar.bz2
rails-55ccec637212a2232a64f86360b2a25fa1c25759.zip
Merge pull request #28478 from kamipo/fix_primary_keys_across_multiple_schemas
Fix `primary_keys` across multiple schemas
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/postgresql')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb16
1 files changed, 7 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
index ea62302988..1d439acb07 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
@@ -343,16 +343,14 @@ module ActiveRecord
end
def primary_keys(table_name) # :nodoc:
- scope = quoted_scope(table_name)
select_values(<<-SQL.strip_heredoc, "SCHEMA")
- SELECT column_name
- FROM information_schema.key_column_usage kcu
- JOIN information_schema.table_constraints tc
- USING (table_schema, table_name, constraint_name)
- WHERE constraint_type = 'PRIMARY KEY'
- AND kcu.table_name = #{scope[:name]}
- AND kcu.table_schema = #{scope[:schema]}
- ORDER BY kcu.ordinal_position
+ SELECT a.attname FROM pg_index i
+ CROSS JOIN generate_subscripts(i.indkey, 1) k
+ JOIN pg_attribute a
+ ON a.attrelid = i.indrelid
+ AND a.attnum = i.indkey[k]
+ WHERE i.indrelid = #{quote(quote_table_name(table_name))}::regclass
+ AND i.indisprimary
SQL
end