更新填报,报错

填报中设置了两三个字段作为主键,只更新填报,其他的数据,选择了更新填报,但是报错在可序列化事务中不支持只追加表上的删除

1739931516489.png

在可序列化事务中不支持只追加表上的删除,这个是什么问题

FineReport 妖儿 发布于 2025-2-19 10:22
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
用户k6280494Lv6专家互助
发布于2025-2-19 10:33(编辑于 2025-2-19 10:33)

您可以在 finedb 的 FINE_CONF_ENTITY 表中添加字段 WriteOptimizationConfig.transactionRepeatableRead,并将字段值设置为 false,这样可以将隔离级别调低。具体的修改方式可以参考以下链接:填报修改fine_conf_entity

--------------------------------

这个错误信息表明你在一个可序列化(serializable)事务中尝试对一个仅追加(append-only)表执行删除操作,但这是不被支持的。在PostgreSQL的某些配置中,尤其是当使用Greenplum数据库或类似的基于PostgreSQL的系统时,仅追加表是为了提高数据加载性能而设计的,它们不允许修改已存在的数据,包括删除操作。

解释错误信息:
  • ERROR: deletes on append-only tables are not supported in serializable transactions:这意味着在设置为可序列化隔离级别的事务中,不允许对仅追加表执行删除操作。可序列化隔离级别是最高的事务隔离级别,它确保事务完全隔离,好像它们是按顺序一个接一个地执行。

  • seg3 10.8.11.40:6001 pid=428120:这部分提供了出错的具体环境信息,包括出错的服务器段(segment)、IP地址、端口号和进程ID。

解决方案:
  1. 更改事务隔离级别:如果可能,考虑将事务的隔离级别从可序列化更改为较低级别,如读已提交(READ COMMITTED)。这可以通过设置事务的隔离级别来实现,例如在SQL中使用SET TRANSACTION ISOLATION LEVEL READ COMMITTED;。

  2. 避免在仅追加表上执行删除:检查你的应用逻辑,确保不在仅追加表上执行删除操作。如果确实需要删除数据,考虑使用其他类型的表或不同的数据处理策略。

  3. 使用不同的数据模型:如果你的应用逻辑频繁需要修改数据,可能需要重新考虑是否使用仅追加表。对于需要频繁更新和删除的数据,使用常规的行存储表可能更合适。

  4. 分批处理:如果修改是必需的,考虑将操作分批处理,并在每批处理之间提交事务,而不是在一个长事务中尝试所有修改。

  5. 咨询数据库管理员:如果你不确定如何操作,或者这些修改可能对你的数据库性能有重大影响,最好咨询你的数据库管理员或具有相关经验的同事。

最佳回答
0
小陈PhLv4初级互助
发布于2025-2-19 17:47

在帆软FineReport中,更新填报时遇到报错是一个比较常见的问题。为了有效地解决这类问题,首先需要识别并分析报错信息,然后根据具体的报错代码和描述来采取相应的解决方案。以下是一些常见的报错类型及其解决方案:

一、常见报错类型及解决方案

数据库相关报错

报错信息:如“无法将NULL插入XX数据库表”或“违反唯一键约束”等。

解决方案:

检查填报的数据是否符合数据库表的约束条件,如非空字段是否已填写,主键或唯一键字段是否重复。

确保数据库连接正常,并尝试重新连接数据库。

在数据库中检查并调整相应的字段约束或索引。

SQL语句错误

报错信息:如“SQL error or missing database”或“SQL语句执行失败”等。

解决方案:

检查SQL语句的语法是否正确,特别是字符串、日期等类型的字段值是否正确引用。

确保SQL语句中涉及的字段名、表名等与数据库中的实际名称一致。

尝试在数据库管理工具中直接执行SQL语句,看是否能成功执行。

数据连接问题

报错信息:如“找不到数据连接”或“数据连接失败”等。

解决方案:

检查数据连接配置是否正确,包括数据库类型、URL、用户名、密码等。

尝试重新配置数据连接,并测试连接是否成功。

如果使用的是远程数据连接,请检查网络连接是否稳定。

报表设计问题

报错信息:如“行式引擎不支持多数据源展示”或“报表分栏不支持”等。

解决方案:

检查报表设计是否使用了不支持的功能,如行式引擎下的多数据源展示、报表分栏等。

根据报错信息调整报表设计,或关闭相应的功能。

如果使用的是复杂报表或决策报表,请确保已正确配置相关参数和属性。

权限问题

报错信息:如“没有为参数号设置值”或“用户缺乏权限”等。

解决方案:

检查填报属性的“内置SQL”提交设置中,是否所有“值”都已配置且配置正确。

确保用户具有足够的权限来执行填报操作,包括对数据库的读写权限。

如果使用的是远程服务器,请检查服务器上的权限设置是否正确。

二、通用排查步骤

查看报错信息:

仔细阅读报错信息,了解报错的具体原因和位置。

根据报错信息中的关键词,如“数据库”、“SQL语句”、“数据连接”等,判断可能的报错类型。

检查数据连接:

确保数据连接配置正确,且能够成功连接到数据库。

如果使用的是远程数据连接,请检查网络连接是否稳定。

检查SQL语句:

确保SQL语句语法正确,且能够成功执行。

检查SQL语句中涉及的字段名、表名等是否与数据库中的实际名称一致。

检查报表设计:

确保报表设计没有使用不支持的功能或属性。

根据报错信息调整报表设计,或关闭相应的功能。

检查用户权限:

确保用户具有足够的权限来执行填报操作。

如果使用的是远程服务器,请检查服务器上的权限设置是否正确。

查看日志信息:

如果报错信息不够详细或无法确定具体原因,可以查看FineReport的日志信息来获取更多线索。

日志信息通常包含更详细的报错描述和位置信息,有助于快速定位问题。

综上所述,更新填报时遇到报错需要根据具体的报错信息和类型来采取相应的解决方案。通过仔细查看报错信息、检查数据连接、SQL语句、报表设计以及用户权限等方面,通常可以有效地解决大部分报错问题。如果问题仍然无法解决,建议联系帆软官方技术支持或查阅相关文档以获取更多帮助。

  • 3关注人数
  • 29浏览人数
  • 最后回答于:2025-2-19 17:47
    请选择关闭问题的原因
    确定 取消
    返回顶部