PostgreSQL(Perl データベースへの接続)

データベースへの接続

    use DBI;

    my $dbh = DBI->connect(
                        DBI->connect_cached(  # 永続的な環境(mod_perl など)で接続を貼続ける
                                データソース, ユーザー名, パスワード,
                                { RaiseError => 0, PrintError => 1, AutoCommit => 1 },
                        ) or croak qq{can't connect : $!};
・データソース
    mysql

      DBI:mysql:データベース名

    postgresql

      DBI:Pg:dbname=データベース名;host=/tmp;port=5432;
・オプション
    RaiseError

      データベース処理でエラー発生時、例外 die を発生させる。デフォルトは 0(=off)、
     1(=on)にすると Internal Server Error を出力して停止。

    PrintError

      データベース処理でエラー発生時、エラーコードと警告メッセージを出力。
     デフォルトは 1(=on)、0(=off)にすると Web サーバのエラーログに出力されない。

    AutoCommit

      オートコミット。デフォルトは 1(=on)。

    ShowErrorStatement

      エラー発生時、問題の SQL 文をログに出力。デフォルトは 0(=off)。

    AutoInactiveDestroy

      fork した際に安全に、データベース・ハンドルを破棄する。デフォルトは 0(=off)。
・戻り値
    成功時 : データベース・ハンドル
    失敗時 : undef

データベース接続モジュール

データベースへの接続のみを行うモジュール。

package DBConnect;

####################
# データベース接続
####################

use strict;
use warnings;
use Carp qw( croak );
use DBI;
use Class::Std;

{
    # オブジェクトを扱う変数の型変換が無意味であることを警告する
    use overload (
        # 数値
        q{0+} => sub {
            croak q{オブジェクトを扱う変数の数値への型変換は無意味};
        },
        # 文字列
        q{""} => sub {
            croak q{オブジェクトを扱う変数の文字列への型変換は無意味};
        },
        # ブール値
        q{bool} => sub {
            croak q{オブジェクトを扱う変数のブール値への型変換は無意味};
        },
        # その他の演算には、perl の標準演算を使用
        fallback => 1,
    );

    # Class::Std のコンストラクタにて、属性の宣言と初期化を同時に行う

    # MySQL(MariaDB)接続
    sub mysql_connect {
        my $self = shift;

        # 定数
        my $dbname = 'データベース名';
        my $ds     = 'DBI:mysql:' . $dbname;   # データソース
        my $user   = 'ユーザー名';
        my $pw     = 'パスワード';

        my $dbh = DBI->connect(
                      $ds, $user, $pw,
                      { RaiseError => 0, PrintError => 1, AutoCommit => 1 },
                  ) or croak qq{can't connect : $!};

        return $dbh;
    }

    # PostgreSQL 接続
    sub postgresql_connect {
        my $self = shift;

        # 定数
        my $dbname = 'データベース名';
        my $ds     = 'DBI:Pg:dbname=' . $dbname;   # データソース
        my $user   = 'ユーザー名';
        my $pw     = 'パスワード';

        my $dbh = DBI->connect(
                      $ds, $user, $pw,
                      { RaiseError => 0, PrintError => 1, AutoCommit => 1 },
                  ) or croak qq{can't connect : $!};

        return $dbh;
    }

    # Class::Std のデストラクタにて、属性をガベージコレクション
    sub DEMOLISH {
        my $self = shift;
        return;
    }
}

1;


データベース・ハンドル取得

  use DBConnect;
  my $dbc_obj = DBConnect->new();
  my $dbh = $dbc_obj->postgresql_connect();