回答編集履歴

5

見直し

2021/06/08 05:12

投稿

退会済みユーザー
test CHANGED
@@ -22,19 +22,19 @@
22
22
 
23
23
  ```sql
24
24
 
25
- BEGIN;
25
+ BEGIN; -- トランザクション開始
26
26
 
27
- SELECT * FROM テーブル名 ORDER BY category, sort_order;
27
+ SELECT id, category, name, sort_order FROM テーブル名 ORDER BY category, sort_order; -- 変更前の状態を表示して記録
28
28
 
29
- UPDATE テーブル名 SET name = 'carrot', sort_order = 1 WHERE id = 4;
29
+ UPDATE テーブル名 SET name = 'carrot', sort_order = 1 WHERE id = 4;
30
30
 
31
- INSERT INTO テーブル名(id, category, name, sort_order) VALUES (6, 'Vegetables', 'garlic', 2);
31
+ INSERT INTO テーブル名(id, category, name, sort_order) VALUES (6, 'Vegetables', 'garlic', 2);
32
32
 
33
- UPDATE テーブル名 SET category = 'fruit', name = 'peach', sort_order = 3 WHERE id = 4;
33
+ UPDATE テーブル名 SET category = 'fruit', name = 'peach', sort_order = 3 WHERE id = 4;
34
34
 
35
- SELECT * FROM テーブル名 ORDER BY category, sort_order;
35
+ SELECT id, category, name, sort_order FROM テーブル名 ORDER BY category, sort_order; -- 変更後の状態も表示して目視で比較する
36
36
 
37
- ROLLBACK;
37
+ ROLLBACK; -- これで変更はなかったことになる(問題なければCOMMITに変える)
38
38
 
39
39
  ```
40
40
 

4

加筆

2021/06/08 05:12

投稿

退会済みユーザー
test CHANGED
@@ -44,6 +44,20 @@
44
44
 
45
45
 
46
46
 
47
+ ちまちまUPDATE文やINSERT INTO文やDELETE文を書くのが面倒なら、
48
+
49
+ 一発truncate table文をやって、
50
+
51
+ COPY文で全レコード投入しなおせばいいです。
52
+
53
+ 実行するSQL文をテキストファイルで作っておく前提で。
54
+
55
+
56
+
57
+ [COPY](https://www.postgresql.jp/document/12/html/sql-copy.html)
58
+
59
+
60
+
47
61
  ---
48
62
 
49
63
 

3

加筆

2021/06/08 04:09

投稿

退会済みユーザー
test CHANGED
@@ -16,7 +16,15 @@
16
16
 
17
17
 
18
18
 
19
+ おすすめな方法として、トランザクション処理を加えます。
20
+
21
+
22
+
19
23
  ```sql
24
+
25
+ BEGIN;
26
+
27
+ SELECT * FROM テーブル名 ORDER BY category, sort_order;
20
28
 
21
29
  UPDATE テーブル名 SET name = 'carrot', sort_order = 1 WHERE id = 4;
22
30
 
@@ -24,7 +32,15 @@
24
32
 
25
33
  UPDATE テーブル名 SET category = 'fruit', name = 'peach', sort_order = 3 WHERE id = 4;
26
34
 
35
+ SELECT * FROM テーブル名 ORDER BY category, sort_order;
36
+
37
+ ROLLBACK;
38
+
27
39
  ```
40
+
41
+ これで、変更前のテーブルと、変更後のテーブルを表示するので、
42
+
43
+ 意図した内容になるのを確認したら、ROLLBACKをCOMMITに直して実行すれば反映されます。
28
44
 
29
45
 
30
46
 

2

見直し

2021/06/08 04:07

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,37 @@
1
+ データを削除できるんだったら、
2
+
3
+ 最初っからきれいに入れ直してもバチは当たらない気がするけど、
4
+
5
+ それでもデータを直したければ、
6
+
7
+ 地道にUPDATE文を実行していけばいいと思う。
8
+
9
+
10
+
11
+ なお、SELECT文でのORDER BY句で決めた並び順が保てればいいんだろうから、
12
+
13
+ idの付け替えはしないようだし、
14
+
15
+ ふつうにUPDATE文やINSERT INTO文を、変更が必要なレコードidに対して行うだけですよ。
16
+
17
+
18
+
19
+ ```sql
20
+
21
+ UPDATE テーブル名 SET name = 'carrot', sort_order = 1 WHERE id = 4;
22
+
23
+ INSERT INTO テーブル名(id, category, name, sort_order) VALUES (6, 'Vegetables', 'garlic', 2);
24
+
25
+ UPDATE テーブル名 SET category = 'fruit', name = 'peach', sort_order = 3 WHERE id = 4;
26
+
27
+ ```
28
+
29
+
30
+
31
+ ---
32
+
33
+
34
+
1
35
  serial型の話だと思って、勘違いの回答をしてしまいました。
2
36
 
3
37
  恥ずかしいけど残しておきます。

1

見直し

2021/06/08 04:04

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,9 @@
1
+ serial型の話だと思って、勘違いの回答をしてしまいました。
2
+
3
+ 恥ずかしいけど残しておきます。
4
+
5
+
6
+
1
7
  [8.1.4. 連番型](https://www.postgresql.jp/document/12/html/datatype-numeric.html#DATATYPE-SERIAL)
2
8
 
3
9
  [9.16. シーケンス操作関数](https://www.postgresql.jp/document/12/html/functions-sequence.html)