查询失败:编码 "UTF8" 的排序规则 "numerickn" 不存在

Query failed: collation "numerickn" for encoding "UTF8" does not exist

我在 Postgresql (AWS RDS) table 中有一列 (vendor_name),它可以包含字母数字值。我想对这个专栏进行自然排序。

table中的示例数据如下

delta 20221120
delta 20220109
costco delivery 564
costco delivery 561
united 01672519702943
Uber

我在数据库中创建了一个排序规则,如下所示。

CREATE COLLATION IF NOT EXISTS numerickn (provider = icu, locale = 'en-u-kn-true')

如果有人对 UI 网格中的供应商名称列进行排序,我将在查询中动态添加以下子句。

ORDER BY "vendor" COLLATE "numerickn"

然而,它给出了以下错误,尽管我看到数据库中存在排序规则。

Error: Query failed: collation "numerickn" for encoding "UTF8" does not exist

我不确定如果数据库中存在整理,为什么它不起作用。在我的供应商名称中,数字可以出现在字符串中的任何位置,因此没有模式。

我找不到为什么它在舞台环境中不工作,而在我的本地环境中它可以工作。

最后,我放弃了整理逻辑,以仅在堆栈溢出中发现的不同方式实现了自然排序。

PostgreSQL ORDER BY issue - natural sort

我在 api 代码中使用 Nodejs。我的解决方案如下

qOrderBy = String.raw` ORDER BY  ARRAY(
        SELECT ROW(
            CAST(COALESCE(NULLIF(match[1], ''), '9223372036854775807') AS BIGINT),
            match[2]
          )
          FROM REGEXP_MATCHES(vendor, '(\d*)|(\D*)', 'g')
          AS match ) ${sortOrder}`
  }