[pgsql-jp: 38278] 主キーの重複登録とそれに伴うlikeと=の検索結果の相違について

岩藤 謙一郎 iwafuji.kenichiro @ toshiba-sol.co.jp
2007年 4月 4日 (水) 12:04:39 JST


はじめまして、岩藤と申します。
過去スレッドを3カ月分ほどさかのぼってみたのですが、類似のトピックがなかったようなので、投稿させていただきます。

以下の作業は全てpgAdmin III Queryを利用して行っております。
また、PostgreSQLのバージョンはプロンプトから調べたところ
PostgreSQL 8.0.0 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2
となっています。

次のようなテーブルを作成しました。(簡略化してあります)

CREATE TABLE tbl_test
(
  "主キー" varchar(20) NOT NULL,
  "その他" varchar(20),
  CONSTRAINT tbl_test_pkey PRIMARY KEY ("主キー")
)
WITHOUT OIDS;
ALTER TABLE tbl_test OWNER TO postgre;

で、その後、次のようなInsert文を発行しました。
insert into tbl_test (主キー) values('r232');
(r232は小文字のrのみ全角で後は半角です(以下同様))
本来ならば主キーは一意のため、同様の命令が2回行われると
ERROR:  duplicate key violates unique constraint "tbl_test_pkey"
のようなエラーコードが出るはずなのですが、何回でもクエリが実行されてしまいます。 

また、その後次のようにして、挿入されたレコードを見ようとしたところ
select * from tbl_test where 主キー = 'r234';
該当するレコードは存在しないことになっています。
また、ワイルドカードを利用しないlikeは=と同値であると認識しているのですが、
次のような命令を実行すると、クエリ実行回数分のレコードがあるように見えます。
select * from tbl_test where 主キー like 'r234';
これは全件検索でも同様です(つまりデータは作成される)。
で、テーブルを新規に作り直しても同様の事象がおき、先頭に2バイト英字を入れても 

同様の結果が発生してしまいます。(他の値でも発生するかもしれません)

また、開発中のWebアプリから直接コネクトしてSQLを発行しても同様の事象が発生します。

で、以上を踏まえた上での質問なのですが
1.PostgreSQLにおいて、=とlikeはワイルドカードを用いない限り同値であると認識してよいのでしょうか?
2.この事象は私の端末、及びバージョンでのみ発生するものなのでしょうか?
3.先頭文字を全角にしたままで、この現象を回避することはできますでしょうか?

以上 長文になってしまいましたが、ご回答いただけると幸いです。
また、既知の問題であったら申し訳ありません。 




pgsql-jp メーリングリストの案内