2012-10-12 159 views
9

Tengo archivo CSV que tiene contenidos como este:¿El comando COPY correcto para cargar datos de PostgreSQL del archivo csv que tiene datos de una sola cita?

10,53073,0,0,'Y','2008-05-30 21:46:55',0,'2008-05-30 21:48:04',0,53071,2 

quiero cargar los datos CSV en mi_tabla.

CREATE TABLE my_table 
(
    ad_tree_id numeric(10,0) NOT NULL, 
    node_id numeric(10,0) NOT NULL, 
    ad_client_id numeric(10,0) NOT NULL, 
    ad_org_id numeric(10,0) NOT NULL, 
    isactive character(1) NOT NULL DEFAULT 'Y'::bpchar, 
    created timestamp without time zone NOT NULL DEFAULT now(), 
    createdby numeric(10,0) NOT NULL, 
    updated timestamp without time zone NOT NULL DEFAULT now(), 
    updatedby numeric(10,0) NOT NULL, 
    parent_id numeric(10,0), 
    seqno numeric(10,0), 
    CONSTRAINT ad_treenodemm_pkey PRIMARY KEY (ad_tree_id , node_id), 
    CONSTRAINT adtree_adtreenodemm FOREIGN KEY (ad_tree_id) 
     REFERENCES ad_tree (ad_tree_id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, 
    CONSTRAINT ad_treenodemm_isactive_check CHECK (isactive = ANY (ARRAY['Y'::bpchar, 'N'::bpchar])) 
) 

Cuando ejecuto este comando en pgAdmin herramienta III:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV; 

que ha obtenido un error:

ERROR: value too long for type character(1) 
CONTEXT: COPY my_table, line 1, column isactive: "'Y'" 

A continuación, he modificado el orden como la siguiente:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '''; 
COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '\''; 
COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '\'' ESCAPE '\'; 
COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '\'' ESCAPE \; 

Todo falló cuando se intentó.

Entonces, ¿alguien me puede mostrar el comando COPY correcto para este caso?

Respuesta

20

comillas simples (si standard_conforming_strings está encendido, consulte the docs)

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE ''''; 

o utilice el PostgreSQL específico no estándar escape string:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE E'\''; 
+0

+1 Ah! gran trabajo. – Meem

+1

Si COPY está reservado para los usuarios administradores, desde la línea de comando psql use, \ COPY my_table FROM 'c: \ downloads \ file.csv' DELIMITERS ',' CSV QUOTE '' ''; – Tammy

+0

@Tammy '\ copy' obtiene rutas relativas al cliente' psql', 'COPY' las obtiene en relación con el host del servidor. –

1

No importa, me dio la respuesta:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE ''''; 
2

Algunas otras personas que están experimentando esto er Puede que desee comprobar el archivo para ver si contiene un encabezado en la primera línea. Si bien no fue el problema en su caso, vale la pena señalar la forma de evitarlo:

COPY my_table FROM 'c:\downloads\file.csv' WITH DELIMITER ',' CSV HEADER; 
Cuestiones relacionadas