CSV を PostgreSQL に変換
CSV ファイルをドロップすると、CREATE TABLE と INSERT 文を含む PostgreSQL 用のスクリプトができます。各列に型を付け、すべての修正を行と列とともに一覧にします。
5 行を変換、修正 8 件、却下なし
| 行 | ||||||
|---|---|---|---|---|---|---|
| 5 | 00412 | Peña Muñoz | Mérida | 15/02/2024 | 1.234,50 | sí |
| 6 | 00413 | José Ángel Ruiz | León | 03/02/2024 | 99,90 | no |
| 7 | 00414 | Zoë Ortíz | Querétaro | 29/02/2024 | N/A | sí |
| 8 | 00415 | Ñuño Castañeda | Oaxaca | 28/02/2024 | 7,25 | no |
| 9 | 00416 | Iñaki Olaizola | Mazatlán | 11/03/2024 | 980,75 | sí |
-- Written by IntoSQL for PostgreSQL.
SET client_encoding = 'UTF8';
BEGIN;
CREATE TABLE ventas_2024 (
folio text NOT NULL,
cliente text NOT NULL,
ciudad text NOT NULL,
fecha date NOT NULL,
importe numeric(6,2),
pagado boolean NOT NULL
);
INSERT INTO ventas_2024 (folio, cliente, ciudad, fecha, importe, pagado) VALUES
('00412', 'Peña Muñoz', 'Mérida', '2024-02-15', 1234.50, TRUE),
('00413', 'José Ángel Ruiz', 'León', '2024-02-03', 99.90, FALSE),
('00414', 'Zoë Ortíz', 'Querétaro', '2024-02-29', NULL, TRUE),
('00415', 'Ñuño Castañeda', 'Oaxaca', '2024-02-28', 7.25, FALSE),
('00416', 'Iñaki Olaizola', 'Mazatlán', '2024-03-11', 980.75, TRUE);
COMMIT;
修正
- ファイルは windows‑1252 で書かれていたため、UTF-8 に変換しました。
- ヘッダーは 4 行目にあります。その上の行は含めていません。
- 10 行目 ("TOTAL") は合計のため、含めていません。
- "Folio" の先頭のゼロを保持しました。00412 は 00412 のまま、テキストとして保存します。
- 15/02/2024 から "Fecha" の日付は日が先とわかるため、03/02/2024 は 2024‑02‑03 として読み取ります。
- "Importe" の数値は小数点にカンマを使っています。1.234,50 は 1234.50 として読み取ります。
- "Importe" の N/A を空として読み取りました(5 件中 1 件)。
- "Pagado" には「はい/いいえ」の語 (sí, no) があるため、ブール値として保存しました。
ファイルはこのコンピューター上で変換され、アップロードされることはありません。
その他のサンプル:
CSV から PostgreSQL へ、列ごとに
上のサンプル ventas_2024.csv を IntoSQL が PostgreSQL 用に書き出した結果です。各列のファイル内の内容、付く型、最初の値がスクリプトでどうなるかを示します。
| ファイル内 | 最初の値 | 列 | PostgreSQL の型 | スクリプト内 |
|---|---|---|---|---|
| Folio | 00412 | folio | text | '00412' |
| Cliente | Peña Muñoz | cliente | text | 'Peña Muñoz' |
| Ciudad | Mérida | ciudad | text | 'Mérida' |
| Fecha | 15/02/2024 | fecha | date | '2024-02-15' |
| Importe | 1.234,50 | importe | numeric(6,2) | 1234.50 |
| Pagado | sí | pagado | boolean | TRUE |
スクリプトを PostgreSQL に読み込む
ダウンロードされるのは普通の .sql ファイルです。PostgreSQL 付属のツールで実行してください。
ターミナルから
psql -v ON_ERROR_STOP=1 -d mydb -f ventas_2024.postgresql.sqlON_ERROR_STOP を付けると、psql は最初のエラーで止まります。スクリプトは 1 つのトランザクションで実行されるため、読み込みに失敗してもデータベースは元のままです。
データベースツールから
pgAdmin や DBeaver では、クエリウィンドウでスクリプトを開いて実行します。
スクリプトを使わずにPro
IntoSQL Pro なら、デスクトップアプリやコマンドラインからファイルを PostgreSQL に直接読み込めます。スクリプトを書き出す必要はありません。
intosql load ventas_2024.csv --into postgres://user@localhost/mydbCSV ファイルと PostgreSQL について知っておくこと
IntoSQL が CSV ファイルから読み取るもの
- Windows-1252 や UTF-16 を含め文字コードを判別するので、アクセント記号や ñ もそのまま届きます。
- 区切り文字を判別します。カンマ、セミコロン、タブ、縦線に対応しています。セミコロン区切りでは、1.234,50 のような小数点のカンマを数値として読み取ります。
- 引用符で囲まれた値には、区切り文字や改行を含められます。
PostgreSQL について知っておくこと
- 小数は numeric(p,s) として桁をそのまま保ち、時差付きの日付は timestamptz になります。
- PostgreSQL のテキストは NUL 文字を保持できないため、NUL を含む値からは取り除かれます。
- スクリプトは 1 つのトランザクションで実行されるので、読み込みに失敗しても中途半端な状態は残りません。
PostgreSQL で各種類の値がどう保存されるか
| 値 | PostgreSQL |
|---|---|
| はい/いいえ | boolean |
| 整数 | integer |
| 大きな整数 | bigint |
| 小数 | numeric(p,s) |
| 浮動小数点数 | double precision |
| 日付 | date |
| 時刻 | time |
| 日付と時刻 | timestamp |
| 日付と時刻、時差付き | timestamptz |
| テキスト | text |
CSV から PostgreSQL への変換に関する質問
ここに答えがない場合は、お問い合わせページからご連絡ください。担当者が返信します。 お問い合わせページ
CSV を PostgreSQL に変換するには?
このページ上部のコンバーターにファイルをドロップしてください。ヘッダーを見つけ、すべての値を読み取り、行った修正を一覧にしながら PostgreSQL 用のスクリプトを書き出します。スクリプトをダウンロードし、psql で実行してください。
CSV の区切りがセミコロンやタブの場合は?
区切り文字はカンマ、セミコロン、タブ、縦線から自動で検出されます。「その他のオプション」で指定することもできます。セミコロン区切りでは、1.234,50 のような小数点カンマも数値として読み取ります。
PostgreSQL ではどの型を使いますか?
はい/いいえの値は boolean、整数は integer、小数は numeric(p,s)、日付は date、時刻付きの日付は timestamp、テキストは text になります。サイズは各列の最も長い値から決まります。
PostgreSQL で先頭のゼロは残りますか?
はい。00412 のようなコードはテキストのまま扱われるため、PostgreSQL では text として保存され、スクリプトには '00412' と書かれます。
スクリプトを使わずに PostgreSQL にデータを読み込めますか?
はい、IntoSQL Pro で可能です。デスクトップアプリとコマンドラインが PostgreSQL に接続し、テーブルを作成してから行を直接読み込みます。
CSV ファイルはどのくらいの大きさまで扱えますか?
ブラウザは CSV を流れてくる順に読むため、数 GB のファイルも扱えます。Apple M4 のノートパソコンでは、コマンドラインが 100 万行・174 MB の CSV を 1 秒未満で変換します。