当插入大量数据入数据库时,每个用insert效率将很低,使用postgresql的copy,将提高很大的效率.
把要insert的数据存入一个文本文件,每次插入数据存为一行,每行中每个数据中间的分隔符自定,然后用copy
把文本导入数据库.
#################################################################
#!/usr/bin/perl -w
use strict;
use DBI;
my $driver="Pg";
my $database="postgres";
my $host="localhost";
my $user="username";
my $passwd="password";
my $port = 5432;
my $temp=/home/ty/temp;
my $dbh=DBI->conncet("DBI:$mydirver:dbname=$database;
host=$host;port=$port",$user,$passwd )
or die $DBI::errstr; #连接数据库
my $create=qq{create table tbsa ( id integer,
name varchar(10),
age integer,
sex varchar(5),
primary key (id) ) }; #建表的sql语句
my $copy=qq{copy tbsa from $temp with delimiter '|' }; #copy的sql语句
$dbh->do($create); #创建一个表
open( TEMP,">$temp"); #打开临时文件,用于保存待插入的值.
my $line=join "|",(1,ty,22,boy); #该语法把四个待插入的数据中间用"|"分开.
print TEMP "$line\n"; #把输入存入文件,用\n结尾.
close TEMP; #此处必须关闭文件,不然copy将再次打开文件而出错.
$dbh->do($copy); #把TEMP句柄的文件导入数据库.
$dbh->disconnect();
#################################################################
在文本中,必须要满足格式要求,copy语句设置的分隔符参数要和文本的分隔符相同,文本一行为一次insert
数据.更多细节查看postgres的copy.
阅读(2100) | 评论(0) | 转发(0) |