これは、PostgreSQLの実際の問題を説明するおもちゃの例です。以下の例ではPostgreSQL8.4.3サーバーを使用していますが、他のバージョンでも同じ問題が発生していると思われます。
次の表があるとします。
=>テーブルtmp_fooを作成します(fooブール値はnull固有ではなく、barブール値はnull固有ではありません); => tmp_foo(foo、bar)の値(true、true)、(false、false);に挿入します。 => select * from tmp_foo; foo | バー ----- + ----- t | t f | f
テーブルを次のように変更できますか?
=> select * from tmp_foo; foo | バー ----- + ----- t | f f | t
行を削除したり、テーブルスキーマを変更したりせずに?これ:
=>更新tmp_fooセットバー=バーではありません; エラー:重複するキー値が一意の制約「tmp_foo_bar_key」に違反しています
動作しません。
削除が許可されている場合、これは次のとおりです。
=>一時テーブルtmp_foo_2をselect*fromtmp_fooとして作成します。 =>更新tmp_foo_2setbar = not bar; =>tmp_fooから削除します; =>tmp_fooに挿入select*from tmp_foo_2;
動作します。これはこの例の最も単純な解決策ではありませんが、より複雑な例に簡単に一般化できます。