【问题标题】:Set locale on Heroku postgres在 Heroku postgres 上设置语言环境
【发布时间】:2012-09-08 22:28:19
【问题描述】:

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

要设置的设置是LC_COLLATE,它处理字符串排序。问题是我找不到任何方法在 Heroku 上设置它。创建的数据库获取lc_collate=en_US.UTF-8,但我需要将其设置为sv_SE.UTF-8

LC_COLLATE 设置在数据库创建后无法更改,因此我无法通过 psql 控制台更改它。

那么,我该如何设置呢?

【问题讨论】:

    标签: postgresql heroku


    【解决方案1】:

    您是正确的,不能更改数据库的默认排序规则; 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";
    

    有关更多信息,请参阅 PostgreSQL 手册中的22.2. Collation Support

    您可能需要也可能不需要先CREATE COLLATION。此外,所有这一切都取决于安装了正确语言环境数据的 Heroku 数据库服务器——尽管如果他们没有安装,您可能会很好地要求部署它,因为它不会伤害任何人。

    如果不这样做,您当然可以在 EC2 中运行您自己的 PostgreSQL 实例,并使用您想要的任何自定义设置。这需要投入管理时间,但老实说运行 9.1 非常简单,甚至包括流复制。甚至可能更便宜。缺点是保持数据库运行成为您的问题,而不是 Heroku 操作团队的问题。

    【讨论】:

    • 哇,真烦人。 PostgreSQL 支持通过CREATE DATABASE ... LC_CTYPE 'blah' LC_COLLATE 'blah' 设置每个数据库的排序规则; Heroku 没有向用户公开它,这很糟糕。
    • 谢谢,更改列排序规则似乎可行。不过,我确实必须先创建排序规则。谢谢。
    • 谢谢!最后。我已经为此苦苦挣扎太久了。对我来说,它不适用于“sv-SE.UTF-8”,而仅适用于“sv-SE”。使用 rails,我做了一个 rake 任务,用以下代码更改排序规则:---- namespace :setup do task :heroku_collat​​ion => :environment do ActiveRecord::Base.establish_connection ActiveRecord::Base.connection.execute 'ALTER TABLE Municipalities ALTER COLUMN name TYPE varchar COLLATE "sv_SE";'结束结束
    【解决方案2】:

    我通过创建一个改变相关列的排序规则的迁移解决了这个问题(就像 willglyn 建议的那样):

    class SetSwedishCollationForStores < ActiveRecord::Migration
      def up
        execute 'ALTER TABLE stores ALTER COLUMN city  TYPE varchar COLLATE "sv_SE";' 
        execute 'ALTER TABLE stores ALTER COLUMN title TYPE varchar COLLATE "sv_SE";' 
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2011-07-14
      • 2010-09-09
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2011-01-24
      相关资源
      最近更新 更多