相关文章推荐
热心的茶壶  ·  JPA save() ...·  3 月前    · 
严肃的西装  ·  windows timer ...·  3 年前    · 

当在事务块中SQL执行出错后,继续执行任何SQL都会报错如下,必须rollback;

ERROR: current transaction is aborted, commands ignored until end of transaction block

postgresql 事务块中不允许出错,任何一个SQL出错后,事务为变为aborted,必须rollback掉重来。

这与其它库数据库不同,如ORACLE,只是当前SQL失败,事务还可以继续。

postgresql jdbc驱动中,可通在连接数据库时可以设置如下参数,会在每条语句前自动加一个隐式的SAVEPOINT,报错后自动回滚事务到SAVEPOINT,来保证整个事务不会abort,但会降低性能。

String url = "jdbc:postgresql://localhost/test?autosave=always&cleanupSavePoints=ture";
  • autosave = String

Specifies what the driver should do if a query fails. In autosave=always mode, JDBC driver sets a savepoint before each query, and rolls back to that savepoint in case of failure. In autosave=never mode (default), no savepoint dance is made ever. In autosave=conservative mode, savepoint is set for each query, however the rollback is done only for rare cases like ‘cached statement cannot change return type’ or ‘statement XXX is not valid’ so JDBC driver rollsback and retries

The default is never

  • cleanupSavepoints = boolean

Determines if the SAVEPOINT created in autosave mode is released prior to the statement. This is done to avoid running out of shared buffers on the server in the case where 1000’s of queries are performed.

The default is ‘false’

ksql客户端可以做如下设置达到该目的

\set ON_ERROR_ROLLBACK on
  • ON_ERROR_ROLLBACK

当被设置为on时,如果事务块中的一个语句产生一个错误,该错误会被忽略并且该事务会继续。当被设置为interactive时,只在交互式会话中忽略这类错误,而读取脚本文件时则不会忽略错误。当被重置或者设置为off(默认值)时,事务块中产生错误的一个语句会中止整个事务。错误回滚模式的工作原理是在事务块的每个命令之前都为你发出一个隐式的SAVEPOINT,然后在该命令失败时回滚到该保存点。

  • ON_ERROR_STOP

默认情况下,出现一个错误后命令处理会继续下去。当这个变量被设置为on后,出现错误后命令处理会立即停止。在交互模式下,psql将会返回到命令提示符;否则,psql将会退出并且返回错误代码 3 来把这种情况与致命错误区分开来,致命错误会被报告为错误代码 1。在两种情况下,任何当前正在运行的脚本(顶层脚本以及任何它已经调用的其他脚本)将被立即中止。如果顶层命名字符串包含多个 SQL 命令,将在当前命令处停止处理。

1、Hibernate是如何延迟加载? Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 2 . Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 2、session . load . . .
SQL报错: ERROR : current transaction is aborted , com mands ignored until end of transaction block 1、报错快照: Cause : com . kingbase 8 . util . KSQLException : ERROR : current transaction is aborted , com mands ignored until end of transaction block 2、原因: 会话中只要有一个sql执行报错了,这个
pg系 数据库 经典报错, current transaction is aborted , com mands ignored until end of transaction block
第一步:首先准备好 数据库 的安装文件: 下载地址:https : //www . kingbase . com . cn/index/download/c_id/455 . html 同时下载安装包和授权文件。 第二步:解压安装包文件和授权文件 解压安装包得到 解压授权文件得到 第三步:开始安装 进入到解压安装包后的目录执行命令进行安装: sh setup . sh -i console 注意:如果ro . . .
在进行任何更改之前,建议先备份现有的许可证文件,以防止在更新过程中出现问题。可以使用以下命令进行备份: ```bash mv /data/kbes/ES/V 8 /KESRealPro/V 8 0 8 R0 8 6 c 8 0 6 8 8 021/license . dat /data/kbes/ES/V 8 /KESRealPro/V 8 0 8 R0 8 6 c 8 0 6 8 8 021/license . dat_bak mv /data/kbes/Es/V 8 /license . dat /data/kbes/Es/V 8 /license . dat_bak 2 . **复制新的 License 文件** 将新的许可证文件复制到相应的目录中,并确保路径与 数据库 安装时所使用的路径一致: ```bash cp /data/kbes/license_2929 6 /license_2929 6 _0 . dat /data/kbes/ES/V 8 /KESRealPro/V 8 0 8 R0 8 6 c 8 0 6 8 8 021/license . dat cp /data/kbes/license_2929 6 /license_2929 6 _0 . dat /data/kbes/Es/V 8 /license . dat 3 . **设置正确的权限和所有权** 确保新的许可证文件具有适当的权限和所有者,以便 数据库 能够正确读取它们: ```bash chown -R kingbase : kingbase /data/kbes/ES/V 8 /license . dat chown -R kingbase : kingbase /data/kbes/ES/V 8 /KESRealPro/V 8 0 8 R0 8 6 c 8 0 6 8 8 021/license . dat chmod 777 /data/kbes/ES/V 8 /KESRealPro/V 8 0 8 R0 8 6 c 8 0 6 8 8 021/license . dat chmod 777 /data/kbes/Es/V 8 /license . dat 4 . **重启 数据库 服务(可选)** 如果 数据库 正在运行,为了使新的许可证生效,可能需要重新启动 数据库 服务。可以通过以下命令停止并重新启动 数据库 : ```bash cd /opt/ Kingbase /ES/V 8 /Server/bin . /sys_ctl -D /opt/ Kingbase /ES/V 8 /data stop . /sys_ctl -D /opt/ Kingbase /ES/V 8 /data start 通过以上步骤,可以完成对 Kingbase V 8 R 6 企业版许可证的更新操作。