aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2017-02-09 23:20:13 -0300
committerGitHub <noreply@github.com>2017-02-09 23:20:13 -0300
commit55d66e214825b89442383f90adf575cf8c96568c (patch)
treee57b54ef0314076221077bd29f121bdaf2671b71 /activerecord/lib
parentf04a49b033e3da54a52f76289863ec87a3c30438 (diff)
parent61241833ec54fbb030da490eecc5bc69f44dc86e (diff)
downloadrails-55d66e214825b89442383f90adf575cf8c96568c.tar.gz
rails-55d66e214825b89442383f90adf575cf8c96568c.tar.bz2
rails-55d66e214825b89442383f90adf575cf8c96568c.zip
Merge pull request #27957 from kamipo/fix_test_composite_primary_key_out_of_order
Fix `test_composite_primary_key_out_of_order`
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb18
1 files changed, 10 insertions, 8 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 bd8aab526e..a4b1723fc7 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
@@ -426,14 +426,16 @@ module ActiveRecord
def primary_keys(table_name) # :nodoc:
select_values(<<-SQL.strip_heredoc, "SCHEMA")
- SELECT a.attname
- FROM pg_index i
- CROSS JOIN unnest(i.indkey) as k
- JOIN pg_attribute a
- ON a.attrelid = i.indrelid
- AND a.attnum = k
- WHERE i.indrelid = #{quote(quote_table_name(table_name))}::regclass
- AND i.indisprimary
+ WITH pk_constraint AS (
+ SELECT conrelid, unnest(conkey) AS connum FROM pg_constraint
+ WHERE contype = 'p'
+ AND conrelid = #{quote(quote_table_name(table_name))}::regclass
+ ), cons AS (
+ SELECT conrelid, connum, row_number() OVER() AS rownum FROM pk_constraint
+ )
+ SELECT attr.attname FROM pg_attribute attr
+ INNER JOIN cons ON attr.attrelid = cons.conrelid AND attr.attnum = cons.connum
+ ORDER BY cons.rownum
SQL
end