文档章节

pg_bulkload批量载入工具(初探)

LIAN-SA
 LIAN-SA
发布于 2014/09/01 14:55
字数 875
阅读 202
收藏 0

安装:

# tar -zxvf pg_bulkload-3.1.6.tar.gz
# cd pg_bulkload-3.1.6
# . /home/postgres/.bash_profile
# make
# make install


引入扩展:

$ psql 
psql (9.3.4)
Type "help" for help.
postgres=# create database test;
CREATE DATABASE
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# create extension pg_bulkload ;
CREATE EXTENSION
test=# \dx
                                     List of installed extensions
    Name     | Version |   Schema   |                           Description                           
-------------+---------+------------+-----------------------------------------------------------------
 pg_bulkload | 1.0     | public     | pg_bulkload is a high speed data loading utility for PostgreSQL
 plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)
test=# \df
                                                                                                                                 List of functions
 Schema |    Name     | Result data type |                                                                                                       Argum
ent data types                                                                                                       |  Type  
--------+-------------+------------------+------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------+--------
 public | pg_bulkload | record           | options text[], OUT skip bigint, OUT count bigint, OUT parse_errors bigint, OUT duplicate_new bigint, OUT d
uplicate_old bigint, OUT system_time double precision, OUT user_time double precision, OUT duration double precision | normal
(1 row)


创造测试数据:

test=# create table t1(id int,name text);
CREATE TABLE
test=# insert into t1 select generate_series(1,50000000),'HighGo';
INSERT 0 50000000
test=# \d+
                    List of relations
 Schema | Name | Type  |  Owner   |  Size   | Description 
--------+------+-------+----------+---------+-------------
 public | t1   | table | postgres | 2112 MB | 
(1 row)
test=# copy t1 to '/opt/pg93/data/t1.csv' with(format 'csv');
COPY 50000000
$ du -sh /opt/pg93/data/t1.csv 
754M /opt/pg93/data/t1.csv


copy方式载入数据:

(with logged):

test=# truncate t1;
TRUNCATE TABLE
test=# \timing 
Timing is on.
test=# 
test=# copy t1 from '/opt/pg93/data/t1.csv' with(format 'csv');
COPY 50000000
Time: 139038.099 ms

(without logged):

test=# truncate t1;
TRUNCATE TABLE

修改t1表为unlogged
test=# update pg_class set relpersistence='u' where relname='t1';
UPDATE 1

test=# copy t1 from '/opt/pg93/data/t1.csv' with(format 'csv');
COPY 50000000
Time: 110796.480 ms


pg_blukload载入数据:

(without logged):

$ pg_bulkload -i /opt/pg93/data/t1.csv -O t1 -l t1_bulkload.log -o "TYPE=CSV" -o "WRITER=PARALLEL" -d test
NOTICE: BULK LOAD START
NOTICE: BULK LOAD END
 0 Rows skipped.
 50000000 Rows successfully loaded.
 0 Rows not loaded due to parse errors.
 0 Rows not loaded due to duplicate errors.
 0 Rows replaced with new rows.
Run began on 2014-06-16 05:53:45.025377+08
Run ended on 2014-06-16 05:55:00.625057+08
CPU 2.80s/33.00u sec elapsed 75.60 sec
$ pg_bulkload -i /opt/pg93/data/t1.csv -O t1 -l t1_bulkload.log -o "TYPE=CSV" -o "WRITER=DIRECT" -d test
NOTICE: BULK LOAD START
NOTICE: BULK LOAD END
 0 Rows skipped.
 50000000 Rows successfully loaded.
 0 Rows not loaded due to parse errors.
 0 Rows not loaded due to duplicate errors.
 0 Rows replaced with new rows.
Run began on 2014-06-16 06:05:40.267198+08
Run ended on 2014-06-16 06:07:05.08921+08
CPU 6.88s/34.25u sec elapsed 84.82 sec


(with logged):

test=# truncate t1;
TRUNCATE TABLE
修改t1表为logged
test=# update pg_class set relpersistence='p' where relname='t1';
UPDATE 1
$ pg_bulkload -i /opt/pg93/data/t1.csv -O t1 -l t1_bulkload.log -o "TYPE=CSV" -o "WRITER=PARALLEL" -d test
NOTICE: BULK LOAD START
NOTICE: BULK LOAD END
 0 Rows skipped.
 50000000 Rows successfully loaded.
 0 Rows not loaded due to parse errors.
 0 Rows not loaded due to duplicate errors.
 0 Rows replaced with new rows.
Run began on 2014-06-16 05:57:05.620751+08
Run ended on 2014-06-16 05:58:20.458029+08
CPU 2.80s/33.02u sec elapsed 74.84 sec

  
$ pg_bulkload -i /opt/pg93/data/t1.csv -O t1 -l t1_bulkload.log -o "TYPE=CSV" -o "WRITER=DIRECT" -d test
NOTICE: BULK LOAD START
NOTICE: BULK LOAD END
 0 Rows skipped.
 50000000 Rows successfully loaded.
 0 Rows not loaded due to parse errors.
 0 Rows not loaded due to duplicate errors.
 0 Rows replaced with new rows.
