13

SQLでは、テーブルを更新して、列を行ごとに異なる値に設定するにはどうすればよいですか?

PostgreSQL データベースのいくつかの行を更新し、1 つの列をシーケンスからの数値に設定します。その列には一意の制約があります。私はただ使用できることを望んでいました:

update person set unique_number = (select nextval('number_sequence') );

しかし、nextvalは一度しか呼び出されないように見えるため、更新ではすべての行に同じ番号が使用され、「重複キーが一意制約に違反しています」というエラーが発生します。代わりに何をすべきですか?

4

2 に答える 2

33

副選択を使用せず、次のようにnextval関数を直接使用します。

update person set unique_number = nextval('number_sequence');
于 2008-09-29T09:01:21.340 に答える
0

私はpgのシーケンスをハックと見なし、増分整数が行をキーイングするための最良の方法ではないことを示しています。pgsqlは8.3までUUIDのネイティブサポートを取得しませんでしたが

http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html

UUIDの利点は、ある日衝突する乱数とは異なり、組み合わせがほぼ無限になることです。

于 2008-11-06T18:13:13.480 に答える