Вставка файла CSV в таблицу PostgreSQL с использованием скрипта bash - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь вставить файл CSV в таблицу PSQL, используя скрипт bash. Моя первая цель - анализ файла CSV и вставка данных строка за строкой. Команда COPY мне не удобна. Я использовал следующий скрипт, но он не работал.

Редактировать: я, кстати, не создал таблицу. Должен ли я?

#!/bin/sh             
    while IFS=, read col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12
    do
        echo "INSERT INTO table_name ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l") VALUES ('$col1','$col2','$col3','$col4','$col5','$col6','$col7','$col8','$col9','$col10','$col11','$col12');"
    done < ppr.csv | sudo psql -U pg_user -d test;

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Не пытайтесь анализировать CSV с bash, это было бы довольно сложно сделать правильно.

Вы должны использовать file_fdw , чтобы определить чужую таблицу в базе данных. Это позволяет вам получить доступ к данным из базы данных, фактически не загружая их. В некотором смысле вы превращаете PostgreSQL в анализатор CSV.

Затем вы можете выбрать из этой внешней таблицы, как из обычной таблицы, и, например, вставить ее части в соответствующую таблицу PostgreSQL.

0 голосов
/ 12 февраля 2020

Вы должны избегать внутренних двойных кавычек:

#!/bin/sh             
while IFS=, read col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12
do
    echo "INSERT INTO table_name (\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\") VALUES ('$col1','$col2','$col3','$col4','$col5','$col6','$col7','$col8','$col9','$col10','$col11','$col12');"
done < ppr.csv | sudo psql -U pg_user -d test;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...