Run began on 2014-06-16 06:02:10.33344+08
Run ended on 2014-06-16 06:03:36.986382+08
CPU 7.15s/34.93u sec elapsed 86.65 sec


pg_bulkload执行过程中查看进程和连接:
(WRITER=PARALLEL)

$ ps -ef | grep post
postgres 24044 22690  0 05:53 pts/2    00:00:00 pg_bulkload -i /opt/pg93/data/t1.csv -O t1 -l t1_bulkload.log -o TYPE=CSV -o WRITER=PARALLEL -d test
postgres 24045  2236 48 05:53 ?        00:00:04 postgres: postgres test [local] SELECT
postgres 24046  2236 20 05:53 ?        00:00:02 postgres: postgres test [local] SELECT
postgres=# select datname,application_name,query from pg_stat_activity;
 datname  | application_name |                                                                                                               query    

                                                                                                           
----------+------------------+------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
 postgres | psql             | select datname,application_name,query from pg_stat_activity;
 test     | pg_bulkload      | SELECT * FROM pg_bulkload($1)
 test     |                  | SELECT * FROM pg_bulkload(ARRAY['TYPE=TUPLE','INPUT=' || $1,'WRITER=DIRECT','OUTPUT=' || $2,'ON_DUPLICATE_KEEP=' || $3,
'DUPLICATE_ERRORS=' || $4,'DUPLICATE_BADFILE=' || $5,'LOGFILE=' || $6,'VERBOSE=' || $7,'TRUNCATE=' || $8])
(3 rows)


(WRITER=PARALLEL)

$ ps -ef | grep post
postgres 24124 22690  0 06:02 pts/2    00:00:00 pg_bulkload -i /opt/pg93/data/t1.csv -O t1 -l t1_bulkload.log -o TYPE=CSV -o WRITER=DIRECT -d test
postgres 24125  2236 49 06:02 ?        00:00:13 postgres: postgres test [local] SELECT
test=# select datname,application_name,query from pg_stat_activity;
 datname | application_name |                            query                             
---------+------------------+--------------------------------------------------------------
 test    | pg_bulkload      | SELECT * FROM pg_bulkload($1)
 test    | psql             | select datname,application_name,query from pg_stat_activity;
(2 rows)

© 著作权归作者所有

上一篇: Ora2Pg安装配置
下一篇: pgsi
LIAN-SA
粉丝 29
博文 36
码字总数 76225
作品 0
广州
数据库管理员
私信 提问
企业级PostgreSQL扩展

我们一直在讨论构建企业级 PostgreSQL的相关设置,例如安全、备份策略、高可用,以及不同规模 PostgreSQL。在本文中,我们将回顾一些最流行的开源 PostgreSQL扩展,这些扩展的一些功能用于满...

飞象数据
2018/12/13
0
0
PostgreSQL 生成空间热力图

标签 PostgreSQL , 热力图 , 空间切割 , 并行计算 , parallel safe 背景 结合空间数据,计算基于地理位置信息的热力图,在空间数据可视化场景中是一个非常常见的需求。 结合流计算,可以实现...

德哥
2018/10/05
0
0
PostgreSQL 批量导入性能 (采用dblink 异步调用)

标签 PostgreSQL , unlogged table , 批量 , dblink 背景 批量导入数据,怎样能挖掘出系统的比较极限的潜能? 瓶颈通常在哪里? 1、WAL lock 2、INDEX lock 3、EXTEND LOCK 4、autovacuum 干扰...

德哥
2018/05/06
0
0
PostgreSQL 批量SQL before/after for each row trigger的触发时机、性能差异分析、建议 - 含9.4 , 10版本

标签 PostgreSQL , trigger , row , statement , before , after , s_lock 背景 数据库触发器的触发时机,性能,高并发批量导入时,触发器的性能如何? 批量导入时,before, after触发器在f...

德哥
2018/10/05
0
0
查看Postgresql的连接状况

今天遇到一个问题,就是pg一直报错,说有太多的客户端连接到数据库上面。但现在不知道是什么程序连接。pg默认的max_connection是100,我并没有修改过,以为平时公司内部用,应该够了,但现在...

CLLam
2013/06/17
0
3

没有更多内容

加载失败,请刷新页面

加载更多

抽象同步队列AQS——AbstractQueuedSynchronizer锁详解

AQS——锁的底层支持 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资...

须臾之余
今天
3
0
springboot配置百度UEditor 富文本详解

富文本简介 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 准备工作 ueditor需要单独文...

wotrd
昨天
4
0
mysql 5.7之my.cnf配置大全

[client]port = 3306socket = /tmp/mysql.sock[mysqld]###############################基础设置######################################Mysql服务的唯一编号 每个mysql服务...

Online_Reus
昨天
3
0
MAVEN打包时引入外部链接的包

1.项目引入了ORACLE的jar包,MAVEN配置如下 2.打jar包的时候需要指定下main入口函数mainClass <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> ......

Cobbage
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部