Tema SQL
COPY (PostgreSQL)
Carga o descarga datos masivos entre tabla y archivo o STDIN/STDOUT con rendimiento muy alto. Protocolo servidor; requiere permisos y a veces superusuario para rutas locales.
Descripción
COPY tabla desde ruta de archivo con opciones FORMAT csv y HEADER, o hacia STDOUT. Evita round-trips de inserción fila a fila. COPY FREEZE y ON CONFLICT en versiones recientes con FROM. Seguridad: rutas en servidor son del SO del cluster; en psql usa barra copy para archivos del cliente. Alternativa externa: pg_dump, foreign data wrappers.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
COPY mi_tabla FROM '/tmp/datos.csv' CSV HEADER;
COPY (SELECT …) TO STDOUT WITH CSV;
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- \copy
- En psql lee/escribe archivos del equipo cliente.
- Permisos
- COPY FROM archivo en servidor suele requerir rol privilegiado.
Ejemplos
Ejemplo 1
COPY ventas (fecha, sku, unidades)
FROM STDIN WITH (FORMAT csv);
COPY (SELECT id, nombre FROM clientes WHERE activo) TO '/tmp/clientes.csv' CSV HEADER;
Ejemplo 2
COPY (SELECT id, nombre FROM clientes WHERE activo) TO STDOUT WITH CSV HEADER;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.