Re: COPY FROM

From: Mariano Reingart <reingart(at)gmail(dot)com>
To: Guillermo Villanueva <guillermovil(at)gmail(dot)com>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: COPY FROM
Date: 2010-09-27 17:24:36
Message-ID: AANLkTinntaduCQWqXT8BDnr02Gs6sERg_Kzv3fPenPiy@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2010/9/27 Guillermo Villanueva <guillermovil(at)gmail(dot)com>:
> Hola gente como están?
> Nuevamente estoy renegando con COPY FROM
> Resulta que tengo un archivo detexto separado por tab utf8 sin BOM muy
> grande que al utilizarlo para ingresar datos en mi db a través de COPY FROM
> funciona correctamente y se ingresan todos los datos. (mas de 600mil líneas)
> Todo esto en un postgres 8.4 sobre windows 2000 server y sobre una base de
> datos con ENCODING = 'LATIN1'
> Si al mismísimo archivo, lo copio a un servidor postgres 8.4 sobre ubuntu
> server y sobre una base de datos tambien con ENCODING = 'LATIN1' me provoca
> el siguiente error:
> postgres(at)servernacer:/var/ftp/nacer/postgresql$ psql nacer
> psql (8.4.4)
> Type "help" for help.
> nacer=# copy nacer.historicotemp from
> '/var/ftp/nacer/postgresql/B10201008.UEC.TXT' null as ''
> nacer-# ;
> ERROR:  value too long for type character varying(2)
> CONTEXT:  COPY historicotemp, line 6503, column afidompiso: "3º"
> nacer=#
> La columna afidompiso está definida como varchar(2) y el dato que muestra es
> también de 2 . Si reviso el archivo en la línea 6503 tengo 2 caracteres y un
> tab. Aclaro, el copy from funcionó bien en el servidor windows.

Hiciste un
SET CLIENT_ENCODING = 'LATIN1';

Revisaste el encoding de la terminal de linux?
Probaste desde pgadmin3?
En psql, con \l que codificación te aparece?

Debe ser algún tema relacionado al juego de caracteres, a veces en
linux conviene convertir a utf8:

reingart=# \l
Listado de base de datos
Nombre | Dueño | Codificación
-----------+----------+--------------
reingart | reingart | LATIN1

reingart=# SET CLIENT_ENCODING = 'LATIN1';
SET
reingart=# create table a (a char(1));
CREATE TABLE
reingart=# insert into a values ('º');
ERROR: el valor es demasiado largo para el tipo character(1)
reingart=# SET CLIENT_ENCODING = 'UTF8';
SET
reingart=# insert into a values ('º');
INSERT 0 1

El con linux podés convertir el dump de una codificación a otra con iconv:

iconv -f LATIN1 -t UTF8 < entrada.sql > salida.sql

Eso me ha ayudado en ciertas ocasiones,

Sds

Mariano Reingart
http://www.arpug.com.ar
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com

In response to

  • COPY FROM at 2010-09-27 16:19:11 from Guillermo Villanueva

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2010-09-27 17:38:37 Re: fatal out of shared memory postgres
Previous Message Jaime Casanova 2010-09-27 17:23:34 Re: Cargar datos como fecha