Правильная команда копирования для загрузки данных postgreSQL из csv-файла с одинарными кавычками?

у меня есть csv-файл с таким содержимым:

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

Я хочу загрузить данные csv в 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]))
)

когда я запускаю эту команду в pgAdmin III tool:

COPY my_table FROM 'c:downloadsfile.csv' DELIMITERS ',' CSV;

я получил ошибку:

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

затем я изменил команду:

COPY my_table FROM 'c:downloadsfile.csv' DELIMITERS ',' CSV QUOTE ''';
COPY my_table FROM 'c:downloadsfile.csv' DELIMITERS ',' CSV QUOTE ''';
COPY my_table FROM 'c:downloadsfile.csv' DELIMITERS ',' CSV QUOTE ''' ESCAPE '';
COPY my_table FROM 'c:downloadsfile.csv' DELIMITERS ',' CSV QUOTE ''' ESCAPE ;

все не удалось при попытке.

Итак, кто-нибудь может показать мне правильную команду копирования в этом случае?

3 ответов


двойные одинарные кавычки (если standard_conforming_strings - в разделе документы)

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

или используйте нестандартный PostgreSQL-specific escape string:

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

некоторые другие люди, которые испытывают эту ошибку, могут захотеть проверить файл, чтобы увидеть, содержит ли он заголовок в первой строке. Хотя это не было проблемой в вашем случае, стоит отметить, как обойти это:

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

неважно, я получил ответ:

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