Buscar en moleculax
Importar y exportar datos en Postgres y MySQL

Exportar de Postgres a un archivo texto

Lo mas sencillo que se puede hacer es exportar todos los datos de una tabla a un archivo texto separando los campos por TABS (TSV), la sentencia sería algo así:

copy tabla1 to '/tmp/tabla1.txt';


Si se quiere exportar especificando un separador, como por ejemplo la "coma" para obtener un CSV:

copy tabla1 to '/tmp/tabla1.csv' with delimiter ',';

Podemos especificar además que campos de la tabla queremos exportar:

copy tabla1(campo1, campo2) to '/tmp/tabla1.csv' with delimiter ',';

Vamos a añadir los nombres de los campos en la primera linea del archivo y queremos encerrar los campos de texto entre comillas (útil cuando los campos de texto puedan tener saltos de línea o caracteres que coincidan con el separador):

copy tabla1(campo1, campo2) to '/tmp/tabla1.csv' with delimiter ',' csv header quote '"'; 


Existen otras opciones, por ejemplo, desde Postgres 8.3 se puede exportar el resultado se una consulta:

copy (select * from t1 inner join t2 on t1.c1 = t2.c1 where t1.c2=0) to '/tmp/tabla1.csv' with delimiter ',' csv header;

Más en http://www.postgresql.org/docs/9.1/static/sql-copy.html

Importar a Postgres desde un archivo texto


Vamos a ir poniendo los ejemplos para importar los mismos archivos que hemos ido exportando.

Para importar un archivo separado por TABS sin encabezado, en esta caso el archivo tiene que tener la misma cantidad de campos que la tabla donde vamos a poner los datos y deben estar en el mismo orden:

copy tabla1 from '/tmp/tabla1.txt';

Si queremos importar un archivo cuyo separador de campos es la coma:

copy tabla1 from '/tmp/tabla1.csv' with delimiter ',';


Podemos especificar que campos queremos importar, esto es muy útil cuando el archivo de texto no tiene todos los campos de la tabla o no estan en el mismo orden en que estan en la tabla:

copy tabla1(campo1, campo2) from '/tmp/tabla1.csv' with delimiter ',';

Por último si el archivo tiene en la primera línea los nombres de los campos y los campos texto puedan estan encerrados entre comillas:

copy tabla1(campo1, campo2) from '/tmp/tabla1.csv' with delimiter ',' csv header quote '"';


Sobre el separador 


El separador debe ser un caracter que no cause muchos conflictos, si va a exportar o importar datos numéricos el separador puede ser el TAB, pero en otros casos es necesario usar un separdor propio, una buena elección es la barra vertical (PIPE) "|", no se puede hacer uso de caracteres extraños ya que Postgres los interpreta como más de un caracter.

Exportar de MySQL a un archivo texto


En MySQL vamos a ir directamente al grano, la idea es inicialmente plantearnos que queremos exportar y hacer una consulta para obtener esos datos, por ejemplo:

select * from tabla1 where tabla1.c1=0 


Después especificamos a que archivo queremos exportarlo:

into outfile '/tmp/archivo1.csv'


Y por último especificamos las opciones de que separador queremos usar, si vamos a encerrar los archivos texto entre comillas y cual será el separador de filas, normalmente se debe usar para este último parametro un salto de línea (\n en caso de sistemas UNIX o \r\n para sistemas Windows):

fields terminated by ',' optionally enclosed by '"' lines terminated by '\n';

Uniéndolo todo:

select * from tabla1 where tabla1.c1=0 into outfile '/tmp/archivo1.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\n';

Ver más en: http://dev.mysql.com/doc/refman/5.1/en/select-into.html

Importar a MySQL desde un archivo texto


Esta si es una sentencia más especifica para este objetivo, LOAD DATA:

load data infile '/tmp/archivo1.csv' into table tabla1 fields terminated by ',' optionally enclosed by '"' lines terminated by '\n';

Ver más en: http://dev.mysql.com/doc/refman/5.0/es/load-data.html

.


Powered by

http://emiliogomez.com.ar