diff options
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index a2eaac549e..975768a758 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -186,7 +186,6 @@ module ActiveRecord execute "ROLLBACK" end - # SCHEMA STATEMENTS ======================================== # Return the list of all tables in the schema search path. @@ -384,6 +383,16 @@ module ActiveRecord 'bigint' end end + + # PostgreSQL requires the ORDER BY columns in the select list for distinct queries. + # If you select distinct by a column though, you must pass that column in the order by clause too: + # + # distinct("posts.id", 'posts.id', 'posts.created_at') + def distinct(columns, *order_columns) + order_columns.delete_if &:blank? + sql = "DISTINCT ON (#{columns}) #{columns}" + sql << (order_columns.any? ? ", #{order_columns * ', '}" : '') + end private BYTEA_COLUMN_TYPE_OID = 17 |