当前位置: 首页 > news >正文

使用 COPY 加速 PostgreSQL 批量插入

文章目录

  • 1.copy命令介紹
  • 2.copy vs insert的优势
  • 3.测量性能
  • 4.结论

1.copy命令介紹

PostgreSQL 中的命令COPY是执行批量插入和数据迁移的强大工具。它允许快速有效地将大量数据插入表中。

COPY命令为批量插入和数据迁移提供了更简单且更具成本效益的解决方案。
可以避免使用诸如:分布式处理工具、为数据库添加更多的 CPU 和 RAM的方案或者其他的加速方案
因此,如果有一个任务需要在短时间内插入大量行,可以考虑使用COPY 命令。它可以显著加快数据迁移和载入过程。
据说PostgreSQL 16 已将 COPY 的性能提高了 300% 以上
详尽的有关copy命令的语法可参考官网

2.copy vs insert的优势

Three-Column Table
COPYINSERT (multi-line)
LoggingOne log for the entire loadOne log for each line/entry
NetworkNo latency, data is streamedLatency between inserts
ParsingOnly one parsing operationParsing overhead
TransactionSingle transactionEach insert statement is a separate transaction
Query PlanSimpler query execution planLots of different query execution plans

总而言之,COPY 速度更快,因为与多行 INSERT 语句相比,它减少了日志记录、网络延迟、解析和事务管理的开销。 它允许更简单的查询执行计划,从而实现更快、更高效的批量插入和数据迁移。 一个权衡是它需要直接访问文件系统,因此它可能并不适合所有需要插入数据的场景。 另一个权衡是持久性,COPY 生成很少的日志,并在单个事务中执行所有日志,这使得它的风险更大。

3.测量性能

创建3个测试表

test=# create table t1 (id1 bigint,id2 bigint);
CREATE TABLE
Time: 7.744 ms
test=# create table t2 (id1 bigint,id2 bigint);
CREATE TABLE
Time: 8.680 ms
test=# create table t3 (id1 bigint,id2 bigint);
CREATE TABLE
Time: 0.924 ms

向t1插入1千万笔测试资料,产生size 422MB的测试表

test=# insert into t1 select generate_series(1,10000000),generate_series(10000000,1,-1);
INSERT 0 10000000
Time: 11933.658 ms (00:11.934)
test=# select count(1),pg_size_pretty(pg_relation_size('t1')) from t1;count   | pg_size_pretty 
----------+----------------10000000 | 422 MB(1 row)Time: 377.028 ms

汇出成csv文件备用

test=# \copy t2 from '/var/lib/postgresql/t1.csv';
COPY 10000000
Time: 5997.302 ms (00:05.997)

验证汇出的csv文件的数据行数与大小

postgres@pgd-prod01:~$ cat t1.csv|wc -l
10000000
postgres@pgd-prod01:~$ ls -alh|grep t1;
-rw-rw-r--  1 postgres postgres  151M Nov 18 11:26 t1.csv
test=# insert into t3 select * from t1;
INSERT 0 10000000
Time: 9811.316 ms (00:09.811)

4.结论

最后测试结果表明,COPY 命令与 INSERT 命令相比具有更高的效率,速度上的差异是相当显着的,当插入同样的1仟万笔数据时,copy费时5997.302 ms,而insert费时9811.316 ms,相较insert而言,节约40%的时间,这是在postgresql 10版本的测试,postgresql 16据说提升更多

相关文章:

使用 COPY 加速 PostgreSQL 批量插入

文章目录 1.copy命令介紹2.copy vs insert的优势3.测量性能4.结论 1.copy命令介紹 PostgreSQL 中的命令COPY是执行批量插入和数据迁移的强大工具。它允许快速有效地将大量数据插入表中。 COPY命令为批量插入和数据迁移提供了更简单且更具成本效益的解决方案。 可以避免使用诸…...

plotneuralnet和netron结合绘制模型架构图

plotneuralnet和netron结合绘制模型架构图 一、plotneuralnet 本身的操作 模型结构图的可视化,能直观展示模型的结构以及各个模块之间的关系。最近借助plotneuralnet python库(windows版)绘制了一个网络结构图,有一些经验和心得…...

MYSQL 中如何导出数据?

文章目录 前言MySQL 导出数据使用 SELECT ... INTO OUTFILE 语句导出数据SELECT ... INTO OUTFILE 语句有以下属性:导出表作为原始数据导出SQL格式的数据将数据表及数据库拷贝至其他主机 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:…...

GPT-4惨遭削弱,偷懒摸鱼绝不多写一行代码,OpenAI已介入调查

