Команда COPY в запросе Postgresql

Добрый день!

Я хотел бы узнать о команде COPY в Postgresql. У меня есть эта таблица:

CREATE TABLE pm_monitor_temporary
(
  date timestamp NOT NULL,
  targetid varchar(128) NOT NULL,
  value1 float8 NOT NULL,
  value2 float8 NOT NULL,
  value3 float8 NOT NULL,
  value4 float8 NOT NULL,
  value5 float8 NOT NULL,
  value6 float8 NOT NULL,
  datastatus1 varchar(2) NOT NULL,
  datastatus2 varchar(2) NOT NULL,
  datastatus3 varchar(2) NOT NULL,
  datastatus4 varchar(2) NOT NULL,
  datastatus5 varchar(2) NOT NULL,
  datastatus6 varchar(2) NOT NULL,
  granularity int4 NOT NULL,
  neid varchar(16) NOT NULL,
  CONSTRAINT pm_monitor_pkey PRIMARY KEY (date, targetid, granularity, neid)
);

Я создал функцию, которая будет копировать содержимое csv в таблицу с учетом filePath (абсолютный путь к файлу). Кажется, есть проблема с моей функцией sql.:

Create Or Replace Function copycsv_pm_monitor_temp(filePath  varchar(1025))
Returns void As
$BODY$
DECLARE
  sql varchar(1025);
BEGIN
    sql := 'COPY  pm_monitor_temporary FROM {' || filePath ||
      '| stdin} using DELIMITERS ',' ' || ';' ;
    EXECUTE sql;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

Это скомпилирует, однако это в конечном итоге приведет к ошибке при запуске Java-кода. Я что-то пропустил?

Caused by: org.postgresql.util.PSQLException: ERROR: query "SELECT  'COPY                  pm_monitor_temporary FROM {' ||  $1  || '| stdin} using DELIMITERS ',' ' || ';'" returned     2 columns

1 ответ

Вы не обработали свое цитирование должным образом и случайно получили утверждение в правильном синтаксисе, в котором не было нужного числа столбцов результата. У тебя там тоже есть другие проблемы.

Это:

    sql := 'COPY  pm_monitor_temporary FROM {' || filePath ||
      '| stdin} using DELIMITERS ',' ' || ';' ;

должно быть что-то вроде этого:

    sql := 'COPY pm_monitor_temporary FROM ''' || filePath ||
      ''' WITH (FORMAT csv, DELIMITER '','')';
Другие вопросы по тегам