【PostgreSQL】文字列に正規表現パターンを埋め込んでINSERT/UPDATEする方法を解説!

スポンサーリンク

※ この記事にはアフィリエイトリンクが含まれます

Webフォームやデータ連携処理などで、「入力チェックのルール」や「データパターンの指定」をデータベースに持たせたいことってありませんか?

たとえば「電話番号はハイフン付きで」「ユーザーIDは英数字だけ」などのルールを、アプリ側ではなくPostgreSQLのテーブルに記録しておきたい場合、そのルールを正規表現(Regular Expression)で表現して保存するのがとても便利です。

この記事では、そんな「正規表現をINSERT文やUPDATE文でデータとして保存する」方法にフォーカスして解説していきます。

パターンをSQL内でどう書けばいいのか、エスケープはどうするのか、注意点はあるのか――そんな疑問に答えながら、実務で使えるコード例を交えて紹介していきます。

これから本格的にプログラミングを学びたい方へ

もしあなたがSQLのスキルだけでなく、「正規表現だけじゃなく、もっと本格的にプログラミングを学びたい」と思っているなら、実務レベルでのスキルが身につく「RareTECH」という学習サービスがおすすめです。

なんくる
なんくる

本気でやってみたい。でも何から始めたらいいか分からない。そんなときこそ、信頼できる学習環境に頼っていいんです。一人で悩む時間を、実務レベルの力に変えられます!

少しでも気になった方は、まずは無料カウンセリングで話を聞いてみるのがおすすめです。

[ RareTECHの無料カウンセリングはこちら

正規表現を含んだ文字列をINSERTするには?

PostgreSQLでは、正規表現自体を「文字列」として扱えるため、INSERT文やUPDATE文で普通に保存できます。つまり、正規表現もただのテキストとして扱えるということですね。

たとえば、こんな感じで「メールアドレスのパターン」を保存できます。

INSERT INTO validation_rules (rule_name, pattern)
VALUES ('メールアドレス', '^[\\w\\.-]+@[\\w\\.-]+\\.[a-zA-Z]{2,}$');

一見すると問題なさそうですが、ここで注意すべきポイントがあります。それが 「バックスラッシュ(\)」のエスケープ」です。

PostgreSQLの文字列はバックスラッシュが「特別扱い」

PostgreSQLの通常の文字列リテラル(シングルクオートで囲むもの)では、バックスラッシュはそのまま書けるとは限りません。正規表現でよく出てくる \d\w のようなパターンを使うときは、バックスラッシュを2回書いてあげる必要があります。

つまり \d'\\d' になります。

どうしても複雑なパターンになる場合は E’…’ 構文が便利

PostgreSQLでは E'...' という構文を使うことで、エスケープ文字を有効にした文字列を扱えます。これを使うと、より自然にバックスラッシュを書けるようになります。

INSERT INTO validation_rules (rule_name, pattern)
VALUES ('電話番号', E'^\\d{2,4}-\\d{2,4}-\\d{4}$');

これなら、\d などの正規表現っぽい見た目を保ちつつ、ちゃんとデータベースに保存できます。

UPDATE文で正規表現文字列をセットする方法

UPDATEも基本的な考え方はINSERTと同じで、正規表現パターンを文字列として扱えばOKです。

たとえば、すでに保存してあるバリデーションルールの正規表現を修正したい場合、以下のようなUPDATE文で更新できます。

UPDATE validation_rules
SET pattern = E'^[0-9]{3}-[0-9]{4}$'
WHERE rule_name = '郵便番号';

このように、E'' 構文を使ってバックスラッシュをしっかりエスケープすれば、UPDATEでも問題なく正規表現パターンを保存できます。

条件に応じて正規表現を動的に差し替えたいとき

たとえば、「あるフラグが立っていたら、厳しめの正規表現にする」といった柔軟な処理をしたいケースでは、PL/pgSQLを使って動的にUPDATEすることもできます。

DO $$
DECLARE
  new_pattern TEXT;
BEGIN
  -- 条件によって異なる正規表現をセット
  IF EXISTS (SELECT 1 FROM feature_flags WHERE name = 'strict_email_check') THEN
    new_pattern := E'^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$';
  ELSE
    new_pattern := E'.+@.+';
  END IF;

  UPDATE validation_rules
  SET pattern = new_pattern
  WHERE rule_name = 'メールアドレス';
END $$;

このように、動的に正規表現を組み立ててUPDATEすることも可能です。ロジックが複雑な場合は、SQLだけで完結させるよりもこういったPL/pgSQLで分岐を明示した方が保守しやすくなります。

まとめ

今回は、PostgreSQLでINSERTやUPDATE文の中に正規表現を埋め込んで保存する方法について、具体的な構文や注意点を交えながら解説してきました。

正規表現というと「検索で使うもの」というイメージが強いかもしれませんが、実はデータベースに保存する“ルール”としての使い道も非常に強力です。

特に以下のポイントを押さえておけば、実務で困ることはほとんどありません。

  • 正規表現は文字列としてそのままINSERT/UPDATEできる
  • バックスラッシュは \\E'' 構文でエスケープする必要あり
  • PL/pgSQLを使えば、条件によって動的にパターンを変更することも可能

正規表現のルールをデータベースで一元管理しておけば、アプリケーション側のロジックをシンプルに保ちながら、柔軟にパターンを差し替えたりバージョン管理をしたりすることもできます。

最初は少し戸惑うかもしれませんが、慣れればとても心強い武器になります。
ぜひこの記事を参考に、PostgreSQLでの“正規表現の扱い”に自信を持ってみてください!

PostgreSQLは、現場でも広く使われている信頼性の高いデータベースです。もしこれから本格的に学び、実務で通用する力をつけたい方には、RareTECHをチェックしてみてください。実案件ベースのカリキュラムで、あなたのスキルを次のステージへ引き上げてくれるはずです。

なんくる
なんくる

「本当にエンジニアとしてやっていけるか不安…」という方も、実践的な開発に関わることで、転職後の働き方を事前に体感できますよ。

実務で使えるDBスキルとともに、プログラミングスキルをちゃんと身につけたいなら、
RareTECH無料カウンセリングで、学ぶ目的やゴールをプロと一緒に明確にしてみましょう。独学では得られない「実践的な成長の道筋」が見えてきます。

▷ [ RareTECHの無料カウンセリングはこちら ]

もしこの内容を通して、PostgreSQLについてさらに理解を深めたいと感じられたなら、信頼できる講座や書籍を紹介した別記事をご覧いただくのも良いかと思います。ご自身の学びに、きっとお役立ていただけるはずです。

コメント

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