【问题标题】:Configuring Locales on Linux for PostgreSQL在 Linux 上为 PostgreSQL 配置语言环境
【发布时间】:2011-02-08 03:05:19
【问题描述】:

我在设置和运行特定数据库时遇到问题。我正在尝试恢复从其他人那里获得的 postgreSQL 转储。试了好几种方法都没用。

  1. 直接来自 pg_restore

    pg_restore -C -d postgres --exit-on-error maggie_prod_20111221.dump.sql

  2. 先创建数据库和表空间

    createdb -T template0 maggieprod -E LATIN1

    SQL:CREATE TABLESPACE magdat OWNER maggie LOCATION '/somewhere/magdat';

    pg_restore -v -d template1 maggie_prod_20110121.dump.sql

使用第一种方法,我得到以下信息:

pg_restore: [archiver (db)] Error while PROCESSING TOC:

pg_restore: [archiver (db)] Error from TOC entry 2308; 1262 16386 DATABASE maggieprod postgres

pg_restore: [archiver (db)] could not execute query: ERROR: encoding LATIN1 does not match locale en_CA.utf8

DETAIL: The chosen LC_CTYPE setting requires encoding UTF8. Command was: CREATE DATABASE maggieprod WITH TEMPLATE = template0 ENCODING = 'LATIN1' TABLESPACE = magdat;

使用第二个,当我尝试创建数据库时,我得到:

createdb: database creation failed: ERROR: encoding LATIN1 does not match locale en_CA.utf8

DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.

所以我似乎无法创建 LATIN1 编码数据库?这是为什么?我是语言环境和编码的新手,对它们不太了解。我只知道转储是由 LATIN1 数据库制作的。

locale 的输出是:

LANG=en_CA.utf8 LC_CTYPE="en_CA.utf8" LC_NUMERIC="en_CA.utf8" LC_TIME="en_CA.utf8" LC_COLLATE="en_CA.utf8" LC_MONETARY="en_CA.utf8" LC_MESSAGES="en_CA.utf8" LC_PAPER="en_CA.utf8" LC_NAME="en_CA.utf8" LC_ADDRESS="en_CA.utf8" LC_TELEPHONE="en_CA.utf8" LC_MEASUREMENT="en_CA.utf8" LC_IDENTIFICATION="en_CA.utf8" LC_ALL=

locale -a 的输出是:

C en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZW.utf8 POSIX

我在第二个命令中没有看到 LATIN1,是吗?如果是这样,我将如何添加它?假设我需要更改计算机上的区域设置对我来说是否正确?如果是这样,有没有办法只为 postgreSQL 做到这一点?另外,当我尝试打开转储时,我看到很多乱码,我假设这是因为编码,我该如何正确看待它?

感谢您的帮助。

【问题讨论】:

    标签: database postgresql locale latin1


    【解决方案1】:

    您需要使用与编码匹配的语言环境创建数据库,例如,

    createdb -T template0 maggieprod -E LATIN1 --locale=en_CA
    

    由于您没有安装所有语言环境,我猜您使用的是 Debian 或 Ubuntu。在这种情况下,请致电dpkg-reconfigure locales 或安装locales-all 包。

    或者,使用编码UTF8 创建数据库。只要您的所有客户端都正确设置客户端编码,就不会产生影响。

    【讨论】:

    • 安装 locales-all 包对我有用。谢谢。
    【解决方案2】:

    我在使用 The_Denominator 中的 createdb 语法时遇到了问题,所以我按照以下方式进行了操作:

    CREATE DATABASE maggieprod WITH ENCODING = 'LATIN1'
      LC_CTYPE = 'en_CA' LC_COLLATE = 'en_CA'
      TEMPLATE template0;
    

    【讨论】:

      【解决方案3】:

      如果您仍然有兴趣使用 recode 命令将您的数据库转储转换为您选择的字符集,然后再将其导入新数据库。请参阅此链接 - http://blog.e-shell.org/134

      【讨论】:

        猜你喜欢
        • 2018-09-21
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2022-12-10
        • 1970-01-01
        • 2023-04-04
        • 2015-06-29
        • 2019-02-21
        相关资源
        最近更新 更多