GPT-4再次遭网友“群攻”,原因是“懒”得离谱! 有网友想在Android系统开发一个能够与OpenAI API实时交互的应用。 于是把方法示例链接发给GPT-4,让它参考用Kotlin语言编写代码: 没成想,和GPT-4一来二去沟通半天,GPT-4死活给不出…...

CSS特效020:涌动的弹簧效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…...

系列五、Spring整合MyBatis不忽略mapper接口同目录的xxxMapper.xml

一、概述 默认情况下maven要求我们将xml配置、properties配置等都放在resources目录下,如果我们强行将其放在java目录,即将xxxMapper.xml和xxxMapper接口放在同一个目录下,那么默认情况下maven打包时会将这个xxxMapper.xml文件忽略掉&#xf…...

第454题.四数相加II

力扣题目链接 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 分析&#xff1a; 当需要判断一个元素是…...

RabbitMQ消息队列

简介 MQ(message queue)&#xff0c;从字面意思上看就个 FIFO 先入先出的队列&#xff0c;只不过队列中存放的内容是 message 而已&#xff0c;它是一种具有接收数据、存储数据、发送数据等功能的技术服务。 作用&#xff1a;流量削峰、应用解耦、异步处理。 生产者将消息发送…...

ModBus电表与RS485电表有哪些区别?

在能源计量领域&#xff0c;ModBus电表和RS485电表是两种常见的设备&#xff0c;它们都具有监测和记录电能数据的功能。然而&#xff0c;它们之间存在一些区别&#xff0c;比如通信协议、连接方式、数据格式等等参数的区别有哪些&#xff1f; ModBus电表和RS485电表都是用于电能…...

vue项目运行时,报错:ValidationError: webpack Dev Server Invalid Options

在运行vue项目中&#xff0c;遇到报错&#xff1a;ValidationError: webpack Dev Server Invalid Options&#xff0c;如下图截图&#xff1a; 主要由于vue.config.js配置文件错误导致的&#xff0c;具体定位到proxy配置代理不能为空&#xff0c;导致运行项目报错&#xff0c;需…...

书摘:C 嵌入式系统设计模式 02

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。 结构化编程将软件组织成两个截然不同的…...

排序算法基本原理及实现1

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 &#x1f4d1;插入排序 &#x1f4…...

Unity 轨道展示系统(DollyMotion)

DollyMotion &#x1f371;功能展示&#x1f959;使用&#x1f4a1;设置路径点&#x1f4a1;触发点位切换&#x1f4a1;动态更新路径点&#x1f4a1;事件触发&#x1f4a1;设置路径&#x1f4a1;设置移动方案固定速度方向最近路径方向 &#x1f4a1;设置移动速度曲线 传送门 &a…...

优维低代码实践:搜索功能

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…...

C# ReadOnlyRef Out

C# ReadOnly ReadOnly先看两种情况1.值类型2.引用类型 结论 Ref Out ReadOnly官方文档 ReadOnly 先看两种情况 1.值类型 当数据是值类型时&#xff0c;标记为Readonly时&#xff0c;如果再次设置值&#xff0c;会提示报错&#xff0c;无法分配到只读字段 public class A {pri…...

linux 服务 下 redis 安装和 启动

官网下载 https://redis.io/download/ 安装步骤&#xff1a; 1.安装redis 所需要的依赖 yum install -y gcc tcl2.上传安装包并解压&#xff0c;下载安装包&#xff0c;上传到/usr/local/src目录&#xff0c;解压 tar -zxvf redis-7.2.3.tat.gz进入安装目录&#xff0c;运行…...

ECharts与Excel的结合实战

引言&#xff1a;本文是一篇ECharts和Excel实战的记录。将Excel与ECharts产生火花&#xff0c;从Excel读取数据然后在ECharts上展示。 1.柱状图前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title…...

UDP的特点及应用场景

目录 UDP特点 应用场景 总结 User Datagram Protocol&#xff08;UDP&#xff0c;用户数据报协议&#xff09;是互联网协议套件中的一种传输层协议。与TCP不同&#xff0c;UDP是一种无连接的、不可靠的协议。 UDP特点 要知道UDP可以用来做什么&#xff0c;首先我们要知道它…...

Python开发——工具篇 Pycharm的相关配置,Python相关操作 持续更新

前言 本篇博客是python开发的工具篇相关&#xff0c;介绍pycharm的使用和相关配置&#xff0c;收录python的相关操作&#xff0c;比如如何启动jupyter。 目录 前言引出Pycharmpycharm如何不同等级日志显示不同颜色设置不同pycharm的python环境 Python操作如何启动Jupyter 总结…...

