2012-10-12 8 views
9

Mam pliku CSV, który ma zawartość tak:Właściwe polecenie KOPIUJ do ładowania danych postgreSQL z pliku csv zawierającego dane o pojedynczych cudzysłowach?

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

Chcę załadować dane csv do my_table.

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])) 
) 

Kiedy uruchomić to polecenie w pgAdmin III narzędzia:

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

mam błąd:

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

Potem zmodyfikowano polecenia takiego:

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 \; 

Wszystko się nie udało, gdy próbowano.

Tak, każdy może pokazać mi odpowiednie polecenie COPY dla tej sprawy?

Odpowiedz

20

Podwójne apostrofów (jeśli standard_conforming_strings jest włączony, patrz the docs)

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

albo używać niestandardowych PostgreSQL specyficzne escape string:

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

+1 Ah! dobra robota. – Meem

+1

Jeśli opcja KOPIUJ jest zarezerwowana dla administratorów, z poziomu wiersza poleceń psql: \ COPY my_table FROM 'c: \ downloads \ file.csv' DELIMITERS ',' CSV QUOTE '' '; – Tammy

+0

@Tammy '\ copy' pobiera ścieżki względem klienta' psql', 'COPY' pobiera je w stosunku do hosta serwera. –

1

Nieważne, dostałem odpowiedź:

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

Niektóre inne osoby, które tego doświadczają ror może chcieć sprawdzić plik, aby zobaczyć, czy zawiera on nagłówek w pierwszym wierszu. Chociaż nie było to problemem w twoim przypadku, warto zwrócić uwagę na sposób obejścia tego problemu:

COPY my_table FROM 'c:\downloads\file.csv' WITH DELIMITER ',' CSV HEADER; 
Powiązane problemy