仕様と根拠
候補の条件
PostgreSQL では PRIMARY KEY は UNIQUE と NOT NULL を合わせた制約で、値が重複せず、空(NULL)もない列または列の組が対象です。このツールは、すべての行で値が互いに異なり、空欄が 1 つもない列を単独の候補とします。
列の組の見つけ方
単独では候補にならない列のうち、空欄のない列どうしを組み合わせ、組の値がすべての行で互いに異なるものを候補とします。単独の候補の列を含む組や、小さな組が候補なのにそれを含む大きな組は示しません。調べる組は最大 5,000 組までです。
判定の限界
判定はこの CSV に含まれる行だけで行います。行が少ないと、意味のない列も偶然に重複しないため候補になります。氏名のように将来重複しうる列も、今の行で重複がなければ候補と表示されます。主キーにしてよいかは、データの意味で決めてください。
根拠にした仕様・資料
| 仕様・資料 | 確認日 | 使った箇所 |
|---|---|---|
| PostgreSQL ドキュメント CREATE TABLE | 2026年10月28日 | PRIMARY KEY は UNIQUE と NOT NULL を合わせた制約。値は重複せず空でない |
| RFC 4180 Common Format and MIME Type for Comma-Separated Values (CSV) Files | 2026年10月28日 | 2 節の 3〜7(見出しの行・各行の値の数・二重引用符の囲みと "" のエスケープ) |
指摘の段階
- エラー: 仕様に反していて、正しく読めない・処理できない入力です。
- 警告: 読めるものの、仕様の推奨に反する・矛盾する・意図と違う結果になりやすい入力です。
- 情報: 誤りではありませんが、知っておくとよい扱い(読み飛ばした部分や解釈)です。
入力の扱い(送信しない仕組み)
処理はすべてお使いのブラウザの中で行います。処理の本体はこのサイトから配信する小さなスクリプト(/app.js)で、外部のサービスやライブラリを読み込みません。ページはブラウザに通信を禁止させる設定(Content-Security-Policy の connect-src)つきで配信しており、入力した内容がサーバーや第三者へ送られることはありません。ファイルを選んだ場合も、端末の中で読み込むだけです。
このツールでできないこと(制約)
- 判定はサンプルの行だけで行います。今のデータで重複がなくても、将来のデータで重複しないとは限りません。意味のある識別子(会員番号・注文番号など)かどうかで最終的に決めてください。
- 値の比較は完全一致です。前後の空白・大文字と小文字・全角と半角の違いは別の値として扱うため、取り込み先で正規化すると重複することがあります。
- 列の組は最大 3 列まで、調べる組は最大 5,000 組までです。列が多い CSV では、組の最大の列数を小さくして調べてください。
- ファイルは UTF-8 として読みます。Shift_JIS の CSV は文字化けするため、表計算ソフトで UTF-8 として保存し直してから使います。
ご利用にあたって
- この結果は設計の参考です。実際に表を作る前に、データの意味と将来の増え方にもとづいて主キーを決めてください。
- 大きなファイルでは、列の組を調べるのに時間がかかることがあります。そのため、調べる組の数に上限を設けています。