パソコンから恋愛まで、みんなの知識、みんなで教えて!

OKWave

解決済みの質問

postgresql primary_key

失礼します。
今回重複データの削除等をしたテーブル
例:
-------------------------
id | name |
1 | hoge |
8 | piyo |
12 | temp |
-------------------------

このようなserial型でprimary_keyに設定したidの値を1,2,3と振り直したいです。
探してみるともしかしたらそのような事が不可能なのかもと思って投稿しました。
宜しくお願い致します。

投稿日時 - 2017-09-28 14:49:53

QNo.9379709

困ってます

質問者が選んだベストアンサー

sqlだけでできますね。postgresの課題ではなくSQLの課題でしたね。

UPDATE table as a SET id = (select count(id) from hoge as b where b.id <= a.id);

ここからはpostgresだけですが、シーケンステーブルの現在値が昔のままなら、を手動でセットしてあげて下し。もしかしたら最近のバージョンでは自動でセットされてるかもしれません。

投稿日時 - 2017-09-29 08:57:40

お礼

凄いです。テンポラリーテーブルでの作成を試していたのですが、
掲載して頂いたSQLでうまくいきました。
ありがとうございます。

投稿日時 - 2017-09-29 10:22:44

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

一旦テンポラリーテーブルに待避させ、テーブルの中身を全削除。
シーケンスをリセット(0にする)
INSERT SELECT でID以外を入れ直す

投稿日時 - 2017-09-28 16:26:00

ANo.1

serialって最終的にはdefault値が自動増加するだけdの【int型】ですから。

スクリプトで一度全部データ引いてきて、番号打ち直してアップデートかける方法しか思いつきませぬ。

もしかしたらsqlだけでできそうな気もしますが

投稿日時 - 2017-09-28 15:11:39