Синтаксическая ошибка PostgreSQL, не могу ее найти - PullRequest
0 голосов
/ 09 мая 2018

У меня есть код, который создает 6 шаблонов, добавляет к ним данные, объединяет их и экспортирует как данные. Я могу заставить его работать, используя F5 в разных абзацах, но я хочу, чтобы весь код работал. Может кто-нибудь помочь мне, я довольно новый.

CREATE TEMP TABLE john1
(email VARCHAR(200));

COPY john1(email) from 'E:\WORK\FXJohn1.csv' DELIMITER ',' CSV HEADER

CREATE TEMP TABLE john2
(email VARCHAR(200));

COPY john2(email) from 'E:\WORK\FXJohn2.csv' DELIMITER ',' CSV HEADER

CREATE TEMP TABLE john3
(email VARCHAR(200));

COPY john3(email) from 'E:\WORK\FXJohn3.csv' DELIMITER ',' CSV HEADER

CREATE TEMP TABLE john4
(email VARCHAR(200));

COPY john4(email) from 'E:\WORK\FXJohn4.csv' DELIMITER ',' CSV HEADER

CREATE TEMP TABLE john5
(email VARCHAR(200));

COPY john5(email) from 'E:\WORK\FXJohn5.csv' DELIMITER ',' CSV HEADER

CREATE TEMP TABLE john6
(email VARCHAR(200));

COPY john6(email) from 'E:\WORK\FXJohn6.csv' DELIMITER ',' CSV HEADER

CREATE TABLE finished AS
(SELECT * FROM john1
UNION
SELECT * FROM john2
UNION
SELECT * FROM john3
UNION
SELECT * FROM john4
UNION
SELECT * FROM john5
UNION
SELECT * FROM john6);

DO $func$
BEGIN
  EXECUTE $$
    COPY public."finished" TO 'E:\$$ || to_char(CURRENT_DATE, 'YYYY_MM_DD') || $$.csv' DELIMITER ',' CSV HEADER;
  $$;
END;
$func$ LANGUAGE plpgsql;

@ Руперт

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

ERROR:  syntax error at or near "for" LINE 1: for x in $(ls FXJohn1*.csv);
           Do I change the variables correctly? 

for x in $(ls file_name*.csv);

| Я изменяю имя_файла на один из моих .csv в папке |

do psql -c "copy table_name from

| Я изменяю table_name на свое текущее имя таблицы, которое я создал |

'/path/.   todir/$x' csv" db_name; done

| Я меняю путь на E: \ WORK (там находятся все мои csv файлы.

1 Ответ

0 голосов
/ 09 мая 2018

Во-первых, вы можете загрузить несколько файлов .csv в одну таблицу.Итак, давайте сначала настроим это:

CREATE TABLE finished 
(
email varchar(200)
)

Затем вы можете загрузить несколько файлов из одной и той же папки с помощью простого скрипта bash:

for x in $(ls file_name*.csv); 
do psql -c "copy table_name from
'/path/.   todir/$x' csv" db_name; done

Это избавит вас от необходимости делать несколько «копий» изатем несколько союзов.

Затем вы можете запустить свой скрипт:

DO $func$
BEGIN
EXECUTE $$
COPY public."finished" TO 'E:\$$ ||     to_char(CURRENT_DATE,
'YYYY_MM_DD') || $$.csv' 
DELIMITER ',' CSV HEADER;
$$;
END;
$func$ LANGUAGE plpgsql;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...