Copiar archivo CSV con una columna de ID
-
24-10-2019 - |
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.
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:
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'