#navi(../)
* PerlでPostgreSQLにアクセスできるようにする・CentOS [#xdacaf8e]
PerlでPostgreSQLにアクセスするには、PostgreSQL用のDBDとperl-DBIをインストールする必要があります。~
本資料は、CentOS6でPerlによるPostgreSQLのアクセスをするためにPerlモジュールDBI/DBDのインストール方法と簡単なサンプルコードを記します。
#contents
#htmlinsertpcsp(db-top.html,db-sp.html)
* 関連資料 [#n9422e5b]
-[[PostgreSQLをCentOSにインストールする>PostgreSQL/CentOSインストール]]
-[[PHPでPostgreSQLに接続する・pg_connect>PHP/PostgreSQLに接続する・pg_connect]]
-[[PerlでPostgreSQLに接続するサンプルコード>Perl/PostgreSQLに接続するサンプルコード]]
-[[CPANのDBD::Pgがインストールできない場合の対処>PostgreSQL/DBD Pgがインストールできない場合の対処]]
* DBI/DBDとは [#me459659]
DBIとは、DataBase Interfaceの略語になります。~
DBDとは、DataBase Driverの略語になります。~
したがって、DBDは各データベース毎に用意されています。~
たとえば、PostgreSQLの場合は、perl-DBD-Pgパッケージ, MySQLの場合は、perl-DBD-MySQLパッケージになります。~
DBIは、Perlからデータベースを操作するためのAPIになります。
* PostgreSQLを操作するために必要なDBIとDBDモジュールをインストール [#d33adffb]
rootになり、以下のコマンドでDBIとDBDをインストールします。
yum -y install perl-DBI perl-DBD-Pg
以下、インストールしたときの出力です。
# yum -y install perl-DBI perl-DBD-Pg
Loaded plugins: fastestmirror
Determining fastest mirrors
<snip>
Setting up Install Process
Package perl-DBI-1.609-4.el6.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package perl-DBD-Pg.x86_64 0:2.15.1-4.el6_3 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
============================================================================================================================
Package Arch Version Repository Size
============================================================================================================================
Installing:
perl-DBD-Pg x86_64 2.15.1-4.el6_3 updates 196 k
Transaction Summary
============================================================================================================================
Install 1 Package(s)
Total download size: 196 k
Installed size: 544 k
Downloading Packages:
perl-DBD-Pg-2.15.1-4.el6_3.x86_64.rpm | 196 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : perl-DBD-Pg-2.15.1-4.el6_3.x86_64 1/1
Verifying : perl-DBD-Pg-2.15.1-4.el6_3.x86_64 1/1
Installed:
perl-DBD-Pg.x86_64 0:2.15.1-4.el6_3
Complete!
perl-DBIですが、既にインストールされていました。(Package perl-DBI-1.609-4.el6.x86_64 already installed and latest version)
* テストしたPostgreSQLの環境 [#e3b14d11]
以下の設定で環境を構築しました。
- pg_hba.conf抜粋~
パスワード認証を必要としてあります。
# IPv4 local connections:
host all all 127.0.0.1/32 md5
- ユーザの追加~
postgresユーザにsuし、sakuraユーザを追加しパスワードを設定しました。
-bash-4.1$ createuser -P sakura
新しいロールのパスワード:
もう一度入力してください:
新しいロールをスーパーユーザとしますか? (y/n)y
* PerlでPostgreSQLに接続してみる [#o9a2d315]
以下にPerlによるPostgreSQLアクセスの簡単なサンプルコードを記します。
- サンプルコード
#ref(pg_connect.pl.zip)
#!/usr/bin/perl
use DBI;
# PostgreSQL
our $DB_NAME = "postgres";
our $DB_USER = "sakura";
our $DB_PASS = "sakura";
our $DB_HOST = "127.0.0.1";
our $DB_PORT = "5432";
my $dbh = DBI->connect("dbi:Pg:dbname=$DB_NAME;host=$DB_HOST;port=$DB_PORT","$DB_USER","$DB_PASS") or die "$!\n Error: failed to connect to DB.\n";
my $sth = $dbh->prepare("SELECT now();");
$sth->execute();
while (my $ary_ref = $sth->fetchrow_arrayref) {
my ($row) = @$ary_ref;
print $row , "\n";
}
$sth->finish;
$dbh->disconnect;
1;
- 実行結果
SELECT now(); が正常に動作しました。
$ ./pg_connect.pl
2012-10-04 17:03:45.030885+09
以下のエラーが発生した場合は、DBI,DBDモジュールがインストールされていません。~
上記の「PostgreSQLを操作するために必要なDBIとDBDモジュールをインストール」を参照してください。
$ ./pg_connect.pl
install_driver(Pg) failed: Can't locate DBD/Pg.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/sh...