Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行pg_notify BatchUpdateException错误0_Java_Postgresql_Hibernate_Triggers - Fatal编程技术网

Java 执行pg_notify BatchUpdateException错误0

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

我正在使用hibernate在表“Stock”中插入多条记录,该表具有调用PERFORM pg_notify event的触发器,但在通过hibernate执行批量更新时,它会给我“BatchUpdateException error 0”

当我在stock表中创建performpg_notify触发器时,它开始引发这个错误。有人能帮我解决这个问题吗

表上应用的触发器如下所示:

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中引入的