我在Heroku使用基本数据库计划.这适用于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";
Run Code Online (Sandbox Code Playgroud)
更多信息,请参见22.2.PostgreSQL手册中的整理支持.
您可能需要或可能不需要CREATE COLLATION先.此外,所有这些都取决于安装了正确的语言环境数据的Heroku数据库服务器 - 尽管如果它们没有安装,您可能会很好地请求部署,因为它不会伤害任何人.
如果做不到这一点,您当然可以在EC2中运行自己的PostgreSQL实例,无论您想要什么样的自定义设置.这需要投入管理时间,但诚实地运行9.1非常简单,甚至包括流复制.甚至可能更便宜.缺点是保持数据库运行成为你的问题而不是Heroku ops团队的问题.