【问题标题】:pg_restore could not execute query: ERROR: invalid locale name: "en_US.UTF-8"pg_restore 无法执行查询:错误:无效的语言环境名称:“en_US.UTF-8”
【发布时间】:2017-06-21 19:53:18
【问题描述】:

我在 Windows 10 上使用 pg_restore 和在 Linux 上制作的转储文件。

我在网上搜索,但没有找到答案。

[新]: 我在我的计算机上安装 Ubuntu 以使用 pg_restore 但是当我发送时

pg_restore -d mydatabase /home/user/Documents/dumpfile.dump

命令行被阻塞。

有人有这个问题吗?

【问题讨论】:

  • 在恢复之前手动创建 UTF-8 新数据库,并使用 pg_restore 选项跳过数据库创建。

标签: postgresql pg-restore


【解决方案1】:

您的新 ubuntu 安装尚未定义 en_US.UTF-8 语言环境。因此,当您尝试恢复转储文件时,转储文件会尝试执行以下操作:

CREATE DATABASE <database> WITH TEMPLATE = ... LC_COLLATE = 'en_US.UTF-8'...

但是,'en_US.UTF-8' 不是由您的新 ubuntu 服务器定义的。首先,您可以验证这一点:

# list all "known" locales. In my case, on new Ubuntu 20, I get:
$ locale -a
C
C.UTF-8
POSIX

编辑现有的/etc/locale.gen 文件,其中包含可能的语言环境列表。大多数语言环境将被注释掉。这些不会被定义,因此,请取消注释带有 'en_US.UTF-8' 的行。

运行(以 root 身份)locale-gen。

root# locale-gen
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

请注意,它现在是已配置的语言环境:

$ locale -a
C
C.UTF-8
POSIX
en_US.utf8

(是的,是小写utf8,没问题)

重新启动您的 postgres 服务器(因此它会看到新的语言环境 - 您无需重新启动 ubuntu 服务器本身),然后您恢复 show now work。

【讨论】:

    【解决方案2】:

    您需要对语言环境进行一些研究。开始的地方是documentation

    Postgres 依赖于操作系统来获取区域信息。 Posix 和 Windows 的名称不同。据推测,最简单的解决方案是以某种方式更改名称。可能有一种方法可以让 Windows 理解 Posix 名称。

    【讨论】:

    • 这可能会有所帮助:Windows Locale names,尽管有些名称如“Spanish_Spain.1252”是两字母代码,并且非 破折号分隔(但下划线分隔),常见的是 1252(意思是 Windows-1252 编码)。
    猜你喜欢
    • 2018-09-21
    • 2018-09-21
    • 2019-07-31
    • 2011-05-18
    • 2021-06-20
    • 2017-11-15
    • 2021-04-07
    • 2019-09-04
    相关资源
    最近更新 更多