Naar de inhoud

CSV omzetten naar PostgreSQL

Zet je CSV-bestand neer en krijg een PostgreSQL-script met CREATE TABLE- en INSERT-statements. Elke kolom krijgt een type, en elke correctie wordt vermeld met rij en kolom.

Je bestand
csvventas_2024.csvVoorbeeldbestand, 357 byte
Je database

5 rijen geconverteerd, 8 correcties, geen afgewezen

Tonen
De eerste rijen van ventas_2024.csv, met elke correctie gemarkeerd
Rij
500412Peña MuñozMérida15/02/20241.234,50sí
600413José Ángel RuizLeón03/02/202499,90no
700414Zoë OrtízQuerétaro29/02/2024N/Así
800415Ñuño CastañedaOaxaca28/02/20247,25no
900416Iñaki OlaizolaMazatlán11/03/2024980,75sí
-- 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;

Correcties

  1. Het bestand was gecodeerd in windows‑1252; het is omgezet naar UTF-8.
  2. De koprij staat op rij 4; de rijen erboven zijn weggelaten.
  3. Rij 10 ("TOTAL") is een totaal en is daarom weggelaten.
  4. Voorloopnullen behouden in "Folio": 00412 blijft 00412, opgeslagen als tekst.
  5. 15/02/2024 bewijst dat de datums in "Fecha" met de dag beginnen, dus 03/02/2024 wordt gelezen als 2024‑02‑03.
  6. Getallen in "Importe" gebruiken een decimale komma: 1.234,50 wordt gelezen als 1234.50.
  7. N/A in "Importe" gelezen als leeg (1 van 5 waarden).
  8. "Pagado" bevat ja- en nee-woorden (sí, no), opgeslagen als boolean.

Je bestand wordt op deze computer omgezet en nooit geüpload.

Andere voorbeelden:

Van CSV naar PostgreSQL, kolom voor kolom

Het voorbeeld hierboven, ventas_2024.csv, zoals IntoSQL het voor PostgreSQL schrijft: wat elke kolom in het bestand bevat, welk type ze krijgt en hoe haar eerste waarde in het script terechtkomt.

In het bestandEerste waardeKolomType in PostgreSQLIn het script
Folio00412foliotext'00412'
ClientePeña Muñozclientetext'Peña Muñoz'
CiudadMéridaciudadtext'Mérida'
Fecha15/02/2024fechadate'2024-02-15'
Importe1.234,50importenumeric(6,2)1234.50
PagadosípagadobooleanTRUE

Het script in PostgreSQL laden

De download is een standaard .sql-bestand. Voer het uit met de eigen tools van PostgreSQL.

Vanuit een terminal

psql -v ON_ERROR_STOP=1 -d mydb -f ventas_2024.postgresql.sql

ON_ERROR_STOP laat psql stoppen bij de eerste fout. Het script draait in één transactie, dus een mislukte import laat de database zoals hij was.

Vanuit een databasetool

Open het script in pgAdmin of DBeaver in een queryvenster en voer het uit.

Zonder scriptPro

IntoSQL Pro laadt het bestand rechtstreeks in PostgreSQL vanuit de desktopapp of de opdrachtregel, zonder een script te schrijven.

intosql load ventas_2024.csv --into postgres://user@localhost/mydb

Wat je moet weten over CSV-bestanden en PostgreSQL

Wat IntoSQL leest in CSV-bestanden

  • De codering wordt herkend, ook Windows-1252 en UTF-16, zodat accenten en ñ intact aankomen.
  • Het scheidingsteken wordt herkend: komma, puntkomma, tab of verticale streep. Met een puntkomma worden decimale komma's zoals 1.234,50 als getallen gelezen.
  • Waarden tussen aanhalingstekens kunnen scheidingstekens en regeleinden bevatten.

Wat je moet weten over PostgreSQL

  • Decimale getallen behouden hun exacte cijfers als numeric(p,s), en datums met tijdverschil worden timestamptz.
  • Tekst in PostgreSQL kan het NUL-teken niet bevatten, dus het wordt verwijderd uit de waarden die het hebben.
  • Het script draait in één transactie, dus een mislukte import laat niets half af achter.

Hoe elk soort waarde in PostgreSQL wordt opgeslagen

WaardePostgreSQL
Ja en neeboolean
Gehele getalleninteger
Grote gehele getallenbigint
Decimale getallennumeric(p,s)
Drijvendekommagetallendouble precision
Datumsdate
Tijdstippentime
Datums met tijdtimestamp
Datums met tijd en tijdverschiltimestamptz
Teksttext

Vragen over CSV naar PostgreSQL

Staat je vraag er niet bij? Schrijf ons via de contactpagina en een mens antwoordt. Contactpagina

Hoe zet ik CSV om naar PostgreSQL?

Zet je bestand neer op de converter bovenaan deze pagina. Die vindt de kopregel, leest elke waarde en schrijft het PostgreSQL-script, met elke correctie vermeld. Download het script en voer het uit met psql.

Wat als mijn CSV puntkomma's of tabs gebruikt?

Het scheidingsteken wordt herkend: komma, puntkomma, tab of verticale streep. Je kunt het ook instellen onder Meer opties. Met een puntkomma worden decimale komma's zoals 1.234,50 als getallen gelezen.

Welke PostgreSQL-types gebruikt het?

Ja/nee-waarden worden boolean, gehele getallen integer, decimalen numeric(p,s), datums date, datums met tijd timestamp en tekst text. De groottes volgen uit de langste waarde in elke kolom.

Blijven voorloopnullen behouden in PostgreSQL?

Ja. Een code zoals 00412 blijft tekst, dus PostgreSQL slaat hem op als text en het script schrijft hem als '00412'.

Kan het de data zonder script in PostgreSQL laden?

Ja, met IntoSQL Pro. De desktopapp en de opdrachtregel maken verbinding met PostgreSQL en laden de rijen rechtstreeks, nadat ze eerst de tabel hebben aangemaakt.

Hoe groot mag het CSV-bestand zijn?

De browser leest een CSV terwijl die binnenstroomt, dus bestanden van meerdere gigabytes werken. Op een laptop met Apple M4 converteert de opdrachtregel een CSV van 174 MB met een miljoen rijen in minder dan een seconde.