こんにちは!データベースの世界へようこそ。
PostgreSQLを触っていると、必ずと言っていいほど出会うのが「シーケンス」という仕組みです。
「IDを自動的に1, 2, 3…と振ってくれる便利機能」というのは聞いたことがあるかもしれませんが、いざ「今の値ってどう確認するの?」「ちょっとリセットしたいんだけど!」という場面になると、少しだけ腰が重くなったりしませんか?
今日は、そんなシーケンス操作のキホンである`nextval()`、`currval()`、`setval()`について、難しい言葉抜きでサクッと解説しますね。
—
シーケンスは「整理券発行機」だと思えばいい
まず、シーケンスをイメージしてみましょう。銀行や郵便局にある「整理券発行機」を想像してみてください。
ボタンをポチッと押すと、「次は10番です」と書かれた紙が出てきますよね。次に押すと「11番」。誰もが迷わずに順番通りに並べるように、データベースが自動的に番号を払い出してくれる。あれがまさにシーケンスの正体です。
この「整理券発行機」を操作するリモコンボタンが、今回紹介する3つの関数なんです。
—
1. nextval():迷わず「次の番号」をもらうボタン
一番よく使うのがこれです。
`nextval(‘シーケンス名’)` と書くと、整理券発行機のボタンを押しに行くのと同じ動きをします。
- 役割: 今の番号を1つ進めて、その新しい番号を教えてくれる。
- イメージ: 「すみませーん、次の方どうぞ!」と言って、新しい番号札をピッと発行する感覚です。
これを実行するたびに、データベースの中のカウンターが確実に「1」ずつ増えていきます。
—
2. currval():今の状況をそっと確認する
`currval(‘シーケンス名’)` は、ちょっと控えめな関数です。
- 役割: 「今、最後に発行した番号っていくつだっけ?」と確認する。
- イメージ: 整理券発行機の表示板をチラッと見て、「あ、今は15番まで出てるんだな」と確認する感じです。
注意点がひとつだけ。`nextval()` を一度も呼び出していないセッションで使うと、「まだ何も発行してないよ!」とPostgreSQLに怒られてしまいます。あくまで「自分(あるいは自分の接続)が最後に発行した番号」を見るためのもの、と覚えておいてくださいね。
—
3. setval():強制的に「番号を書き換える」魔法
最後は少し強力な `setval(‘シーケンス名’, 100)` です。
- 役割: 整理券の番号を強制的に「100番」から再スタートさせる。
- イメージ: 営業終了後に、カウンターの数字を無理やり「0」に戻したり、キリよく「1000」から再開させたりする操作です。
例えば、データの移行作業などで「続きの番号から振りたいんだよなぁ」という時、この関数で「次は1001から始めて!」と指示を出せます。かなりパワフルなので、使うときは「本当に今変えても大丈夫かな?」と一呼吸おいてから実行するようにしましょう。
—
まとめ:怖がる必要はありません!
PostgreSQLのシーケンス操作、こうして見ると日常の「整理券」と全く同じですよね。
- nextval(): 次の番号札を引く(基本!)
- currval(): 今の番号札を確認する(確認用)
- setval(): 番号札のカウントを調整する(管理用)
まずは `nextval()` を使って、「お、ちゃんと数字が増えてる!」という感覚を掴んでみてください。データベースを操作する楽しさが、また少し増えるはずですよ。
もし分からないことがあれば、いつでも気軽に聞いてくださいね。それでは、素敵なデータベースライフを!
コメント