sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo ignorar errores con psql \copy meta-command

No puede omitir los errores sin omitir todo el comando hasta Postgres 14 incluido. Actualmente no existe un manejo de errores más sofisticado.

\copy es solo un envoltorio alrededor de SQL COPY que canaliza los resultados a través de psql. El manual para COPY :

COPY detiene la operación al primer error. Esto no debería generar problemas en caso de COPY TO , pero la tabla de destino ya habrá recibido filas anteriores en un COPY FROM . Estas filas no estarán visibles ni accesibles, pero seguirán ocupando espacio en disco. Esto podría equivaler a una cantidad considerable de espacio en disco desperdiciado si la falla ocurriera en una operación de copia grande. Es posible que desee invocar VACUUM para recuperar el espacio desperdiciado.

Énfasis en negrita mío. Y:

COPY FROM generará un error si alguna línea del archivo de entrada contiene más o menos columnas de las esperadas.

COPY es una forma extremadamente rápida de importar/exportar datos. Las comprobaciones sofisticadas y el manejo de errores lo ralentizarían.

Hubo un intento de agregar un registro de errores a COPY en Postgres 9.0 pero nunca se confirmó.

Solución

Arregle su archivo de entrada en su lugar.

Si tiene una o más columnas adicionales en su archivo de entrada y el archivo es por lo demás coherente , puede agregar columnas ficticias a su tabla isa y déjalos después. O (más limpio con tablas de producción) importar a una tabla de preparación temporal y INSERT columnas seleccionadas (o expresiones) a su tabla de destino isa desde allí.

Respuestas relacionadas con instrucciones detalladas:

  • ¿Cómo actualizar filas seleccionadas con valores de un archivo CSV en Postgres?
  • Comando COPY:copia solo columnas específicas de csv