psycopg2 - Кодировка «UTF8» не имеет эквивалента в кодировке «LATIN1», даже если установлено client_encoding. - PullRequest
2 голосов
/ 28 мая 2020

Я пытаюсь создать способ протестировать восстановление базы данных в многопроцессорном режиме, но простое соединение не работает. Я перепробовал много руководств и ответов, но пока безуспешно. Вот мой код:

def pyconn():
    con: connection = psycopg2.connect(
        dbname='XXXX',
        user='XXXX',
        password='XXXX',
        host='XXXX',
        port=5432
    )
    con.set_client_encoding('UTF8')
    return con


def read_sql(query):
    conn = pyconn()
    cur = conn.cursor()
    with open('NUL') as dev_null:
        cur.copy_expert("COPY (select XXX from XXXX limit 10) to '/dev/null'‬", dev_null)
    cur.close()
    conn.close()

Я нахожусь на машине Windows, а база данных находится на Linux сервере.

  • Я пробовал тот же сценарий на сервере: та же ошибка
  • Я запускаю команду с помощью psql -U XXX -d XXX -h XXX - c " COPY (выберите XXX из XXXX limit 10) в '/ dev / null' ": работает!

Ошибка, которую я получил:

psycopg2.errors.UntranslatableCharacter: character with byte sequence 0xe2 0x80 0xac in encoding "UTF8" has no equivalent in encoding "LATIN1"

Не могли бы вы мне помочь?

...