pg_restore无法执行查询:错误:无效的区域设置名称:" en_US.UTF-8"

时间:2017-02-04 14:01:53

标签: postgresql pg-restore

我在Windows 10上使用pg_restore,在Linux上使用转储文件。

I get this error

我在网上搜索但我找不到答案。

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

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

命令行被阻止。

有人有这个问题吗?

2 个答案:

答案 0 :(得分:0)

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

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

但是,新的ubuntu服务器未定义“ en_US.UTF-8”。首先,您可以验证以下内容:

# 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
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现在可以正常工作。

答案 1 :(得分:-3)

您需要对区域设置进行一些研究。起点是documentation

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