check という列名と CHECK 制約の見分け
列名が check の列と、CHECK ( ) で始まる表の制約を見分ける例です。括弧が続く場合だけを制約とし、check int は列名として扱って予約語と判定します。
入力
CREATE TABLE 文または列名の一覧
CREATE TABLE t ( check int, CHECK (check > 0) );
入力の種類
CREATE TABLE 文(列の名前を読み取る)
結果
エラー 1 件・警告 0 件・情報 0 件
指摘(エラー・警告・情報)
- エラー 表 t・2 行目 「check」は PostgreSQL の予約語で、引用符なしでは列名にできません。"check" のように二重引用符で囲むか、別の名前に変えてください(付録 C)。囲んだ場合は、その列を使う SQL でも毎回同じ引用符が必要です。
| 読んだ表 | 1 個 |
|---|---|
| 検査した名前 | 1 個 |
| 引用符なしで使えない名前 | 1 個 |
列名ごとの判定
| 番号 | 表 | 列名(入力どおり) | 区分 | 引用符なしで列名にできるか |
|---|---|---|---|---|
| 1 | t | check | 予約語 | できない |
検算(この結果になる理由)
1 つ目の項目は check の後ろが型の int なので列名で、CHECK は予約語のためエラー 1 件です。2 つ目は CHECK の後ろが括弧なので表の制約として読み飛ばし、列は 1 つだけになります。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 完全な SQL の構文解析はしません。CREATE TABLE の ( ) の中の列の並びだけを読み、CREATE TABLE AS SELECT や PARTITION OF などは判定不能と示します。
- ALTER TABLE ADD COLUMN や SELECT 文の中の別名は読みません。調べたい名前は「列名の一覧」で貼り付けてください。
- 判定の基準は PostgreSQL のドキュメント付録 C のキーワード表です。MySQL・SQL Server・Oracle など別の製品の予約語は判定しません。
- バージョンによって予約語は増減します。このツールの一覧はドキュメント(2026-10-28 に確認)にもとづくため、古いバージョンでは結果が異なる場合があります。
ご利用にあたって
- この判定は PostgreSQL の予約語だけを対象にしています。複数のデータベースで使う SQL では、それぞれの製品の予約語も確認してください。
- SQL の中身(表名・列名)に機密情報が含まれる場合も、入力はブラウザの外に出ません。結果をコピーして共有する際の取り扱いにはご注意ください。