※ この記事にはアフィリエイトリンクが含まれます
Webフォームやデータ連携処理などで、「入力チェックのルール」や「データパターンの指定」をデータベースに持たせたいことってありませんか?
たとえば「電話番号はハイフン付きで」「ユーザーIDは英数字だけ」などのルールを、アプリ側ではなくPostgreSQLのテーブルに記録しておきたい場合、そのルールを正規表現(Regular Expression)で表現して保存するのがとても便利です。
この記事では、そんな「正規表現をINSERT文やUPDATE文でデータとして保存する」方法にフォーカスして解説していきます。
パターンをSQL内でどう書けばいいのか、エスケープはどうするのか、注意点はあるのか――そんな疑問に答えながら、実務で使えるコード例を交えて紹介していきます。
正規表現を含んだ文字列を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文の中に正規表現を埋め込んで保存する方法について、具体的な構文や注意点を交えながら解説してきました。
正規表現というと「検索で使うもの」というイメージが強いかもしれませんが、実はデータベースに保存する“ルール”としての使い道も非常に強力です。
特に以下のポイントを押さえておけば、実務で困ることはほとんどありません。
正規表現のルールをデータベースで一元管理しておけば、アプリケーション側のロジックをシンプルに保ちながら、柔軟にパターンを差し替えたりバージョン管理をしたりすることもできます。
最初は少し戸惑うかもしれませんが、慣れればとても心強い武器になります。
ぜひこの記事を参考に、PostgreSQLでの“正規表現の扱い”に自信を持ってみてください!
もしこの内容を通して、PostgreSQLについてさらに理解を深めたいと感じられたなら、信頼できる講座や書籍を紹介した別記事をご覧いただくのも良いかと思います。ご自身の学びに、きっとお役立ていただけるはずです。

コメント