pg_restore не удалось выполнить запрос: ОШИБКА: неверное имя локали: en_US.UTF-8

Я использую pg_restore в Windows 10 с файлом дампа, сделанным в Linux.

Я получаю эту ошибку

Я ищу в Интернете, но я не нахожу ответа.

[НОВОЕ]: я устанавливаю Ubuntu на свой компьютер, чтобы использовать pg_restore, но когда я отправляю

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

командная строка заблокирована.

У кого-то есть эта проблема?


person riwanab    schedule 04.02.2017    source источник
comment
Создайте новую базу данных в UTF-8 вручную перед восстановлением и используйте параметры pg_restore, которые пропускают создание базы данных.   -  person Daniel Vérité    schedule 04.02.2017


Ответы (2)


Ваша новая установка 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.

person pbuck    schedule 07.12.2020

Вам нужно будет провести небольшое исследование локалей. Начать следует с документации.

Postgres полагается на операционную систему для получения информации о локали. Имена различаются между Posix и Windows. Предположительно, самое простое решение — как-то изменить имя. Возможно, есть способ заставить Windows понимать имена Posix.

person Gordon Linoff    schedule 04.02.2017
comment
Это может быть полезно: Windows Имена локалей, хотя некоторые имена, такие как 'Spanish_Spain.1252', которые не состоят из двух букв и не разделены тире (но разделены подчеркиванием) , и 1252 (что означает кодировку Windows-1252). - person joanolo; 05.02.2017