From 0f7e6372ef3eae0b3bde6634406cf4ad5b391914 Mon Sep 17 00:00:00 2001 From: Manfred Stienstra Date: Mon, 15 Jun 2026 21:31:40 +0200 Subject: [PATCH 1/3] Chance collations query for older PostgreSQL versions. --- .../collation/schema_statements.rb | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/lib/active_record/collation/schema_statements.rb b/lib/active_record/collation/schema_statements.rb index 649d67b..c266e77 100644 --- a/lib/active_record/collation/schema_statements.rb +++ b/lib/active_record/collation/schema_statements.rb @@ -18,14 +18,31 @@ def drop_collation(name) end def collations - internal_exec_query(<<~SQL, 'SCHEMA') - SELECT - pg_collation.collname, - pg_collation.colllocale - FROM pg_collation - JOIN pg_namespace - ON pg_collation.collnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public' - SQL + internal_exec_query(collations_sql, 'SCHEMA') + end + + private + + def collations_sql # rubocop:disable Metrics/MethodLength + if database_version >= 170_000 + <<~SQL + SELECT + pg_collation.collname, + pg_collation.colllocale + FROM pg_collation + JOIN pg_namespace + ON pg_collation.collnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public' + SQL + else + <<~SQL + SELECT + pg_collation.collname, + pg_collation.colliculocale AS colllocale + FROM pg_collation + JOIN pg_namespace + ON pg_collation.collnamespace = pg_namespace.oid AND pg_namespace.nspname = 'public' + SQL + end end end end From 7bbdc63f046a832050d1a3b6e6caf05cd4aaec1d Mon Sep 17 00:00:00 2001 From: Manfred Stienstra Date: Mon, 15 Jun 2026 21:32:07 +0200 Subject: [PATCH 2/3] Updated generated schema. --- test/dummy/db/schema.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/dummy/db/schema.rb b/test/dummy/db/schema.rb index e3c5d98..4aeed5a 100644 --- a/test/dummy/db/schema.rb +++ b/test/dummy/db/schema.rb @@ -14,8 +14,8 @@ # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" - create_collation("natural_de", "de-u-ka-shifted-kn-ks-level1-kv-symbol") - create_collation("natural_en", "en-u-ka-shifted-kn-ks-level1-kv-symbol") + create_collation("natural_de", "de-u-kn-true-ks-level1-ka-shifted-kv-symbol") + create_collation("natural_en", "en-u-kn-true-ks-level1-ka-shifted-kv-symbol") create_table "clients", force: :cascade do |t| t.text "name", null: false From 45b428dbd0b2e74ed9dbcce14a9ec7e46969fb2d Mon Sep 17 00:00:00 2001 From: Manfred Stienstra Date: Mon, 15 Jun 2026 21:36:24 +0200 Subject: [PATCH 3/3] Add newer and older Postgres to test matrix. --- .github/workflows/test.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fa7bb06..9893239 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,11 +7,12 @@ jobs: build: strategy: matrix: - ruby_version: ["3.4", "3.3"] + ruby_version: ["4.0", "3.3"] + postgres_version: ["18", "15"] runs-on: ubuntu-latest services: postgres: - image: postgres:17 + image: postgres:${{ matrix.postgres_version }} env: # Default database that is created when the image is first started. POSTGRES_DB: active_record_collation_test