質問するログイン新規登録

質問編集履歴

5

.

2019/11/07 02:18

投稿

azuapricot
azuapricot

スコア2343

title CHANGED
File without changes
body CHANGED
@@ -89,7 +89,7 @@
89
89
  [シーケンスの値を変更をするには](http://www.ksknet.net/postgresql/post_34.html)
90
90
 
91
91
  ```
92
- SELECT SETVAL('"test_master_test_id_seq"', 100);
92
+ SELECT setval('test_master_test_id_seq', (SELECT MAX(test_id) FROM test_master));
93
93
  ```
94
94
 
95
95
 

4

解決

2019/11/07 02:18

投稿

azuapricot
azuapricot

スコア2343

title CHANGED
File without changes
body CHANGED
@@ -81,4 +81,39 @@
81
81
 
82
82
  [Django-モデルのプライマリキーをUUIDにする](https://hodalog.com/from-id-to-uuid-django-model/)
83
83
 
84
- シーケンス・・・?と思ってDBを見てみれば確かに自動採番するときにシーケンスの次の番号を入れようとしてるらしい。
84
+ シーケンス・・・?と思ってDBを見てみれば確かに自動採番するときにシーケンスの次の番号を入れようとしてるらしい。
85
+
86
+
87
+
88
+ じゃあ手運用後にシーケンスの値合わせてあげれば解決するのでは?
89
+ [シーケンスの値を変更をするには](http://www.ksknet.net/postgresql/post_34.html)
90
+
91
+ ```
92
+ SELECT SETVAL('"test_master_test_id_seq"', 100);
93
+ ```
94
+
95
+
96
+
97
+ ```Python
98
+ TestMaster.objects.create(title="title",
99
+ content="content",
100
+ creator="ADMIN"
101
+ )
102
+ ```
103
+
104
+
105
+
106
+ DBに **ID=101** で登録された!
107
+
108
+
109
+ ---
110
+
111
+ **結論**
112
+
113
+ - pgAdminで手動でレコード追加する場合は シーケンスを更新してあげないといけない
114
+ - ↑が嫌なら、自動採番じゃなくてUUIDなどに変更すべき
115
+
116
+
117
+ 個人的にはシーケンス更新が楽な気がするのでとりあえず解決
118
+
119
+ 同じ事象で困っている方の役に立ちますように。

3

2019/11/07 01:52

投稿

azuapricot
azuapricot

スコア2343

title CHANGED
File without changes
body CHANGED
@@ -73,4 +73,12 @@
73
73
  ```
74
74
 
75
75
  排他制御入れないとだめそう?だけど一応これなら自動採番もどきはできる・・・
76
- けど自動採番したい・・・
76
+ けど自動採番したい・・・
77
+
78
+ ---
79
+
80
+ ### 「Djangoでは、モデルのプライマリーキーがシーケンスによって決まります。」
81
+
82
+ [Django-モデルのプライマリキーをUUIDにする](https://hodalog.com/from-id-to-uuid-django-model/)
83
+
84
+ シーケンス・・・?と思ってDBを見てみれば確かに自動採番するときにシーケンスの次の番号を入れようとしてるらしい。

2

.

2019/11/07 01:33

投稿

azuapricot
azuapricot

スコア2343

title CHANGED
File without changes
body CHANGED
@@ -56,4 +56,21 @@
56
56
  **調査した結果の追記**
57
57
  Django ってDBを直接編集することを想定してないのか・・・?
58
58
  どうやったら同期とれるんだ・・・
59
- 登録する前にidの最大値とってくるしかないのか・・・?
59
+ 登録する前にidの最大値とってくるしかないのか・・・?
60
+
61
+ ------
62
+
63
+ **かなしみの暫定対応**
64
+
65
+ ```Python
66
+ entry = TestMaster.objects.all().aggregate(Max('test_id'))
67
+
68
+ TestMaster.objects.create(test_id=entry["test_id__max"] + 1,
69
+ title=title,
70
+ content=content,
71
+ creator=user
72
+ )
73
+ ```
74
+
75
+ 排他制御入れないとだめそう?だけど一応これなら自動採番もどきはできる・・・
76
+ けど自動採番したい・・・

1

2019/11/06 10:20

投稿

azuapricot
azuapricot

スコア2343

title CHANGED
File without changes
body CHANGED
@@ -50,4 +50,10 @@
50
50
  DBに直接レコードを追加してしまったがためにAutoFieldが機能していないのか、
51
51
  それともただ単に書き方が悪いのか・・・
52
52
 
53
- お時間ある方でAutoField設定項目について知識をお持ちの方いらっしゃいましたらご助力頂けますと幸いです。
53
+ お時間ある方でAutoField設定項目について知識をお持ちの方いらっしゃいましたらご助力頂けますと幸いです。
54
+
55
+ ---
56
+ **調査した結果の追記**
57
+ Django ってDBを直接編集することを想定してないのか・・・?
58
+ どうやったら同期とれるんだ・・・
59
+ 登録する前にidの最大値とってくるしかないのか・・・?