2

関数に基づいて、postgresql 9.0 db に一意のインデックスがあります。私が試した手動テストではまだ失敗していませんが、クエリを実行するとデータベースに重複が見られます。

これをチェックしてください:

Index: "users_screen_name_idx" UNIQUE, btree (lower(screen_name::text))

# select lower(screen_name), count(1) from users group by lower(screen_name) having count(1) > 1;

 lower         | count 
---------------+-------
 xxx xxx 3735  |     2
 xxx xxx 37383 |     2
 ... (36 more) ...
               | 17254
(39 rows)

これがどのように起こっているかについてのアイデアはありますか?NULL が一意ではないことはわかっています。それは問題ではなく、他の 38 行です。

4

3 に答える 3

1

データベース システムに障害が発生するように手動で試みている場合は、インデックスが破損している可能性があります。インデックスを再構築してみてください ( REINDEX)。値が重複しているために失敗した場合は、それだけです。

于 2011-02-16T04:37:05.957 に答える
0

テーブルの継承を使用している場合、一意の制約が継承されないため、これが発生する可能性があります。実際、これはおそらくこの種の最も一般的な原因であり、データの破損ではありません。

インデックスを削除して再作成すると失敗しますか?

そうでない場合、複製は別の場所にあります。

于 2012-09-28T12:56:32.753 に答える
0

PostgreSQL でトリガーを無効にすることができます。これは非常に危険なオプションですが、一意または外部キー制約に違反するデータをテーブルに実際に追加するために使用できます。

于 2011-02-16T04:53:16.833 に答える