Java 执行pg_notify BatchUpdateException错误0
我正在使用hibernate在表“Stock”中插入多条记录,该表具有调用PERFORM pg_notify event的触发器,但在通过hibernate执行批量更新时,它会给我“BatchUpdateException error 0” 当我在stock表中创建performpg_notify触发器时,它开始引发这个错误。有人能帮我解决这个问题吗 表上应用的触发器如下所示:Java 执行pg_notify BatchUpdateException错误0,java,postgresql,hibernate,triggers,Java,Postgresql,Hibernate,Triggers,我正在使用hibernate在表“Stock”中插入多条记录,该表具有调用PERFORM pg_notify event的触发器,但在通过hibernate执行批量更新时,它会给我“BatchUpdateException error 0” 当我在stock表中创建performpg_notify触发器时,它开始引发这个错误。有人能帮我解决这个问题吗 表上应用的触发器如下所示: DROP TRIGGER stock_change_notifier ON myschema.stock; CREA
DROP TRIGGER stock_change_notifier ON myschema.stock;
CREATE TRIGGER stock_change_notifier
AFTER UPDATE
ON myschema.stock
FOR EACH ROW
EXECUTE PROCEDURE myschema.notify_change();
BEGIN
IF (TG_OP = 'DELETE') THEN
sku_id = OLD.sku_id;
ELSE
sku_id = NEW.sku_id;
END IF;
notification = json_build_object(
'table',TG_TABLE_NAME,
'action', TG_OP,
'sku_id', sku_id,
'schema',TG_TABLE_SCHEMA);
PERFORM pg_notify('stock',notification::text);
RETURN NULL;
END;
和notify_change()函数包含以下内容:
DROP TRIGGER stock_change_notifier ON myschema.stock;
CREATE TRIGGER stock_change_notifier
AFTER UPDATE
ON myschema.stock
FOR EACH ROW
EXECUTE PROCEDURE myschema.notify_change();
BEGIN
IF (TG_OP = 'DELETE') THEN
sku_id = OLD.sku_id;
ELSE
sku_id = NEW.sku_id;
END IF;
notification = json_build_object(
'table',TG_TABLE_NAME,
'action', TG_OP,
'sku_id', sku_id,
'schema',TG_TABLE_SCHEMA);
PERFORM pg_notify('stock',notification::text);
RETURN NULL;
END;
仅供参考,我正在使用带hibernate的POSTGRES
已编辑:e.printStackTrace()
得到的结果如下:
(org.postgresql.util.PSQLException) org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block
此外,getNextException为我提供了:
Evaluations must contain either an expression or a block of well-formed statements
已编辑:通过SQL错误消息多次更新:
ERROR: function json_build_object(unknown, name, unknown, text, unknown, bigint, unknown, name) does not exist
LINE 1: SELECT json_build_object(
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
QUERY: SELECT json_build_object(
'table',TG_TABLE_NAME,
'action', TG_OP,
'sku_id', sku_id,
'schema',TG_TABLE_SCHEMA)
CONTEXT: PL/pgSQL function wmsdb00343.notify_change() line 20 at assignment
********** Error **********
ERROR: function json_build_object(unknown, name, unknown, text, unknown, bigint, unknown, name) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Context: PL/pgSQL function wmsdb00343.notify_change() line 20 at assignment
在执行此命令时:
update wmsdb00343.stock set available_qty='1.00' , allocated_qty='1.00' where stock_id=229;
update wmsdb00343.stock set available_qty='2.00' , allocated_qty='1.00' where stock_id=230;
update wmsdb00343.stock set available_qty='3.00' , allocated_qty='1.00' where stock_id=231;
update wmsdb00343.stock set available_qty='4.00' , allocated_qty='1.00' where stock_id=232;
update wmsdb00343.stock set available_qty='5.00' , allocated_qty='1.00' where stock_id=233;
update wmsdb00343.stock set available_qty='6.00' , allocated_qty='1.00' where stock_id=228;
PSQL中的错误消息:
ERROR: function json_build_object(unknown, name, unknown, text, unknown, bigint, unknown, name) does not exist
LINE 1: SELECT json_build_object(
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
QUERY: SELECT json_build_object(
'table',TG_TABLE_NAME,
'action', TG_OP,
'sku_id', sku_id,
'schema',TG_TABLE_SCHEMA)
CONTEXT: PL/pgSQL function wmsdb00343.notify_change() line 20 at assignment
********** Error **********
ERROR: function json_build_object(unknown, name, unknown, text, unknown, bigint, unknown, name) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Context: PL/pgSQL function wmsdb00343.notify_change() line 20 at assignment
正如@a_horse_和_no_名称所提到的,当我从psql(PostgreSQL)9.3.15更新到9.6时,它工作得很好,因为9.4版本中引入了“json_build_object”
谢谢@a_horse_,没有名字您需要向我们展示完整的stacktrace。理想情况下,原始的Postgres错误消息或异常,而不是来自模糊处理层(又称“ORM”)@RajuSharma的错误:真正的错误仍然没有(“调用getNextException查看原因”)模糊处理层的乐趣。只要我们看不到真正的错误信息,这是不可能回答的。当您在SQL客户机中手动运行更新时会发生什么情况?触发器对我来说工作得很好(使用SQL客户机)。错误消息“current transaction is aborted”(当前事务已中止)表示在执行更新之前发生了错误。消息“计算必须包含表达式或格式良好的语句块”不是Postgres错误消息。您使用的是哪个Postgres版本<代码>json_build_object()是在9.4中引入的