Domanda

Ho un'applicazione rails e sto cercando di caricare i dati in esso tramite comando COPY di PostgreSQL. Il file è in formato CSV. La tabella associata a un modello di Rails e ho bisogno di mantenere la colonna ID chiave primaria in modo da poter usare model.for_each per giocare con i dati -. La tabella avrà 5M + file

La mia domanda è, come posso strutturare il mio CSV in modo che possa caricare i dati nella tabella e consentono ancora la colonna ID per essere lì? Si tratta di una rottura perché l'unico motivo per cui ho bisogno è per il metodo for_each.

Indipendentemente da ciò, ho provato l'invio di NULL, come in:

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

Ma non funziona.

Grazie.

È stato utile?

Soluzione

Passando nullo per la chiave primaria non funzionerà mai, non importa quali opzioni che avete impostato per stringa nulla. Si sarebbe dicendo il backend per impostare la chiave primaria per nulla, che non potrà mai consentire non importa ciò che potrebbe essere il comando da inserire.

Io davvero non hanno alcuna idea di che cosa si intende per trattenere la chiave primaria. Questo è qualcosa che sta andando essere mantenuta non importa cosa fare. Se si intende lasciare il DB scegliere il valore per voi e per la chiave primaria è un serial (incremento automatico) quindi il nome in modo esplicito tutte le colonne, ma la chiave primaria:

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

Si potrebbe anche essere più veloce di leggere la documentazione su quali opzioni stringa nulla che si desidera utilizzare, invece di indovinare i possibili valori:

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

Altri suggerimenti

Il predefinito quando si utilizza CON CSV è una stringa vuota non quotate, come ad esempio:

,col1,col2,col3,,col5

Il che creerebbe un record che assomiglia a:

NULL,'col1','col2','col3',NULL,'col5'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top