我也在堆栈溢出上发布了这个,但在那里没有得到太多的关注。如果我无法在这里获得一些想法,那么我可能会向 AWS 开一张支持票。
我正在尝试将 AWS Aurora Postgres 12 上的排序规则设置为用户定义的排序规则类型。
CREATE COLLATION ndcoll (provider = icu, locale = 'und', deterministic = false);
我能够很好地创建排序规则。它最终被输入到 pg_collations 表中。
但是,当我尝试使用这个新的用户定义排序规则创建数据库时,我一直收到错误消息SQL Error [42809]: ERROR: invalid locale name: "ndcoll"
这是创建数据库语句:
create database "foo" with template 'bar' lc_collate = "ndcoll";
我知道还有一种方法可以使用自定义参数组在服务器级别设置排序规则。但是我使用 aurora-postgres 12 的参数组系列没有可用于设置排序规则的参数。创建用户定义的排序规则后,我重新启动了 Aurora 服务器,但仍然无法让数据库识别语言环境。我可能也不了解 locale 和 lc_collate 。也许我从根本上存在误解。
是否有人对我如何使用用户定义的排序规则有任何见解 1)使用此用户定义的排序规则创建新数据库或 2)将服务器级别的排序规则设置为 aurora-postgres12 参数组中的非确定性排序规则家庭。
提前致谢!
的
locale
参数CREATE DATABASE
需要一个可以被setlocale
底层操作系统的 POSIX 函数识别和使用的语言环境名称,或者如果操作系统是 Windows,则为任何等效名称。另一方面,用户定义的排序规则的名称,
CREATE COLLATION
其范围仅为当前数据库,不必特别匹配任何内容。有时它们碰巧与相关区域设置的名称一致,但它们不必如此,例如在您选择的ndcoll
.这就是为什么
CREATE DATABASE
失败并出现错误:无效的语言环境名称:“ndcoll”如果 PostgreSQL 支持 ICU 语言环境作为数据库的默认排序规则,则
und
可以用作 locale 参数,并且一些其他参数将指示语言环境提供者是 ICU。但是,它们在 PostgreSQL 的任何当前版本(直到并包括版本 14)中都不受支持,因此无论如何都是不可能的,除非 Amazon 在 Aurora 中实现了这一点。
我收到了关于SO的答案。
您不能在 Postgres 12 的数据库级别使用非确定性排序规则。您只能在列定义中使用非确定性排序规则。