database - 在 Linux 上为 PostgreSQL 配置语言环境

标签 database postgresql locale latin1

我在设置和运行特定数据库时遇到问题。我正在尝试恢复从其他人那里获得的 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)] 处理目录时出错:

pg_restore:[archiver (db)] 来自目录条目 2308 的错误; 1262 16386 数据库 maggieprod postgres

pg_restore: [archiver (db)] 无法执行查询:错误:编码 LATIN1 与区域设置 en_CA.utf8 不匹配

详细信息:所选的 LC_CTYPE 设置需要编码 UTF8。 命令是:CREATE DATABASE maggieprod WITH TEMPLATE = template0 ENCODING = 'LATIN1' TABLESPACE = magdat;

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

createdb:数据库创建失败:错误:编码 LATIN1 与区域设置 en_CA.utf8 不匹配

详细信息:所选的 LC_CTYPE 设置需要编码 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 zh_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 zh_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 做到这一点?此外,当我尝试打开转储时,我看到很多垃圾字符,我假设这是编码的原因,我该如何正确看待它?

感谢您的帮助。

最佳答案

您需要使用与编码匹配的区域设置创建数据库,例如,

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

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

或者,创建编码为 UTF8 的数据库。只要您的所有客户端都正确设置了客户端编码,就不会有什么不同。

关于database - 在 Linux 上为 PostgreSQL 配置语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4929180/

相关文章:

mysql - phpmyadmin 显示 "No tables found in database."但左侧边栏上仍然存在表格?

php - html 表单到 sql 数据库与 php

java - (可能)数百个移动客户端访问 MySQL 数据库的最佳方式是什么?

postgresql - Go:将时间戳格式化为默认的 postgres 格式

php - 2 数据库设计问题。层次树

postgresql - 如何从 csv 文件更新表?

PostgreSQL 存储过程版本控制

Django 1.9 sr_Latn 语言环境不起作用

linux - sed 只识别 HEX 序列的一部分

python - 在 python 中处理国际日期