powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
12 сообщений из 12, страница 1 из 1
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39679872
Добрый день.
Подскажите по переносу БД Postgresql с WIndows на Linix

На Windows кодировка:

lc_collate: ru1251
lc_ctype: ru1251
lc_messages: ru1251
lc_monetary: ru1251
lc_numeric: ru1251
lc_time: ru1251
server_encoding: utf8

На Linux такую же кодировку (utf8) вместе с lc_collate и lc_ctype ru1251 выставить невозможно - ругается, что несовместимая кодировка и локаль.

На сайте pgsql есть заметка:
https://www.postgresql.org/docs/9.6/static/multibyte.html
An important restriction, however, is that each database's character set must be compatible with the database's LC_CTYPE (character classification) and LC_COLLATE (string sort order) locale settings. For C or POSIX locale, any character set is allowed, but for other locales there is only one character set that will work correctly. (On Windows, however, UTF-8 encoding can be used with any locale.)

В случае дампа с Windows на Linux (на Linux пробовал разные сочетания локали/кодировки) дамп встаёт без половины данных.

Что можно сделать? Пробовал выгружать через pg_dump --encoding=utf8, но остановил процесс - конвертация, по моим оценкам, займёт пару недель.


Спасибо!
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39679875
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Федор Романов,

покажите
Код: sql
1.
select datname, datcollate, datctype from pg_database  ;



server_encoding слегка намекает, что кластер-то в человеческом utf8. Ну и попробуйте дамп запускать с linux хоста.
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680107
Melkij,
select datname, datcollate, datctype from pg_database ;

Код: plsql
1.
2.
3.
4.
"postgres";"Russian_Russia.1251";"Russian_Russia.1251"
"main_db";"Russian_Russia.1251";"Russian_Russia.1251"
"template1";"Russian_Russia.1251";"Russian_Russia.1251"
"template0";"Russian_Russia.1251";"Russian_Russia.1251"



+

SELECT name, setting FROM pg_settings WHERE category ~ 'Locale';


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
"timezone_abbreviations";"Default"
"TimeZone";"Europe/Moscow"
"server_encoding";"UTF8"
"lc_time";"Russian_Russia.1251"
"lc_numeric";"Russian_Russia.1251"
"lc_monetary";"Russian_Russia.1251"
"lc_messages";"Russian_Russia.1251"
"lc_ctype";"Russian_Russia.1251"
"lc_collate";"Russian_Russia.1251"
"IntervalStyle";"postgres"
"extra_float_digits";"0"
"default_text_search_config";"pg_catalog.russian"
"DateStyle";"ISO, DMY"
"client_encoding";"UNICODE"
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680116
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Федор,
правильный совет уже прозвучал:
MelkijНу и попробуйте дамп запускать с linux хоста.
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680117
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Федор Романов,

ну, печаль.
pg_dump во что упирался? Если в CPU сделайте формат директории для дампа и снимайте в число потоков по числу ядер. -Fd -j число_ядер -Z0
-Z0 чтобы не тратить CPU на сжатие, которое дефолтно для custom и directory форматов включено
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680185
Павел Лузанов,

К сожалению, не помогло.

Запустил снятие дампа с Linux

Код: python
1.
pg_dump --dbname=main_db --username=archuser --host=172.16.5.100 > /home/dumppg.sql



Получил дамп и залил его:

Код: python
1.
psql -U archuser main_db < /home/dumppg.sql



Дамп "залился", но половины данных опять нет. Кодировка и локали без изменений.
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680196
Melkij,

да, в процессор.

Спасибо, буду пробовать так, как подсказали!
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680243
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Федор Романов,

Непонятно, конечно.
Если подключиться из linux: psql -d main_db -U archuser -h 172.16.5.100
запросы тоже половины данных не показывают (как это выглядит-то)?
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680303
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Федор РомановДамп "залился", но половины данных опять нет. Кодировка и локали без изменений.

Что значит "половины данных нет"?
Были ошибки при dump или восстановлении?

Вы вообще уверены что это изза кодировки а не что то другое?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680405
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Федор Романовдамп встаёт без половины данных.

Если хотите получить хороший ответ, то задавайте вопрос конкретно. А то людям приходится гадать, какие данные у вас не встают.
Но например, роли и индексы не должны вставать, а вставание некоторых других объектов зависит от ключей командной строки pg_dump, которая у вас довольно куцая.
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680476
Коллеги, спасибо за помощь, запустил конвертацию базу в UTF8 и дамп залился.

Спасибо!
...
Рейтинг: 0 / 0
Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
    #39680520
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Досадно, а то я уже нашёл способ настроить на Windows-1251. Впрочем, мне и самому было нужно: только что установил PostgreSQL в Linux (раньше пользовался только в Windows и то мало), поэтому кое-что оказалось неожиданным: почему нельзя задать русскую кодировку своей базы?
Оказалось, настройка по умолчанию наследуется от "кластера серверов", откуда попадает в шаблон базы "template1", откуда в новую базу.
Но это можно переопределить:

Код: plaintext
CREATE DATABASE test_rus WITH OWNER=postgres ENCODING='UTF8' LC_COLLATE='ru_RU.UTF8' LC_CTYPE='ru_RU.UTF8' TABLESPACE='pg_default' TEMPLATE='template0';

Здесь шаблон 'template0' в отличие от 'template1' не навязывает кодировку. После чего можно импортировать архив, созданный по pg_dump (или можно добавить в него этот SQL оператор создания базы, если его нет).
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перенос Windows - Linix, проблема с кодировкой cp1251-utf8
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]