技术前刊:PostgreSQL12 COPY和bulkloading提升

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 技术前刊:PostgreSQL12 COPY和bulkloading提升

业务是否依赖COPY命令加载数据?PostgreSQL12提供了一个新特性,大大加快了加载速度。


COPY:Loading and unloading data as fast as possible


细看PostgreSQL12的COPY语法,发现有两处变动:

1)\h 会有手册文档链接

2)COPY支持WHERE条件

下面是完整语法:

1. db12=# \h COPY
2. Command:     COPY
3. Description: copy data between a file and a table
4. Syntax:
5. COPY table_name [ ( column_name [, ...] ) ]
6.     FROM { 'filename' | PROGRAM 'command' | STDIN }
7.     [ [ WITH ] ( option [, ...] ) ]
8.     [ WHERE condition ]
9. COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
10.     TO { 'filename' | PROGRAM 'command' | STDOUT }
11.     [ [ WITH ] ( option [, ...] ) ]
12. where option can be one of:
13.     FORMAT format_name
14.     FREEZE [ boolean ]
15.     DELIMITER 'delimiter_character'
16.     NULL 'null_string'
17.     HEADER [ boolean ]
18.     QUOTE 'quote_character'
19.     ESCAPE 'escape_character'
20.     FORCE_QUOTE { ( column_name [, ...] ) | * }
21.     FORCE_NOT_NULL ( column_name [, ...] )
22.     FORCE_NULL ( column_name [, ...] )
23.     ENCODING 'encoding_name'
24. URL: https://www.postgresql.org/docs/12/sql-copy.html


虽然添加文档链接功能带来便利,但是WHERE过滤功能更加有用。这个功能的目的是什么?当前,COPY只能导入整个文件。但是某些场景下会有问题:很多场景下,人们只想加载数据的一个子集,并且在导出前必须编写大量代码进行过滤。


COPY...WHERE: 导入时过滤


PostgreSQL通过该条件可以轻松地进行过滤。下面讲述一个简单的例子:

1. db12=# CREATE TABLE t_demo AS
2.         SELECT * FROM generate_series(1, 1000) AS id;
3. SELECT 1000

首先先插入1000行数据,然后导出到一个文件:

1. db12=# COPY t_demo TO '/tmp/file.txt';
2. COPY 1000

最后,再重新导入数据:

1. db12=# CREATE TABLE t_import (x int);
2. CREATE TABLE
3. db12=# COPY t_import FROM '/tmp/file.txt' WHERE x < 5;
4. COPY 4
5. db12=# SELECT * FROM t_import;
6.  x
7. ---
8.  1
9.  2
10.  3
11.  4
12. (4 rows)


如上说是,过滤数据非常简单直接。需要注意,导出列是“id”,导入列是“x”。文件文件不知道导入表的表结构---需要确保过滤导入表的列名。


其他特性


COPY可以将数据发送到UNIX pipe,还可以从pipe中读取数据。如下所示:


1. db12=# COPY t_demo TO PROGRAM 'gzip -c > /tmp/file.txt.gz';
2. COPY 1000
3. db12=# COPY t_import FROM PROGRAM 'gunzip -c /tmp/file.txt.gz'
4.     WHERE x BETWEEN 100 AND 103;
5. COPY 4
6. db12=# SELECT * FROM t_import WHERE x >= 100;
7.   x  
8. -----
9.  100
10.  101
11.  102
12.  103
13. (4 rows)

某些场景下,不止想将数据导出。上面场景,我们想导出数据时将数据压缩;导入时将数据解压并过滤。如上所示,这种方法非常简单。


原文

https://www.cybertec-postgresql.com/en/tech-preview-improving-copy-and-bulkloading-in-postgresql-12/

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
消息中间件 存储 关系型数据库
PostgreSQL技术大讲堂 - 第33讲:并行查询管理
PostgreSQL从小白到专家,技术大讲堂 - 第33讲:并行查询管理
463 1
|
缓存 关系型数据库 数据库
PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
从零开始学PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
606 2
|
5月前
|
自然语言处理 关系型数据库 数据库
技术经验解读:【转】PostgreSQL的FTI(TSearch)与中文全文索引的实践
技术经验解读:【转】PostgreSQL的FTI(TSearch)与中文全文索引的实践
66 0
|
关系型数据库 定位技术 分布式数据库
沉浸式学习PostgreSQL|PolarDB 18: 通过GIS轨迹相似伴随|时态分析|轨迹驻点识别等技术对拐卖、诱骗场景进行侦查
本文主要教大家怎么用好数据库, 而不是怎么运维管理数据库、怎么开发数据库内核.
1306 1
|
SQL Oracle 关系型数据库
PostgreSQL技术大讲堂 - 第27讲:Oracle-FDW部署
从零开始学PostgreSQL,PG技术大讲堂 - 第27讲:Oracle-FDW部署
221 2
|
6月前
|
缓存 运维 关系型数据库
PostgreSQL技术大讲堂 - 第43讲:流复制原理
PostgreSQL技术大讲堂 - 第43讲:流复制原理
287 2
|
SQL JSON 关系型数据库
PostgreSQL技术大讲堂 - 第34讲:调优工具pgBagder部署
PostgreSQL从小白到专家技术大讲堂 - 第34讲:调优工具pgBagder部署
1190 1
|
SQL 关系型数据库 OLTP
PostgreSQL技术大讲堂 - 第31讲:SQL调优技巧
PostgreSQL从小白到专家,系列技术大讲堂 - 第31讲:SQL调优技巧
613 3
|
关系型数据库 PostgreSQL 索引
PostgreSQL技术大讲堂 - 第30讲:多表连接方式
从零开始学PostgreSQL技术大讲堂 - 第30讲:多表连接方式
311 2
|
存储 SQL 关系型数据库
PostgreSQL技术大讲堂 - 第29讲:执行计划与成本估算
从零开始学PostgreSQL技术大讲堂 - 第29讲:执行计划与成本估算
192 1