|
Как изменить кодировку открываемого файла.
|
|||
---|---|---|---|
#18+
Добрый день всем. Задача следующая. Имею *.txt файлы. Часть из них создана в Debiane как utf-8 (кодировка). Часть из них создана в Windows в кодировке (win-1251). Открываю как Код: sql 1.
PostgreSQL работает из под Debian (Linux) Файлы, которые имею кодировку UTF-8 без проблем открываются и анализируются. А вот если попадается файл в кодировке Win-1251, то постгрес выдаёт ошибку: Код: sql 1.
Понимаю, что как то нужно дать команду на перекодирование. В инструкциях к PostgreSQL есть 23.3. Поддержка кодировок + convert_from + convert_to Но ничего из этого не срабатывают. Пытался делать клиентскую кодировку внутри функции (при импорте данных из текстового файла) Код: sql 1.
но появляется ошибка и думаю, что ошибка та же только выводится в другой кодировке К сожалению - текст не вставляется, ниже привожу картинку. . Вопрос - как при открытии внешнего файла явно задать его кодировку, отличную от utf-8? . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 10:34 |
|
Как изменить кодировку открываемого файла.
|
|||
---|---|---|---|
#18+
файл ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 10:39 |
|
Как изменить кодировку открываемого файла.
|
|||
---|---|---|---|
#18+
О-О-О Вопрос - как при открытии внешнего файла явно задать его кодировку, отличную от utf-8? Раз вы заранее знаете, что файл не в той кодировке, почему бы не перекодировать его перед тем, как отдавать PostgreSQL? Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 10:44 |
|
Как изменить кодировку открываемого файла.
|
|||
---|---|---|---|
#18+
Ы2, Спасибо, сработало. Код: sql 1.
Но хотелось бы штатными средствами PostgreSQL. Сейчас же придется запускать Python для запуска команды которая переведет текст из одной кодировки в другую. . Не совсем удобно. . Хочется что то от самого PostgreSQL - не поверю, чтобы такой фишки не было в PostgreSQL . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 11:27 |
|
Как изменить кодировку открываемого файла.
|
|||
---|---|---|---|
#18+
О-О-О, Никак... pg_read_file не предназначен для загрузки данных и никакой конверсии кодировок не делает (и делать никогда не будет) и читает файл как есть. Для загрузки данных существует copy from file комманда (и вот там вот конверсия кодировок работает). В 100% случаев если некоторая функция обьявлена (как pg_read_file) superuser only - она НЕ ПРЕДНАЗНАЧЕНА для реализации любой мыслимой бизнес логики а только для АДМИНИСТРИРОВАНИЯ. В общем не забивайте гвозди микроскопом... для этого есть молоток. PS: документацияNote that granting users the EXECUTE privilege on pg_read_file(), or related functions, allows them the ability to read any file on the server that the database server process can read; these functions bypass all in-database privilege checks. This means that, for example, a user with such access is able to read the contents of the pg_authid table where authentication information is stored, as well as read any table data in the database. Therefore, granting access to these functions should be carefully considered. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 12:37 |
|
Как изменить кодировку открываемого файла.
|
|||
---|---|---|---|
#18+
Maxim Boguk, Проблема в том, что текстовой файл это не записи для БД - это большой файл текстовых данных (текст) который нужно проанализировать. . Про COPY я знаю. Но в *.txt файле есть перевод строк. При импортировании данных через COPY выходит сообщение - в файле есть перевод строк, замените их на '\r'. и благополучно отваливается. То есть даже не могу загрузить для замены данных. . Так что вариант через COPY не годится. Жать, значит буду городить костыли. Какая кодировка попадет - я не знаю. Там все в кучу. . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 12:50 |
|
Как изменить кодировку открываемого файла.
|
|||
---|---|---|---|
#18+
Хорошо. Всем спасибо. Суть задачи и проблему понял. Буду думать, как обойти данное ограничение/особенности. . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 12:54 |
|
Как изменить кодировку открываемого файла.
|
|||
---|---|---|---|
#18+
Код: sql 1.
Потому что pg_read_file возвращает тип text и на входе типа проверяется возможность существования таких символов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 13:47 |
|
Как изменить кодировку открываемого файла.
|
|||
---|---|---|---|
#18+
Melkij, Да, сработало. Но здесь немаловажный есть нюанс. Я почти так пробовал, но пробовал по другому: Код: sql 1.
Указывал из какой кодировки в какую. Думал, что будет сделано преобразование в формат UTF-8 и пробовал convert('text_in_utf8', 'UTF8', 'LATIN1') convert_to('некоторый_текст', 'UTF8') оказалось - что нужно просто было указать не в какой формат хочу перекодировать а из какого формата нужно раскодировать! БОЛЬШОЕ СПАСИБО Melkij. Сработало. Но честно говоря, не понимаю, почему для бинарных файлов этот код сработал. В общем, еще раз спасибо. . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2021, 18:06 |
|
|
start [/forum/topic.php?fid=53&msg=40075031&tid=1994002]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 260ms |
total: | 378ms |
0 / 0 |