Top > Perlあれこれ > DBD::PgPPを使用したPostgresへのアクセス


C:\>createuser -d -U postgres -P maomao
新しいロールのパスワード:  ["maomao"ユーザーのパスワード]
もう一度入力してください:  ["maomao"ユーザーのパスワード]
新しいロールをスーパーユーザとしますか?  (y/n)n
新しいロールにロールを作成する権限を与えますか? (y/n)n
C:\>createdb -E UTF-8 -O maomao -U maomao maomao_db
パスワード:  ["maomao"ユーザーのパスワード]

C:\>psql -U maomao maomao_db
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 
-
|
|
|
!
 
 
 
 
 
CREATE TABLE department
(
   id integer NOT NULL, 
   "name" character varying(255) NOT NULL, 
    PRIMARY KEY (id)
);
 
INSERT INTO DEPARTMENT VALUES(1,'ACCOUNTING');
INSERT INTO DEPARTMENT VALUES(2,'RESEARCH');
INSERT INTO DEPARTMENT VALUES(3,'SALES');
INSERT INTO DEPARTMENT VALUES(4,'OPERATIONS');
C:\>ppm
PPM interactive shell (2.1.6) - type 'help' for available commands.
PPM> install DBD::PgPP
Install package 'DBD-PgPP?' (y/N): y
Installing package 'DBD-PgPP'...
Bytes transferred: 22178
Installing C:\xampp\perl\html\site\lib\DBD\PgPP.html
Installing C:\xampp\perl\site\lib\DBD\PgPP.pm
PPM>
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
use DBI;
use Encode;
 
# データベース接続情報を設定
$dbname = "maomao_db";
$host = "localhost";
$user = "maomao";
$password = "maomao";
 
# データベースへの接続。ここで、PgPP という名前の DBD を指定しています。
$conn = DBI->connect("dbi:PgPP:dbname=$dbname;host=$host", $user, $password ) or die;
 
$sql = "select * from department";
 
# SQL の発行
$sth = $conn->prepare($sql);
$sth->execute or die "Can not execute statement: ". $sth->errstr;
 
# レコード行をハッシュへのリファレンスとして取得します。
while ($href = $sth->fetchrow_hashref) {
  print $href->{"id"} . "\n";
  # UTF-8→shift-jisへ変換
  print encode('shift-jis', decode('utf-8', $href->{"name"} ."\n"));
}
 
$sth->finish;
$conn->disconnect;
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
!
 
 
 
#!"C:\xampp\perl\bin\perl.exe"
use DBI;
use Encode;
 
print "Content-type: text/plain; charset=UTF-8\n\n";
 
# データベース接続情報を設定
$dbname = "maomao_db";
$host = "localhost";
$user = "maomao";
$password = "maomao";
 
# データベースへの接続。ここで、PgPP という名前の DBD を指定しています。
$conn = DBI->connect("dbi:PgPP:dbname=$dbname;host=$host", $user, $password ) or die;
 
$sql = "select * from department";
 
# SQL の発行
$sth = $conn->prepare($sql);
$sth->execute or die "Can not execute statement: ". $sth->errstr;
 
# レコード行をハッシュへのリファレンスとして取得します。
while ($href = $sth->fetchrow_hashref) {
  print $href->{"id"} . "\n";
  print $href->{"name"} ."\n";
}
 
$sth->finish;
$conn->disconnect;
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
!
 
-
|
|
|
|
|
-
|
|
!
 
 
 
use DBI;
use Encode;
 
# データベース接続情報を設定
$dbname = "maomao_db";
$host = "localhost";
$user = "maomao";
$password = "maomao";
 
# データベースへの接続。ここで、PgPP という名前の DBD を指定しています。
$conn = DBI->connect("dbi:PgPP:dbname=$dbname;host=$host", $user, $password) or die;
 
#オートコミットをオフにします。
$conn->{AutoCommit} = 0;
#エラーメッセージの自動表示を抑止します。
$conn->{PrintError} = 0;
 
$sql = "INSERT INTO department(id, name) VALUES (?, ?);";
 
# SQL の発行
$sth = $conn->prepare($sql);
 
#トランザクション制御のためevalでdieをトラップします。
eval {
  #RaiseErrorに"1"を設定することで、エラー発生時に自動的にdieするようになります。
  #→自動的に実行されるdieは次の通り die("$class $method failed $DBI::errstr")
  $sth->{RaiseError} = 1;
  $sth->execute(7, "BBB");
  $sth->execute(8, "AAA");
};
 
if ($@) {
  #・rollbackをすると、"$@"の内容がクリアされてしまうので、順番に注意
  #・DBのエンコーディングはUTF8のため(?)、エラーメッセージはUTF8になります。
  # ここでは、DOSプロンプトで実行しているためShift-JISに変換しています。
  warn "Transaction aborted because". encode('shift-jis', decode('utf-8', $@ ."\n"));
  $conn->rollback;
} else {
  print "SUCCESS: insert.\n";
  $conn->commit;
}
 
$sth->finish;
$conn->disconnect;

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012-08-08 (水) 23:25:23 (2928d)