[pgsql-jp: 35563] Re: プライマリーキーが重複する??
hogehoge
kazubonbonk @ yahoo.co.jp
2005年 6月 22日 (水) 17:31:21 JST
木村と申します。
> 全体的に見て、とても不思議です。ここから解決に向けて試
せる方法はありますか?
ゴミ文字が入っているという可能性があれば、rawデータを取
得して調べる必要があります。
私は、時々WEB FORMから非表示文字のゴミを放り込まれている
口で、問題が起きる度にゴミ文字の調査をしています。
こういう場合、psqlでは非表示文字は出て来ないので、あてに
なりません。そのため、調査のためにPerlの16進ダンプを作っ
て対応しています。
psqleditも、ゴミ文字を表示しないので、やはりこんな時には
使えません。
自作のPerl16進ダンプ・サンプルコードを載せます。
-------------------------------------------------
urldump.pl
#! /usr/bin/perl
#
# モジュール使用宣言
#
use strict;
use DBI;
use xdump;
#
# 定数定義
#
my $dbname = "dbname";
my $host = "localhost";
my $port = "5432";
my $pgusername = "usr1";
my $pgpassword = "pwd1";
my ($dbh,$sth,$result,$ntuples,$errormess, @ row);
#
#
#===========================================================
# PostgreSQLに接続
#===========================================================
$dbh = DBI->connect(
"DBI:Pg:dbname=$dbname;host=$host;port=$port",
$pgusername, $pgpassword);
#
#===========================================================
# URL取り出し
#===========================================================
#
$sth = $dbh->prepare("select url from table_url where url
= ?");
$result = $sth->execute("%http://hogehoge/%");
#
$ntuples = $sth->rows;
if ( $ntuples <= 0 ) { # 無い場合はエラ−
# エラー処理
$rtn = $sth->finish;
$rtn = $dbh->disconnect;
exit(1);
} elsif ( $result eq undef ) { # undefの場合はエラー
$errormess = $sth->errstr;
printf("データベースアクセスエラー %s", $errormess);
$rtn = $sth->finish;
$rtn = $dbh->disconnect;
exit(1);
}
# row配列に格納
while (@row = $sth->fetchrow_array) {
&xdump::xdump($row[0]);
}
$rtn = $sth->finish;
#
# DBから切断
$rtn = $dbh->disconnect;
#
exit(0);
-------------------------------------------------
xdump.pm
#! /usr/bin/perl
#
package xdump;
use strct;
#
sub xdump {
my($mess) = @_;
my %hextab = (
"\x00" => "0",
"\x01" => "1",
| この間の部分は作って下さい。
"\xFE" => "254",
"\xFF" => "255"
);
my @tab = split(//,$mess);
my ($val,$key);
foreach $key (@tab) {
$val = $hextab{$key};
printf("%0X", $val);
}
print "\n";
}
1;
-------------------------------------------------
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
pgsql-jp メーリングリストの案内