【入門編】 ユーザー定義関数(UDF)の作成 – PostgreSQL

こんにちは!データベースの世界へようこそ。

普段、PostgreSQLで「いつものSQL文」を何度も書いていて、「あー、これ毎回同じことやるの面倒だな……」なんて思ったことはありませんか?例えば、消費税を計算したり、文字列を特定の形に整えたり。

そんな時に大活躍するのが「ユーザー定義関数(UDF)」です。今日は、この便利な魔法の道具を一緒に作ってみましょう。

—

そもそも「ユーザー定義関数」ってなに?

料理で例えるなら、「いつもの手順を『レシピ』としてメモしておくこと」です。

毎日同じ手順でカレーを作るとき、いちいち「玉ねぎを切って、炒めて、肉を入れて……」と頭の中で考えなくても、「いつものカレーのレシピ」さえあれば、名前を呼ぶだけで料理が始まりますよね。

PostgreSQLにおける関数も同じです。「このデータを受け取ったら、こう加工して返してね」という手順をデータベースの中に保存しておき、あとで名前を呼ぶだけでその処理を実行できる仕組みなんです。

—

早速作ってみよう:CREATE FUNCTION

関数を作るには `CREATE FUNCTION` というコマンドを使います。まずは、「入力した数値を2倍にして返す」という単純な関数を作ってみましょう。

CREATE FUNCTION double_it(num integer)
RETURNS integer AS $$
BEGIN
RETURN num 2;
END;
$$ LANGUAGE plpgsql;

見ての通り、いくつか決まり文句があります。

  • `double_it(num integer)`: これが「関数の名前」と「受け取る引数」です。「`num` という名前で、整数(integer)を一つちょうだい」と言っています。
  • `RETURNS integer`: 「最後には整数を返すよ」と宣言しています。
  • `$$ … $$`: ここが料理の「手順書」です。この中に実際の処理を書きます。
  • `LANGUAGE plpgsql`: 「どういう言葉(プログラミング言語)で手順を書いたか」を伝えます。PostgreSQLにはお馴染みの `plpgsql` を使えば間違いありません。

これだけで、`SELECT double_it(10);` と打てば「20」という答えが返ってくるようになります。便利でしょう?

—

ちょっと便利な「オーバーロード」の話

ここが面白いところなのですが、PostgreSQLの関数は「名前が同じでも、中身が違えば別物」として扱えます。これを「オーバーロード」と呼びます。

例えば、「数値を2倍にする関数」と「文字列を2回繰り返す関数」、両方に `double_it` という名前をつけても大丈夫なんです。

— 数値用
CREATE FUNCTION double_it(num integer) …

— 文字列用
CREATE FUNCTION double_it(text_val text) …

こうしておけば、`double_it(10)` と書けば数字を計算し、`double_it(‘やっほー’)` と書けば「やっほーやっほー」と返してくれる。使う側は名前を一つ覚えるだけでいいので、とっても楽ですよね。

—

用が済んだら片付けよう:DROP FUNCTION

「あ、この関数もう使わないや」という時は、忘れずに掃除(削除)しておきましょう。

DROP FUNCTION double_it(integer);

ここで注意点が一つ。関数を削除するときは、「どの引数を受け取る関数か」をちゃんと指定してあげる必要があります。そうしないと、さっきのオーバーロードみたいに「どっちの `double_it` を消せばいいの?」とデータベースが迷子になってしまいますからね。

—

終わりに

ユーザー定義関数を使えるようになると、データベースは単なる「データの箱」から、「あなたの代わりに仕事をしてくれる優秀な助手」に変わります。

最初は難しく感じるかもしれませんが、まずは「いつもの計算を一つ関数にしてみる」ところから始めてみてください。その小さな一歩が、あなたのデータベース管理を劇的に楽にしてくれるはずですよ!

わからないことがあれば、いつでもまた聞きに来てくださいね。応援しています!

コメント

タイトルとURLをコピーしました