【DB吐槽大会】第46期 - PG copy不能跳过错误行

简介: 大家好,这里是DB吐槽大会,第46期 - PG copy不能跳过错误行

背景


1、产品的问题点

  • PG copy不能跳过错误行

2、问题点背后涉及的技术原理

  • PG 支持copy语法, 由于其高效的写入性能(功能单一, 协议精简, 节省了冗长的query parser,rewrite,plan,execute过程), 通常被用于高速数据导入导出.
  • PG copy被作为1个事务来处理, 如果一次copy过程中出现了异常的行, 将导致整个copy任务回滚.

3、这个问题将影响哪些行业以及业务场景

  • 导入、迁移、恢复数据等场景

4、会导致什么问题?

  • 如果一个copy的表数据量很多, 已经导入了很多数据, 然后发现异常数据, 导致整个copy任务回滚, 浪费时间, 同时产生的写操作、wal都是浪费的. 必须重来一遍.

5、业务上应该如何避免这个坑

  • 使用pg_bulkload插件以及对应的导入工具, 支持多项配置, 甚至能直接写数据文件, 跳过wal, shared buffer等, 效率比普通copy还要高.

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

  • 使用pg_bulkload需要注意, 如果选择了direct模式导入, 会绕过wal, 那么以前的备份就无法使用wal来恢复新导入的数据. 必须在bulk load后做一次全量备份. 同时如果有基于流复制的逻辑订阅、物理standby, 统统都无法接受这些bulk load写入的数据.
  • pg_bulkload属于第三方工具

7、数据库未来产品迭代如何修复这个坑

  • 希望PG自身能支持copy是跳过并记录下异常的行到日志、指定文件、或表里面, 导入结束后进行修复.
  • 例如, 可以设置批量大小, 批量提交, 遇到异常时异常批次的数据跳过异常重新写入一遍. 也比全部回滚好.
  • 例如, 可以设置错误条数上限, 如果超过上限则回退整个copy事务.



相关文章
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 12: Recovery.conf 文件参数合并到 postgresql.conf
PostgreSQL 12 的一个重要变化是 recovery.conf 配置文件中的参数合并到 postgresql.conf,recovery.conf 不再使用,我们看看手册的说明,如下: 发行说明 Move recovery.
5156 0
|
运维 Kubernetes 监控
揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?
揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?
4474 0
|
定位技术 Windows 关系型数据库
PostgreSQL GUI pgadmin4 v3.3 支持 gis geometry 数据编辑、显示
标签 PostgreSQL , pgadmin , gis , 编辑 背景 pgadmin 4 v3.3 开始支持geometry 类型的展示。 https://www.postgresql.org/ftp/pgadmin/pgadmin4/v3.3/windows/ 如果geometry使用的是SRID 4326 (WGS 84 lon/lat)坐标系,则pgadmin会自动从OpenStreetMap 加载图层,作为背景。
2416 0
|
9月前
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
80481 65
|
Kubernetes 关系型数据库 MySQL
seata启动问题之指针异常如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
647 103
|
分布式计算 监控 大数据
什么是 Spark Driver,它的职责是什么?
【8月更文挑战第14天】
928 5
|
数据采集 监控 架构师
主数据管理实施方案:规划与具体策略的全面解析
在当今数字化转型的浪潮中,主数据管理(MDM, Master Data Management)已成为企业提升数据质量、优化业务流程、增强决策能力的重要基石。一个成功的主数据管理实施方案不仅需要周密的规划,还需要具体可行的策略来确保项目顺利推进并达到预期效果。
1262 4
|
弹性计算 关系型数据库 数据库
PostgreSQL 数据库实例只读锁定(readonly) - 硬锁定,软锁定,解锁
标签 PostgreSQL , 只读 , 锁定 , readonly , recovery.conf , 恢复模式 , pg_is_in_revoery , default_transaction_read_only 背景 在一些场景中,可能要将数据库设置为只读模式。 例如, 1、云数据库,当使用的容量超过了购买的限制时。切换到只读(锁定)模式,确保用户不会用超。 2、业务上需要对
7672 0