Pregunta

Tengo una aplicación Rails e intento cargar datos en el comando de copia de PostgreSQL. El archivo es CSV. La tabla se asigna a un modelo Rails y necesito retener la columna de ID de tecla primaria para que pueda usar el modelo.

Mi pregunta es, ¿cómo puedo estructurar mi CSV para que pueda cargar datos en la tabla y aún permitir que la columna de identificación esté allí? Es un fastidio porque la única razón por la que lo necesito es para el método for_each.

De todos modos, intenté enviar nulos, como en:

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

Pero no funciona.

Gracias.

¿Fue útil?

Solución

Pasar en NULL para la clave principal nunca funcionará sin importar qué opciones haya establecido para la cadena nula. Estaría diciendo al backend que establezca la clave principal en NULL que nunca permitirá sin importar cuál sea el comando para insertar.

Realmente no tengo idea de lo que quieres decir con retener la clave principal. Eso es algo que se va a retener sin importar lo que hagas. Si quiere decir que el DB elige el valor para usted y la clave principal es una serie (incremento automático), entonces nombre explícitamente todas las columnas pero la clave principal:

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

También puede ser más rápido leer la documentación sobre las opciones de cadena nula que le gustaría usar en lugar de adivinar los valores posibles:

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

Otros consejos

El valor predeterminado cuando se usa con CSV es una cadena vacía sin cotizar, como:

,col1,col2,col3,,col5

Que crearía un disco que se vea como:

NULL,'col1','col2','col3',NULL,'col5'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top