Naar de inhoud

Excel omzetten naar PostgreSQL

Zet je Excel-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
xlsxclientes_2024.xlsxVoorbeeldbestand, 7 kB
Je database

4 rijen geconverteerd, 10 correcties, geen afgewezen

Tonen
De eerste rijen van clientes_2024.xlsx, met elke correctie gemarkeerd
Rij
500127Peña Muñoz0123403/02/2024sí1.234,50
600128José Ángel0987015/02/2024noN/A
700129Zoë Ortíz4410029/02/2024sí-12,00
800130Ñuño Castañeda0670011/03/2024no980,75
-- Written by IntoSQL for PostgreSQL.

SET client_encoding = 'UTF8';
BEGIN;

CREATE TABLE clientes_2024 (
    no_cliente text NOT NULL,
    nombre text NOT NULL,
    c_p text NOT NULL,
    alta date NOT NULL,
    activo boolean NOT NULL,
    saldo numeric(6,2)
);
COMMENT ON COLUMN clientes_2024.no_cliente IS 'Nº Cliente';
COMMENT ON COLUMN clientes_2024.c_p IS 'C.P.';

INSERT INTO clientes_2024 (no_cliente, nombre, c_p, alta, activo, saldo) VALUES
('00127', 'Peña Muñoz', '01234', '2024-02-03', TRUE, 1234.50),
('00128', 'José Ángel', '09870', '2024-02-15', FALSE, NULL),
('00129', 'Zoë Ortíz', '44100', '2024-02-29', TRUE, -12.00),
('00130', 'Ñuño Castañeda', '06700', '2024-03-11', FALSE, 980.75);

COMMIT;

Correcties

  1. De koprij staat op rij 4; de rijen erboven zijn weggelaten.
  2. Rij 9 ("TOTAL") is een totaal en is daarom weggelaten.
  3. Kolom "Nº Cliente" heet nu no_cliente, zodat PostgreSQL hem zonder aanhalingstekens leest.
  4. Kolom "C.P." heet nu c_p, zodat PostgreSQL hem zonder aanhalingstekens leest.
  5. Voorloopnullen behouden in "Nº Cliente": 00127 blijft 00127, opgeslagen als tekst.
  6. Voorloopnullen behouden in "C.P.": 01234 blijft 01234, opgeslagen als tekst.
  7. 15/02/2024 bewijst dat de datums in "Alta" met de dag beginnen, dus 03/02/2024 wordt gelezen als 2024‑02‑03.
  8. "Activo" bevat ja- en nee-woorden (sí, no), opgeslagen als boolean.
  9. Getallen in "Saldo" gebruiken een decimale komma: 1.234,50 wordt gelezen als 1234.50.
  10. N/A in "Saldo" gelezen als leeg (1 van 4 waarden).

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

Andere voorbeelden:

Van Excel naar PostgreSQL, kolom voor kolom

Het voorbeeld hierboven, clientes_2024.xlsx, 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
Nº Cliente00127no_clientetext'00127'
NombrePeña Muñoznombretext'Peña Muñoz'
C.P.01234c_ptext'01234'
Alta03/02/2024altadate'2024-02-03'
ActivosíactivobooleanTRUE
Saldo1.234,50saldonumeric(6,2)1234.50

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 clientes_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 clientes_2024.xlsx --into postgres://user@localhost/mydb

Wat je moet weten over Excel-bestanden en PostgreSQL

Wat IntoSQL leest in Excel-bestanden

  • De kopregel wordt gevonden, ook als er titels of notities boven staan, en een totaalrij aan het einde wordt weggelaten.
  • Datums die als Excel-serienummers zijn opgeslagen, worden echte datums, in zowel het 1900- als het 1904-datumsysteem.
  • Codes met voorloopnullen, zoals 00127, blijven tekst. Heeft een werkmap meerdere bladen, dan kies je het blad.

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 Excel naar PostgreSQL

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

Hoe zet ik Excel 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.

Welk blad van de werkmap wordt geconverteerd?

Het eerste zichtbare blad. Heeft een werkmap er meer dan één, dan verschijnt de optie Blad, zodat je een ander kunt kiezen.

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 00127 blijft tekst, dus PostgreSQL slaat hem op als text en het script schrijft hem als '00127'.

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 Excel-bestand zijn?

In de browser wordt een werkmap in zijn geheel gelezen, dus de grens is het geheugen dat de browser deze pagina geeft. De desktopapp en de opdrachtregel nemen werkmappen van elke grootte; op een laptop met Apple M4 converteert de opdrachtregel een werkmap van 117 MB met een miljoen rijen in ongeveer een seconde.