url形式ドメイン(不完全版)

PostgreSQLにURL型みたいなのないの?と聞かれたので、正規表現でチェックするようななドメイン作ってあげればなんとかなるんじゃない?と答えておく。

とりあえずサンプルを作ってみる。本当はRFC 1738 - Uniform Resource Locators (URL)をきちんと読んで、それに合わせた正規表現パターンマッチを作らなきゃいけないけど、とりあえず仮の版ってことで。

test=# CREATE DOMAIN url AS text CHECK (VALUE ~ '^http[s]?://[[:alnum:]_+-]+(\.[
[:alnum:]_+-]+)+($|/.*$)' ) ;
CREATE DOMAIN
test=# CREATE TABLE test (name text, web url);
CREATE TABLE
test=# \d test
Table "public.test"
Column | Type | Modifiers

                                                    • -

name | text |
web | url |

test=# insert into test VALUES ('nuko', 'http://d.hatena.ne.jp/nuko_yokohama');
INSERT 0 1
test=# insert into test VALUES ('kuma', 'nttp://foo.bar/');
ERROR: value for domain url violates check constraint "url_check"
test=#