技术前刊:PostgreSQL12 COPY和bulkloading提升
时间:2022-07-28
本文章向大家介绍技术前刊:PostgreSQL12 COPY和bulkloading提升,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
业务是否依赖COPY命令加载数据?PostgreSQL12提供了一个新特性,大大加快了加载速度。
COPY:Loading and unloading data as fast as possible
细看PostgreSQL12的COPY语法,发现有两处变动:
1)h 会有手册文档链接
2)COPY支持WHERE条件
下面是完整语法:
db12=# h COPY
Command: COPY
Description: copy data between a file and a table
Syntax:
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
[ WHERE condition ]
COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
TO { 'filename' | PROGRAM 'command' | STDOUT }
[ [ WITH ] ( option [, ...] ) ]
where option can be one of:
FORMAT format_name
FREEZE [ boolean ]
DELIMITER 'delimiter_character'
NULL 'null_string'
HEADER [ boolean ]
QUOTE 'quote_character'
ESCAPE 'escape_character'
FORCE_QUOTE { ( column_name [, ...] ) | * }
FORCE_NOT_NULL ( column_name [, ...] )
FORCE_NULL ( column_name [, ...] )
ENCODING 'encoding_name'
URL: https://www.postgresql.org/docs/12/sql-copy.html
虽然添加文档链接功能带来便利,但是WHERE过滤功能更加有用。这个功能的目的是什么?当前,COPY只能导入整个文件。但是某些场景下会有问题:很多场景下,人们只想加载数据的一个子集,并且在导出前必须编写大量代码进行过滤。
COPY...WHERE: 导入时过滤
PostgreSQL通过该条件可以轻松地进行过滤。下面讲述一个简单的例子:
db12=# CREATE TABLE t_demo AS
SELECT * FROM generate_series(1, 1000) AS id;
SELECT 1000
首先先插入1000行数据,然后导出到一个文件:
db12=# COPY t_demo TO '/tmp/file.txt';
COPY 1000
最后,再重新导入数据:
db12=# CREATE TABLE t_import (x int);
CREATE TABLE
db12=# COPY t_import FROM '/tmp/file.txt' WHERE x < 5;
COPY 4
db12=# SELECT * FROM t_import;
x
---
1
2
3
4
(4 rows)
如上说是,过滤数据非常简单直接。需要注意,导出列是“id”,导入列是“x”。文件文件不知道导入表的表结构---需要确保过滤导入表的列名。
其他特性
COPY可以将数据发送到UNIX pipe,还可以从pipe中读取数据。如下所示:
db12=# COPY t_demo TO PROGRAM 'gzip -c > /tmp/file.txt.gz';
COPY 1000
db12=# COPY t_import FROM PROGRAM 'gunzip -c /tmp/file.txt.gz'
WHERE x BETWEEN 100 AND 103;
COPY 4
db12=# SELECT * FROM t_import WHERE x >= 100;
x
-----
100
101
102
103
(4 rows)
某些场景下,不止想将数据导出。上面场景,我们想导出数据时将数据压缩;导入时将数据解压并过滤。如上所示,这种方法非常简单。
原文
https://www.cybertec-postgresql.com/en/tech-preview-improving-copy-and-bulkloading-in-postgresql-12/
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法