Получение ошибки "не удалось идентифицировать оператор равенства для типа json" с вставкой при конфликте - PullRequest
0 голосов
/ 31 октября 2019

При выполнении массовой загрузки в таблицу, содержащую столбец json, я получаю сообщение об ошибке «не удалось определить оператор равенства для типа json». Столбец json не является частью какого-либо сравнения (насколько я могу судить), поэтому я озадачен тем, почему я получаю ошибку.

Глядя на вставляемые данные, все это выглядит правильно.

Таблица:

create table foo (
    c0  serial not null,
    c1  int4 not null,
    c2  timestamp not null,
    c3  timestamp not null,
    c4  bool not null
    c5  char(1) not null default 'I',
    c6  json not null default '[]'::json,

    constraint foo_pkey primary key (c0)
);

create unique index foo_idx on foo using btree (c1, c2);

А код Python, использующий psycopg2:

def upsert_foo(cursor, data):
    sql = """
        INSERT INTO foo
            (c1, c2, c3, c4, c5, c6)
        VALUES
            (%s,%s,%s,%s,%s,%s)
        ON CONFLICT (c1, c2)
        DO UPDATE SET
            c3 = %s,
            c4 = %s,
            c5 = %s,
            c6 = %s;
        """

    execute_batch(cursor, sql, data)

Полная ошибка:

psycopg2.errors.UndefinedFunction: could not identify an equality operator for type json
...