Postgresql

AWS Aurora Postgres 12 設置排序規則

  • October 19, 2021

我也在堆棧溢出上發布了這個,但在那裡沒有得到太多的關注。如果我無法在這裡獲得一些想法,那麼我可能會向 AWS 開一張支持票。

我正在嘗試將 AWS Aurora Postgres 12 上的排序規則設置為使用者定義的排序規則類型。

CREATE COLLATION ndcoll (provider = icu, locale = 'und', deterministic = false);

我能夠很好地創建排序規則。它最終被輸入到 pg_collat​​ions 表中。

但是,當我嘗試使用這個新的使用者定義排序規則創建數據庫時,我一直收到錯誤消息SQL Error [42809]: ERROR: invalid locale name: "ndcoll"

這是創建數據庫語句:

create database "foo" with template 'bar' lc_collate = "ndcoll";

我知道還有一種方法可以使用自定義參數組在伺服器級別設置排序規則。但是我使用 aurora-postgres 12 的參數組系列沒有可用於設置排序規則的參數。創建使用者定義的排序規則後,我重新啟動了 Aurora 伺服器,但仍然無法讓數據庫辨識語言環境。我可能也不了解 locale 和 lc_collat​​e 。也許我從根本上存在誤解。

是否有人對我如何使用使用者定義的排序規則有任何見解 1)使用此使用者定義的排序規則創建新數據庫或 2)將伺服器級別的排序規則設置為 aurora-postgres12 參數組中的非確定性排序規則家庭。

提前致謝!

我收到了關於SO的答案。

您不能在 Postgres 12 的數據庫級別使用非確定性排序規則。您只能在列定義中使用非確定性排序規則。

locale參數CREATE DATABASE需要一個可以被setlocale底層作業系統的 POSIX 函式辨識和使用的語言環境名稱,或者如果作業系統是 Windows,則為任何等效名稱。

另一方面,使用者定義的排序規則的名稱,CREATE COLLATION其範圍僅為目前數據庫,不必特別匹配任何內容。有時它們碰巧與相關區域設置的名稱一致,但它們不必如此,例如在您選擇的ndcoll.

這就是為什麼CREATE DATABASE失敗並出現錯誤:無效的語言環境名稱:“ndcoll”

如果 PostgreSQL 支持 ICU 語言環境作為數據庫的預設排序規則,則und可以用作 locale 參數,並且一些其他參數將指示語言環境提供者是 ICU。

但是,它們在 PostgreSQL 的任何目前版本(直到並包括版本 14)中都不受支持,因此無論如何都是不可能的,除非 Amazon 在 Aurora 中實現了這一點。

引用自:https://dba.stackexchange.com/questions/301189