【深度学习】卷积神经网络结构组成与解释

卷积神经网络是以卷积层为主的深度网路结构&#xff0c;网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积&#xff08;元素相乘再求和&#xff09;的操作。 1. 卷积层 常见的卷积操作如下&#xff1a; 卷积操作解释图解标准卷…...

0Ω电阻的工程应用与电流承载能力解析

1. 0Ω电阻的阻值真相作为一名硬件工程师&#xff0c;我经常遇到新手同事对0Ω电阻的阻值产生误解。实际上&#xff0c;0Ω电阻并非理想中的零阻抗&#xff0c;而是存在一定偏差范围的极小阻值电阻。根据EN60115-2国际电阻标准&#xff0c;0Ω电阻的最大允许偏差有三种规格&…...

每日安全情报报告 · 2026-04-08

每日安全情报报告 2026-04-08 报告时间&#xff1a;2026年04月08日 12:49 覆盖周期&#xff1a;近48小时&#xff08;2026-04-06 ~ 2026-04-08&#xff09; 今日特别关注&#xff1a;微软 Patch Tuesday 日&#xff08;Kerberos RC4 强制弃用生效&#xff09; FortiClient EMS…...

钻床夹具(说明书+装配图)

钻床夹具是机械加工中提升钻孔精度与效率的关键工具。其核心作用在于通过精准定位与可靠夹紧&#xff0c;确保工件在钻孔过程中保持稳定&#xff0c;避免因振动或位移导致的孔位偏差。传统钻孔作业依赖人工反复校准&#xff0c;不仅效率低下&#xff0c;且难以保证批量加工的一…...

告别‘选择困难症’:用Envelope Q-Learning让AI学会在《超级马里奥》里权衡金币与速度

告别‘选择困难症’&#xff1a;用Envelope Q-Learning让AI学会在《超级马里奥》里权衡金币与速度 想象一下&#xff0c;你正在玩《超级马里奥》&#xff0c;面对前方闪闪发光的金币和即将关闭的关卡大门&#xff0c;必须在"快速通关"和"收集财富"之间做出…...

Go Channel 缓冲区溢出问题

Go Channel 缓冲区溢出问题解析 在Go语言中&#xff0c;Channel是协程间通信的核心机制&#xff0c;但其缓冲区溢出问题常被开发者忽视。当写入数据的速度超过读取速度时&#xff0c;缓冲区可能溢出&#xff0c;导致程序阻塞或数据丢失。理解并解决这一问题&#xff0c;对构建…...

知识图谱嵌入评估实战:从MRR到HITS@n的指标解析与应用

1. 知识图谱嵌入评估指标入门指南 第一次接触知识图谱嵌入评估时&#xff0c;我被各种缩写搞得晕头转向。MRR、MR、HITSn这些指标就像天书一样&#xff0c;直到我在实际项目中踩了几个坑才真正理解它们的意义。现在我就用最直白的语言&#xff0c;带你快速掌握这些核心指标。 …...

从Doorbell到RoCE包:深度解析RDMA Tx数据流的硬件协同

1. 从门铃到数据包&#xff1a;RDMA发送流程全景图 想象一下你在一家高级餐厅点餐的场景&#xff1a;服务员&#xff08;CPU&#xff09;把你的订单&#xff08;WQE&#xff09;写在厨房门口的订单板&#xff08;SQ环形缓冲区&#xff09;上&#xff0c;然后按一下服务铃&…...

深入解析std::unique_lock:C++11线程同步的灵活利器

1. 为什么需要std::unique_lock&#xff1f; 当你第一次接触多线程编程时&#xff0c;可能会觉得用mutex直接加锁解锁就足够了。但实际开发中&#xff0c;我遇到过太多因为锁管理不当导致的死锁问题。比如某个函数有多个返回路径&#xff0c;如果每个return前都要手动unlock&am…...

【深度解析】Godzilla流量特征与实战检测技巧

1. Godzilla流量核心特征解析 第一次接触Godzilla流量时&#xff0c;我和很多安全工程师一样被它独特的通信模式所迷惑。这种基于Java编写的Webshell管理工具&#xff0c;在攻防演练中出现的频率越来越高。经过多次实战分析&#xff0c;我总结出几个关键特征点&#xff0c;这些…...

解锁本科论文「无痛通关」密码:Paperxie 毕业论文功能全维度拆解,从选题到定稿一步到位

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 引言&#xff1a;毕业季的「论文困局」&#xff0c;AI 正在打破僵局 每年毕业季&#xff0c;「写论文」几乎是所有…...