我在 Heroku 使用 Basic 数据库计划。这在支持语言环境的 Postgres 9.1 上运行。我在我的应用程序中排序时遇到问题,因为字符 ÅÄÖ 没有得到正确处理(在瑞典应该如此)。
要设置的设置是 LC_COLLATE
,它处理字符串排序。问题是我找不到任何方法在 Heroku 上进行设置。创建的数据库得到 lc_collate=en_US.UTF-8
,但我需要将其设置为 sv_SE.UTF-8
。
此LC_COLLATE
设置在创建数据库后无法更改,因此我无法通过 psql 控制台更改它。
那么,我该如何设置呢?
最佳答案
你是对的,不能改变数据库的默认排序规则; LC_COLLATE
是在 Heroku 数据库服务器上设置的环境变量,它不在您的控制范围内,并且在您的数据库创建之前就已经设置好了。但是,您可以为各个列设置默认排序规则:
CREATE TABLE new_table (
foo varchar COLLATE "sv_SE.UTF-8",
bar varchar COLLATE "sv_SE.UTF-8"
);
ALTER TABLE existing_table ALTER COLUMN baz TYPE varchar COLLATE "sv_SE.UTF-8";
有关更多信息,请参阅 22.2. Collation Support在 PostgreSQL 手册中。
您可能需要也可能不需要先CREATE COLLATION
。此外,所有这一切都取决于 Heroku 数据库服务器是否安装了正确的语言环境数据——尽管如果它们没有安装,您可能会很好地要求部署它,因为它不会伤害任何人。
否则,您当然可以在 EC2 中运行您自己的 PostgreSQL 实例,使用您想要的任何自定义设置。这需要投入管理时间,但老实说运行 9.1 非常简单,甚至包括流复制。甚至可能更便宜。缺点是保持数据库运行成为您的问题,而不是 Heroku 操作团队的问题。
关于postgresql - 在 Heroku postgres 上设置语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12334986/