PostgreSQL LinuxWindowsсервер PostgreSQL

PostgreSQL: При импорте CSV возникает ошибка кодировки

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Импорт CSV в PostgreSQL падает с invalid byte sequence for encoding UTF8 или ошибкой преобразования символов. Кодировка файла, client_encoding и кодировка базы должны быть согласованы; сами байты файла менять вслепую нельзя.

В этой статье
  1. Симптом и границы применимости
  2. Как отличить возможные причины
  3. Пошаговая диагностика и безопасное исправление
  4. Как проверить, что проблема устранена
  5. Если исправление не помогло

#Симптом и границы применимости

Импорт CSV в PostgreSQL падает с invalid byte sequence for encoding UTF8 или ошибкой преобразования символов. Кодировка файла, client_encoding и кодировка базы должны быть согласованы; сами байты файла менять вслепую нельзя.

#Как отличить возможные причины

Возможная причинаКак узнатьЧто делать
CSV не в UTF-8Файл создан Windows-приложением в Windows-1251 или другой кодировке.invalid byte sequence for encoding UTF8Определить исходную кодировку
Клиент неверно декодируетФайл UTF-8, но соединение считает, что он другой кодировки.Ошибка только в конкретном клиентеПроверить client_encoding
Ошибка CSV-форматаНеверные кавычки, разделитель или переводы строк похожи на проблему кодировки.extra data after last expected columnСверить формат COPY

#Пошаговая диагностика и безопасное исправление

  1. 1. Сохраните исходный файл без пересохраненияСкопируйте CSV в отдельный рабочий каталог, сохраните контрольную сумму и пример номера строки ошибки. Не открывайте и не сохраняйте оригинал через редактор, который молча изменяет кодировку.
  1. 2. Определите реальную кодировку исходного файлаНа Linux запустите file -bi и сравните с тем, в какой программе был создан экспорт. file даёт предположение; для Windows-1251 лучше дополнительно проверить кириллическую строку через пробное преобразование на копии.
    Linux · Терминал (Bash)Команда
    Терминал Linux; чтение файла. Результат charset=... является эвристикой.
    file -bi ./incoming.csv
  1. 3. Проверьте кодировки базы и сеансаВ psql выполните SHOW server_encoding и SHOW client_encoding. PostgreSQL обычно хранит UTF8, а импорт обязан корректно интерпретировать входные байты.
    SQLКоманда
    psql, только чтение.
    SHOW server_encoding;
    SHOW client_encoding;
  1. 4. Проверьте формат CSV на малом образцеВ тестовой копии сделайте файл из заголовка и нескольких типовых строк, затем изучите разделитель, кавычки, порядок полей и наличие заголовка. Не импортируйте полный файл повторно в рабочую таблицу: получите дубли.
  1. 5. Преобразуйте файл только при подтверждённой кодировкеЕсли исходный экспорт точно Windows-1251, создайте новый UTF-8 файл через iconv. Если iconv выдаёт ошибку, не используйте бездумно //IGNORE: это приведёт к потере символов.
    Linux · Терминал (Bash)Команда
    Терминал Linux/macOS с iconv; только если кодировка подтверждена. Исходный файл остаётся неизменным.
    iconv -f WINDOWS-1251 -t UTF-8 ./incoming.csv > ./incoming.utf8.csv
  1. 6. Импортируйте в тестовую таблицу из psqlВ psql используйте \copy в таблицу с проверенной структурой и укажите CSV HEADER. Мета-команда читает локальный файл на компьютере клиента, а серверный COPY работает с путями хоста базы.
  2. psql; изменяет только staging.orders на тестовой базе
    ТекстС осторожностью
    psql; изменяет только staging.orders на тестовой базе. Названия пути и таблицы — примеры.
    \copy staging.orders FROM './incoming.utf8.csv' WITH (FORMAT csv, HEADER true)

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 7. Сверьте количество и характер данныхСравните число строк исходного файла и SELECT COUNT(*) в staging с учётом заголовка, пустых строк, кавычек и многострочных значений. Выберите несколько кириллических имен и проверьте их без искажения.

#Как проверить, что проблема устранена

Пробный импорт проходит без ошибок кодировки; контрольные строки, имена и количество записей совпадают с исходным экспортом.

#Если исправление не помогло

Если ошибка остаётся, выделите небольшой проблемный фрагмент без персональных данных и сопоставьте байты, client_encoding и формат CSV; не отключайте валидацию.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.