当批量上传到具有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);
使用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
问题是表上有when子句的触发器。此操作失败,因为该表有一个json列,无法进行比较。通过从触发器中删除when子句,问题就消失了。