it-swarm.com.de

Der richtige COPY-Befehl zum Laden von PostgreSQL-Daten aus einer CSV-Datei mit Daten in Anführungszeichen?

Ich habe eine CSV-Datei mit folgendem Inhalt:

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

Ich möchte die CSV-Daten in my_table laden.

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

Wenn ich diesen Befehl im pgAdmin III-Tool ausführe:

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

Ich habe fehler bekommen:

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

Dann habe ich den Befehl wie folgt geändert:

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

Alles schlug fehl, als es versucht wurde.

Kann mir also jemand den richtigen COPY-Befehl für diesen Fall anzeigen?

13
null

Doppelte einfache Anführungszeichen (wenn standard_conforming_strings aktiviert ist, siehe die Dokumente )

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

oder verwenden Sie den nicht standardmäßigen PostgreSQL-spezifischen Escape-String :

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

Einige andere Personen, bei denen dieser Fehler auftritt, möchten möglicherweise die Datei überprüfen, um zu sehen, ob sie einen Header in der ersten Zeile enthält. Es war zwar nicht das Problem in Ihrem Fall, aber es lohnt sich, den Weg zu finden, um es zu umgehen:

COPY my_table FROM 'c:\downloads\file.csv' WITH DELIMITER ',' CSV HEADER;
4
Rupasa Sushma

Egal, ich habe die Antwort bekommen:

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