[pgsql-jp: 28708] current transaction is abortedについて
冨田 直人
ntomita @ pana.net
2003年 1月 16日 (木) 20:29:38 JST
はじめまして、冨田と申します。
[環境]
CPU:UltraSPARC-IIi clock 440MHz
メモリ:1G
OS:Solaris2.6
[ソフト]
apache(ver:1.3.26)
PostgreSQL(ver:7.2.1)
Perl(ver:5.005_03)
DBI(ver:1.3.2)
DBD-Pg(ver:1.13)
数万件のレコードが格納されているファイル(data.txt)から
一行ずつ読込、DBにinsertするプログラムを作成しています。
言語はPerlを使用し、PostgreSQLとやりとりする部分は、
DBIを使用しています。
COMMITのタイミングとしては、100件単位でcommitするように
しているのですが、1万5000件を超えた所から、下記のようなエラーが出力されます。
NOTICE: current transaction is aborted, queries ignored until end of transaction block
vmstat等を確認するとDisk I/Oの問題のようにも見えるのですが、
原因が掴めない為、こちらに投稿させていただきました。
プログラムが悪いような気もしますので、実際のプログラムを以下に示します。
何か原因が分かりましたら、教えてください。
解り難い説明で申し訳ありませんが、宜しくお願い致します。
#-- <insert.pl> -----------------------------#
use DBI;
$cnt = 0;
# DB接続
$dbh = DBI->connect("dbi:Pg:dbname=test_db", user, passwd, {
PrintError => 0,
AutoCommit => 0
});
open(FILE, "<data.txt");
$sth = $dbh->prepare(
q{ insert into t_test values(?,?,?,?,?) }
);
# ファイル読込
while (<FILE>) {
@str = split / /;
$rv = $sth->execute($str[0],$str[1],$str[2],$str[3],$str[4]);
$cnt++;
if(($cnt % 100)==0)
$dbh->commit;
}
}
close(FILE);
$dbh->commit; # COMMIT実行
$dbh->disconnect; # DB切断
exit;
#--------------------------------------------
# t_testテーブルの構成
#--------------------------------------------
psql -d test_db -c "CREATE TABLE t_test(
date timestamp,
msg_id char(200),
from_add char(200),
to_add char(100),
etc text
);"
# インデックス作成
psql -d test_db -c "CREATE INDEX test_index ON t_test(msg_id);"
-- <ntomita @ pana.net> --
pgsql-jp メーリングリストの案内