Cómo exportar e importar datos en PostgreSQL con COPY
COPY es la forma más rápida de mover datos en bloque entre PostgreSQL y archivos CSV. Es mucho más veloz que insertar fila por fila con INSERT.
- 1
Exporta una tabla a CSV desde el servidor
COPY TO escribe el archivo en el sistema de archivos del servidor y requiere permisos de superusuario o del rol pg_write_server_files.
COPY clientes TO '/tmp/clientes.csv' WITH (FORMAT csv, HEADER true); - 2
Exporta desde el cliente con \copy
Si no tienes acceso al disco del servidor, \copy de psql escribe el archivo en tu máquina local usando tus permisos de sistema.
\copy clientes TO 'clientes.csv' WITH (FORMAT csv, HEADER true) - 3
Importa datos desde un CSV
COPY FROM carga el archivo en la tabla. La tabla debe existir y las columnas coincidir con el orden del CSV, o especifícalas de forma explícita.
\copy clientes FROM 'clientes.csv' WITH (FORMAT csv, HEADER true) - 4
Acelera cargas grandes desactivando índices temporalmente
En cargas iniciales masivas conviene cargar primero y crear los índices después: mantenerlos durante el COPY hace la carga mucho más lenta.
-- 1) carga con \copy -- 2) luego: CREATE INDEX idx_clientes_email ON clientes (email);
// el error común
Confundir COPY (corre en el servidor, necesita superusuario y rutas del servidor) con \copy (corre en el cliente psql, usa rutas locales). Muchos errores de permiso denegado se resuelven cambiando COPY por \copy.
// cuándo conviene un experto
Cuando la importación es parte de una migración con transformación de datos, tipos que no cuadran o millones de filas, el proceso se complica rápido. En dba.mx planeamos la carga con validación y rollback para que los datos lleguen íntegros.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.