powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с загрузкой русскоязычных файлов в базу данных Postgres
14 сообщений из 14, страница 1 из 1
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756066
black_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исходные данные:

В папке C:\Program Files\PostgreSQL\9.6\data\tmp\00000 файл с русскими буквами
https://yadi.sk/i/wfWOHgBrk1nY_w

Командой из DataGrip удается прочитать но русские буквы не читаются (вместо букв вопросы)
select pg_ls_dir from pg_ls_dir('tmp\00001');
https://yadi.sk/i/P31Q7VQT2R9VIg

Если побывать читать из pgAdmin, то второй запрос ничего не возвращает

Вопрос: как прочитать русские буквы из файлов?
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756067
black_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут опечатка C:\Program Files\PostgreSQL\9.6\data\tmp\00000 правильно так В папке C:\Program Files\PostgreSQL\9.6\data\tmp\00001
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756073
Morruth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кодировки какие стоят, клиентская и серверная?
show client_encoding;
show server_encoding;
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756174
black_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UTF-8
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756250
Morruth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для начала попробуйте сделать этот запрос из psql
ЗЫ проверил на линуксе — всё ок, в какой там кодировке на виндах имена файлов лежат?
можно попробовать поиграть с кодировкой - попробовать cp1251/utf-16
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756330
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black_sqlUTF-8
А какая кодировка текста внутри указанного файла?
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756331
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, извиняюсь, не обратил внимания, что речь идёт о загрузке имени файла, а не его содержимого.
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756332
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Morruthв какой там кодировке на виндах имена файлов лежат?
Лежат-то они в UTF-16, но получать из можно как в UTF-16, так и в текущей ANSI, зависит от использованного API. Кто ж знает что там у этого pg_ls_dir внутре?..
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756334
Morruth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovMorruthв какой там кодировке на виндах имена файлов лежат?
Лежат-то они в UTF-16, но получать из можно как в UTF-16, так и в текущей ANSI, зависит от использованного API. Кто ж знает что там у этого pg_ls_dir внутре?..

Тот, кто исходники смотрел ;)
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756362
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот она: https://github.com/postgres/postgres/blob/REL_11_STABLE/src/backend/utils/adt/genfile.c#L443
readdir под виндами наверное собирается отсюда: https://github.com/postgres/postgres/blob/REL_11_STABLE/src/port/dirent.c#L77
Дальше вопрос кому-нибудь, что знаком с api виндов. Это не про меня.
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756505
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В приведённых исходниках имя файла получается в текущей кодовой странице ANSI, что вообще-то нехорошо. Если у ТС-а она выставлена не в 1251, то ему полный облом. В противном случае надо смотреть что со строкой в плане декларации и преобразования кодировок делает функция CStringGetTextDatum().
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756540
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovчто со строкой в плане декларации и преобразования кодировок делает функция CStringGetTextDatum().
Ничего.
CStringGetTextDatum простой макрос
Где PointerGetDatum ещё более простой макрос банального приведения типов
а cstring_to_text - элементарный memcpy в отдельный буфер, всё вместе превращает C-style char* в postgresql тип text
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39756763
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит ТСу должно помочь тривиальное
Код: sql
1.
select convert(pg_ls_dir using windows_1251_to_utf8) from pg_ls_dir('tmp\00001')
...
Рейтинг: 0 / 0
Проблема с загрузкой русскоязычных файлов в базу данных Postgres
    #39759184
black_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При выполнении
select convert(pg_ls_dir using windows_1251_to_utf8) from pg_ls_dir('tmp\00001');

Ошибка
[2019-01-14 11:34:06] [42601] ERROR: syntax error at or near "using"
[2019-01-14 11:34:06] Position: 26
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с загрузкой русскоязычных файлов в базу данных Postgres
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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