Cargando datos con COPY FROM y WHERE en PostgreSQL 12

Desde la reciente versión 12 de PostgreSQL se permite utilizar la clausula WHERE en un comando COPY FROM, el cual permite cargar datos para una tabla desde el sistema de archivos en un servidor PostgreSQL filtrando los datos que no se desean, puede consultar los detalles en:

https://www.postgresql.org/docs/12/sql-copy.html

Esta actividad antes de la versión 12 solo se podía lograr cargando los datos en la tabla y luego borrando los que no se deseaban con un DELETE, por lo cual esta opción de filtrar los datos desde su carga viene siendo una mejora considerable para este proceso. Veamos un ejemplo de uso y las opciones que brinda:


CREATE TABLE copy_where (i int, t text);


--Generamos 100 datos

COPY (select i, md5(i::text) from generate_series (1,100) as i) to '/tmp/dat100.csv' csv header ;

--Generamos 10000 datos

COPY (select i, md5(i::text) from generate_series (1,10000) as i) to '/tmp/dat.csv' csv header ;

--Hacemos la carga de los 10000 datos en la tabla

pruebas12=# copy copy_where from '/tmp/dat.csv' csv header;
COPY 10000
Duración: 135,634 ms

--truncamos la tabla para aplica el WHERE para que solo cargue los datos i <= 100

pruebas12=# truncate copy_where ;

--cargamos solo 100 datos filtrando con el WHERE los datos que cumplan determinada condición, en este caso que la i <=100

copy copy_where from '/tmp/dat.csv' csv header WHERE i <= 100;
COPY 100
Duración: 21,645 ms

Sigue leyendo