Copiar un archivo CSV a una base de datos Postgresql

Para no olvidar cómo hacerlo, porque creo que cada vez lo tengo que buscar. El caso de uso es copiar un archivo CSV de localhost a una base de datos a la que es posible conectarse usando el cliente psql. Si bien existe la sentencia COPY en Postgresql es importante notar que esa sentencia hace la copia como el usuario de la base de datos, en el host de la base de datos. Esto no es ideal o posible si la base de datos está en un servidor.

Entonces lo que hay que hacer es conectarse a la base de datos con psql y correr la siguiente instrucción:

\copy nombre_table (columnas,en,el,orden,del,csv) from '/ruta/absoluta/al/archivo' with (format csv, header, delimiter ',', NULL '', quote '"');

Claro que la parte del with tiene más opciones, aquí listé algunas que utilizo pero realmente la lista entera hay que consultarla en la documentación.

Y claro, también es posible hacer el copiado de forma inversa (de dentro de la tabla hacia afuera):

$ psql -c "COPY (SELECT * FROM table) TO STDOUT WITH CSV HEADER DELIMITER ',';" > data.csv

lo cual podría ser quizá más fácil desde dentro mismo de psql:

\copy (select * from table) to './table.csv' with (format csv, header);