Copy命令在PG 12有所增强,在COPY FROM时可添加WHERE条件过滤.
PG 11
Copy命令
testdb=# \help 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 [, ...] ) ]
COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
TO { 'filename' | PROGRAM 'command' | STDOUT }
[ [ WITH ] ( option [, ...] ) ]
where option can be one of:
FORMAT format_name
OIDS [ boolean ]
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'
简单使用
testdb=# drop table if exists t_copy;
DROP TABLE
testdb=# CREATE TABLE t_copy(id int,c1 varchar(20));
CREATE TABLE
testdb=# insert into t_copy SELECT x,'c1-'||x FROM generate_series(1, 1000) AS x;
INSERT 0 1000
testdb=#
testdb=# COPY t_copy TO '/tmp/data/t_copy.txt' with DELIMITER '|';
COPY 1000
testdb=# drop table if exists t_import;
DROP TABLE
testdb=# CREATE TABLE t_import(id int,c1 varchar(20));
CREATE TABLE
testdb=# COPY t_import FROM '/tmp/data/t_copy.txt' with DELIMITER '|';
COPY 1000
testdb=# select * from t_import limit 10;
id | c1
----+-------
1 | c1-1
2 | c1-2
3 | c1-3
4 | c1-4
5 | c1-5
6 | c1-6
7 | c1-7
8 | c1-8
9 | c1-9
10 | c1-10
(10 rows)
不支持WHERE条件过滤
testdb=# COPY t_import FROM '/tmp/data/t_copy.txt' with DELIMITER '|' where id < 5;
ERROR: syntax error at or near "where"
LINE 1: ...t FROM '/tmp/data/t_copy.txt' with DELIMITER '|' where id <...
PG 12
COPY命令语法
[local]:5432 pg12@testdb=# \help 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条件过滤
[local]:5432 pg12@testdb=# drop table if exists t_copy;
DROP TABLE
Time: 50.327 ms
[local]:5432 pg12@testdb=# CREATE TABLE t_copy(id int,c1 varchar(20));
CREATE TABLE
Time: 5.038 ms
[local]:5432 pg12@testdb=# insert into t_copy SELECT x,'c1-'||x FROM generate_series(1, 1000) AS x;
INSERT 0 1000
Time: 16.422 ms
[local]:5432 pg12@testdb=#
[local]:5432 pg12@testdb=# COPY t_copy TO '/tmp/data/t_copy.txt' with DELIMITER '|';
COPY 1000
Time: 4.795 ms
[local]:5432 pg12@testdb=# drop table if exists t_import;
DROP TABLE
Time: 4.798 ms
[local]:5432 pg12@testdb=# CREATE TABLE t_import(id int,c1 varchar(20));
CREATE TABLE
Time: 2.462 ms
[local]:5432 pg12@testdb=# COPY t_import FROM '/tmp/data/t_copy.txt' with DELIMITER '|' WHERE id < 5;
COPY 4
Time: 4.842 ms
[local]:5432 pg12@testdb=# select * from t_import;
id | c1
----+------
1 | c1-1
2 | c1-2
3 | c1-3
4 | c1-4
(4 rows)
Time: 6.103 ms
参考资料
Tech preview: Improving COPY and bulkloading in PostgreSQL 12
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-2654243/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/6906/viewspace-2654243/