postgresql - 在 Heroku postgres 上设置语言环境

标签 postgresql heroku

我在 Heroku 使用 Basic 数据库计划。这在支持语言环境的 Postgres 9.1 上运行。我在我的应用程序中排序时遇到问题,因为字符 ÅÄÖ 没有得到正确处理(在瑞典应该如此)。

要设置的设置是 LC_COLLATE,它处理字符串排序。问题是我找不到任何方法在 Heroku 上进行设置。创建的数据库得到 lc_collat​​e=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/

相关文章:

ruby-on-rails - PostgreSQL安装报错--无法分配内存

sql - 在 Postgres 中计算百分比

node.js - 如何在 Docker 中为 Postgres 运行 sql 脚本?

database - Postgres 中的字符串;验证字符串的内容

mongodb - 在heroku中存储数据库连接字符串的安全方法

heroku - 无法将 Hostinger 自定义域指向 herokuapp

json - Postgres 将 JSONB 单元格展平为 View 中的行

postgresql - 使用 unnest 在 postgreSQL 中批量更新

heroku - 无法检测到 rake 任务

javascript - 如何设置与 Heroku 子域相同的域 cookie?