Frage

Ich habe eine Rails -Anwendung und versuche, Daten über den Copy -Befehl postgresql in sie zu laden. Die Datei ist CSV. Die Tabelle karten zu einem Rails-Modell und ich muss die Spalte Primary-Key-ID beibehalten, damit ich das Modell verwenden kann. FOREACH, um mit den Daten zu spielen-die Tabelle hat über 5 m+ Zeilen.

Meine Frage ist, wie kann ich mein CSV strukturieren, damit ich Daten in die Tabelle laden und trotzdem zulassen kann, dass die ID -Spalte dort sein kann? Es ist ein Mist, denn der einzige Grund, warum ich es brauche, ist die for_each -Methode.

Unabhängig davon habe ich versucht, Nulls zu senden, wie in:

NULL,col1,col2,col3,col4, etc.

Aber es funktioniert nicht.

Vielen Dank.

War es hilfreich?

Lösung

Wenn Sie NULL für den Primärschlüssel übergeben, wird niemals funktionieren, egal welche Optionen Sie für die Null -Zeichenfolge festgelegt haben. Sie würden dem Backend sagen, er solle den Primärschlüssel für Null festlegen, den es niemals zulassen wird, egal wie der Befehl einfügen könnte.

Ich habe wirklich keine Ahnung, was Sie meinen, indem Sie den Primärschlüssel beibehalten. Das ist etwas, das beibehalten wird, egal was tun. Wenn Sie meinen, dass der DB den Wert für Sie auswählen lässt und der Primärschlüssel eine serielle (automatische Inkremente) ist, nennen Sie explizit alle Spalten, aber den Primärschlüssel:

COPY country (colA, colB, colC) FROM '/usr1/proj/bray/sql/country_data'; -- leave out pkey

Es kann auch schneller sein, die Dokumentation darüber zu lesen, welche Null -String -Optionen Sie verwenden möchten, anstatt mögliche Werte zu erraten:

http://www.postgresql.org/docs/9.0/static/sql-copy.html

Andere Tipps

Die Standardeinstellung bei der Verwendung mit CSV ist eine nicht zahlreiche leere Zeichenfolge, wie z. B.:

,col1,col2,col3,,col5

Dies würde einen Datensatz erstellen, der aussieht:

NULL,'col1','col2','col3',NULL,'col5'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top