CSV・JSON → SQL INSERT生成
ヘッダー付きCSVやオブジェクト配列のJSONを、検証用データベースに投入するためのPostgreSQL向けINSERT文に変換するツールです。テーブル名と出力する列を指定でき、文字列のエスケープやNULLの扱いを出力前に確認できます。生成したSQLはコピーやファイル保存ができ、すべてブラウザ内で処理されます。
- 値はすべて文字列として出力します(先頭ゼロも保持します)。
- 文字列内のシングルクォート(')は '' に置き換えます。バックスラッシュはそのまま出力します(standard_conforming_strings = on が前提)。
- 空のセルは既定で空文字('')として出力します。NULLにしたい場合は下のチェックを入れてください。
PostgreSQL向けの構文で出力します。他のデータベースでは引用符などの扱いが異なる場合があります。
使い方
- 入力形式(CSVまたはJSON)を選び、データを貼り付けるかファイルを読み込みます。
- テーブル名(必要に応じてスキーマ名)を入力し、出力する列を選びます。
- 「値の扱い」で、エスケープやNULLのルールを確認します。CSVの空セルやJSONの欠落キーの扱いはここで選べます。
- 生成されたINSERT文を「コピー」するか、「SQLファイルを保存」で保存します。
このツールについて
テスト用のデータをデータベースに投入したいとき、CSVやJSONを手作業でINSERT文に書き換えるのは手間がかかり、クォートのエスケープ漏れなどのミスも起きがちです。このツールでは、データを貼り付けるだけで正しく引用されたINSERT文を生成できます。
文字列内のシングルクォートは '' にエスケープし、テーブル名・列名はダブルクォートで囲んで識別子として扱います。CSVの値は既定ですべて文字列として扱うため、郵便番号などの先頭ゼロが失われることはなく、空のセルが勝手にNULLになることもありません。JSONでは null・数値・真偽値・文字列を区別し、キーが存在しない行やネストした値はエラーとして示します。
現在はPostgreSQL向けの構文のみに対応しています。データベースへの接続やSQLの実行、UPSERTは行いません。入力データがサーバーへ送信されることはありません。
入力をJSONにして [{"id":1,"name":"O'Brien"}] を貼り付け、テーブル名をusers、列をidとnameにすると、INSERT INTO "users" ("id", "name") VALUES (1, 'O''Brien'); が得られます。数値の1には引用符を付けず、名前の中の引用符だけを二重化します。
同じ1でもCSVから読み込むと文字列として引用されるため、型を明示したいデータにはJSONが向いています。生成はブラウザ内の文字列変換で、DBにデータを追加する操作は行いません。投入先の制約や既定値との整合は、実行前に別途確かめてください。
よくある質問
CSVの数値が文字列として出力されるのはなぜですか?
CSVには型の情報がないため、先頭ゼロや桁の大きい数値を失わないよう、すべて文字列として出力します。PostgreSQLは数値型の列に '123' のような文字列を挿入すると自動で変換します。
JSONでキーがない行はどうなりますか?
既定ではエラーとして該当する行とキーを表示し、データを勝手に補完しません。「キーが存在しない行の扱い」で、NULL または DEFAULT(列の既定値)を入れるように変更できます。
MySQLやSQLiteでも使えますか?
現在はPostgreSQL向けのみです。識別子の引用符やバックスラッシュの扱いがデータベースによって異なるため、他のデータベースではそのまま使えない場合があります。