[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 メーリングリストの案内