Perl 连接 postgresql 例子

Perl 连接 postgresql 例子
######################################################
#PERL-DBI-postgreqll创建,连接 2005 9 postgresql 8.0 linux环境
######################################################

use DBI;

use strict;


my $_DB_url=$main::_DB_url;# 地址

my $_DB_port=$main::_DB_port;#端口

my $_DB_usr=$main::_DB_usr;#用户名

my $_DB_pass=$main::_DB_pass;#密码

my $_DB_name=$main::_DB_name;# 数据库名称


my $DRIVERS_HOST_POST="DBI:Pg";#注意这里:数据库接口的表示方法

my %attr=(RaiseError => 0, PrintError => 1, AutoCommit => 1);

#\\\---------------------------------------------------------------------\\\#
# 函数用途 : 测试数据库环境 #
# 所需元素 : ip 用户,密码 端口 #
#\\\---------------------------------------------------------------------\\\#

sub test_db {

my $dbh=DBI->connect("$DRIVERS_HOST_POST:database=template1","$_DB_usr","$_DB_pass") or return 0;
#############这里注意,必须链接默认的template1方可通过

return 1;
}
sub test_db_exists {

my $dbh=DBI->connect("$DRIVERS_HOST_POST:database=$_DB_name","$_DB_usr","$_DB_pass") or return 0;

$dbh->disconnect;

return 1;

}

#\\\---------------------------------------------------------------------\\\#
# 函数用途 : 打开已知数据库连接 #
# 所需元素 : #
#\\\---------------------------------------------------------------------\\\#


sub connect_db {

my $dbh=DBI->connect("$DRIVERS_HOST_POST:database=$_DB_name","$_DB_usr","$_DB_pass") or &sql_log();

return $dbh;

}

#\\\---------------------------------------------------------------------\\\#
# 函数用途 : 关闭数据库连接 #
# 所需元素 : #
#\\\---------------------------------------------------------------------\\\#

sub disconnect_db {

my $dbh=$_[0];

$dbh->disconnect;

return 1;

}
#\\\---------------------------------------------------------------------\\\#
# 函数用途 : 创建新数据库 #
# 所需元素 : #
#\\\---------------------------------------------------------------------\\\#

sub create_db {

my $newdb_name=shift;#-----------------要创建的新数据库名

my $dbh=DBI->connect("$DRIVERS_HOST_POST:database=template1","$_DB_usr","$_DB_pass",\%attr) or die "$DBI::errstr";#--地址:端口:,数据库用户名:密码--#


#Creater database
#############这里注意,必须链接默认的template1方可通过


my $query= "CREATE DATABASE $newdb_name";

my $sth=$dbh->prepare($query) or die $dbh->errstr."<br>";

$sth->execute or die "$dbh->errstr<br>";

$sth->finish;

#$dbh->disconnect;

return 1;
}

#\\\---------------------------------------------------------------------\\\#
# 函数用途 : 单个建表 #
# 所需元素 : #
#\\\---------------------------------------------------------------------\\\#

sub create_table {

my $table_name=shift;#--表名

my $query=shift;#--表结构字符串

#--地址:端口:数据库名,数据库用户名:密码--#
my $dbh=DBI->connect("$DRIVERS_HOST_POST:database=$_DB_name","$_DB_usr","$_DB_pass",\%attr) or die "$DBI::errstr<br>";

#Creater table

$query= "CREATE TABLE IF NOT EXISTS $table_name $query";

my $sth=$dbh->prepare($query);# or die "Can't CREATE TABLE $_DB_name:$table_name" .$dbh->errstr."<br>";

$sth->execute;

$sth->finish;

$dbh->disconnect;

return 1;

}

#\\\---------------------------------------------------------------------\\\#
# 函数用途 : 批量创建表 #
# 所需元素 : #
#\\\---------------------------------------------------------------------\\\#

sub create_tables
{
my $_DB_name=$main::_DB_name;
my $query;
my $creat_info="<br><b> <font color=red>$_DB_type</font> 数据库创建信息: </b><br><br><b>数据库名:<font color=red>$_DB_name</font></b><br><br>";
my $table_name="";
#--地址:端口:数据库名,数据库用户名:密码--#
my $dbh=DBI->connect("$DRIVERS_HOST_POST:database=$_DB_name","$_DB_usr","$_DB_pass",\%attr) or die "$DBI::errstr<br>";

open QF, "$cgi_path/sql/$_DB_type/table.txt";

while (defined (my $line = <QF>)) {
next if ($line=~/--/);
if ($line=~/CREATE TABLE/) {
$table_name=$line;
$table_name=~s/\(//;

}
my $isComment = 0;
my $isBlankLine = 0;
if ($line =~ /^\s*#/) {$isComment = 1}
if ($line =~ /^\s*\n/) {$isBlankLine = 1}
if (!$isComment and !$isBlankLine) { $query .= " $line"; }
if ($line =~ /;\s*(\n|$)/) {
$query =~ s/^\s+//;
$query =~ s/\s+$//;
$query =~ s/(\r|\n)+/ /g;
if ($query ne ';') {

my $er=0;

$dbh->do($query) or $er=1;

if ($er ==1) {
$creat_info = "$creat_info Can't CREATE TABLE $_DB_name:$table_name" .$dbh->errstr."<br>";
}
else {
$creat_info = qq($creat_info table:<font color=red>$table_name</font> create successful!<br>);
}
}
$query = '';
}
}
close QF;

return $creat_info;
}

######################仅供参考,其它 略