Я не думаю, что можно изменить это поведение.Похоже, Postgres предполагает, что кодировка имени файла соответствует server_encoding
(как предлагается в списках рассылки здесь и здесь ).Единственный обходной путь, который я смог найти, - это запустить команду при подключении к WIN1252
-кодированной базе данных, что, вероятно, не очень полезно.
Если вы пытаетесь запустить это на той же машине, что и сервервместо того, чтобы использовать COPY
на стороне сервера, вы можете запустить \copy
на стороне клиента psql
, что будет соответствовать вашему client_encoding
при интерпретациипуть к файлу:
psql -c "\copy (select 'tønder') to 'C:\temp\Sønderborg.csv' (FORMAT CSV, HEADER TRUE, DELIMITER ';', ENCODING 'UTF8')"
Обратите внимание, что cmd.exe
(и даже powershell.exe
) по-прежнему использует устаревшие кодировки DOS по умолчанию, поэтому вам может потребоваться запустить chcp 1252
для установки кодовой страницы консоли перед запуском psql
.