Hallo,
ich möchte Daten aus einer CSV-Datei einlesen. Vorher muss ich jedoch eine passende Tabelle in meiner DB anlegen. Die Datentypen ermittle ich dabei für jede Spalte per PHP.
Es kommt nun in der CSV-Datei z.B. zu folgenden Werten in einer Spalte:
…;1;…
…;2.5;…
…;;…
Mein Problem ist: Wie kann ich einen Wert leer lassen in der DB? Als Datentyp verwende ich Numeric ohne Präzision.
So sollte das egtl aussehen etwa aber das versucht immer einen Fehler, weil zwischen den ’ nix steht.
insert into … values (…‘1’…), (…‘2.5’…), (…’’…)
Oder muss ich da NULL hinschreiben? Aber dann steht beim späteren Zugriff auf die Daten doch auch immer NULL da oder?
Hmm vielen Dank
Eric
erpelinho:
Hallo,
ich möchte Daten aus einer CSV-Datei einlesen. Vorher muss ich jedoch eine passende Tabelle in meiner DB anlegen. Die Datentypen ermittle ich dabei für jede Spalte per PHP.
Es kommt nun in der CSV-Datei z.B. zu folgenden Werten in einer Spalte:
…;1;…
…;2.5;…
…;;…
Mein Problem ist: Wie kann ich einen Wert leer lassen in der DB? Als Datentyp verwende ich Numeric ohne Präzision.
So sollte das egtl aussehen etwa aber das versucht immer einen Fehler, weil zwischen den ’ nix steht.
insert into … values (…‘1’…), (…‘2.5’…), (…‘’…)
Oder muss ich da NULL hinschreiben? Aber dann steht beim späteren Zugriff auf die Daten doch auch immer NULL da oder?
Hmm vielen Dank
Eric
Verwende COPY anstelle erst mittels Kraftakt INSERT-Befehle zu erzeugen:
kretschmer@tux:~$ psql test -c "select * from import"
a | b | c
---+---+---
(0 rows)
kretschmer@tux:~$ cat data.csv
1;2;3
10;20.5;30
20;;40
\.
kretschmer@tux:~$ psql test -c "\copy import from 'data.csv' csv delimiter ';'"
kretschmer@tux:~$ psql test -c "select * from import"
a | b | c
----+------+----
1 | 2 | 3
10 | 20.5 | 30
20 | | 40
(3 rows)
Andreas
Mmh okay, aber da steht dann auch NULL (hab das grad ma so importiert aufm Testsystem).
Datenbank und Webserver laufen auf verschiedenen Systemen, so dass ich an “psql” nicht rankomme.
Wie siehts dann aus?
Gruß
Eric
ads
27. Mai 2010 um 11:36
4
COPY funktioniert nicht nur mit psql …
psql kann auch remote laufen, es kennt die Optionen -h und -p.
Wie siehts dann aus?
Gruß
Eric
Vermutlich ähnlich.
Wenn Du dennoch mit INSERT-Befehlen arbeiten willst:
kapsle alles in eine TX
für leere Werte halt NULL verwenden
Andreas
Aber auf dem Server gibt es das Programm “psql.exe” ja gar nicht.
Gibt es dafür überhaupt ne Lösung?
Webserver (PHP) ------> schickt einen psql-Befehl an -----> Webserver (Datenbank)
Gruß
Eric
Ja, und? psql ist ein Client-Programm, es muß also dort installiert sein und laufen, wo der Client ist.
Gibt es dafür überhaupt ne Lösung?
Webserver (PHP) ------> schickt einen psql-Befehl an -----> Webserver (Datenbank)
Gruß
Eric
Client ist der Webserver.
Andreas