在冲突时插入时获取错误"could not identify an equality operator for type json"



当批量上传到具有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子句,问题就消失了。

相关内容

  • 没有找到相关文章

最新更新