Datentyp für Zahlen

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

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