插入冲突时出现错误 "could not identify an equality operator for type json"

Getting error "could not identify an equality operator for type json" with insert on conflict

当批量上传到具有 json 列的 table 时,出现错误 "could not identify an equality operator for type json"。 json 列不是任何比较的一部分(据我所知),所以我很困惑为什么我会收到错误。

查看正在插入的数据,这一切似乎都是正确的。

table是:

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);

而使用 psycopg2 的 python 代码是:

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

问题是 table 上的触发器有一个 when 子句。这失败了,因为 table 有一个无法比较的 json 列。通过从触发器中删除 when 子句,问题就消失了。