Chinaunix首页 | 论坛 | 博客
  • 博客访问: 475464
  • 博文数量: 104
  • 博客积分: 3455
  • 博客等级: 中校
  • 技术积分: 1216
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-18 18:33
文章分类

全部博文(104)

文章存档

2015年(3)

2014年(1)

2013年(7)

2012年(8)

2011年(11)

2010年(18)

2009年(56)

我的朋友

分类:

2009-03-11 11:20:11

当插入大量数据入数据库时,每个用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) |
0

上一篇:杭州半个月

下一篇:Perl中的引用

给主人留下些什么吧!~~