Как указать тип данных нескольких столбцов только один раз в PostgreSQL? - PullRequest
0 голосов
/ 11 февраля 2020

Я должен импортировать данные из файла CSV, который имеет более 100 столбцов. Я пытался импортировать, используя PgAdmin и phpPgAdmin, но оба они требуют, чтобы я сначала создал таблицу со столбцами. Импорт столбцов 1 на 1 занимает очень много времени. Я хочу сделать это проще, потому что все столбцы имеют одинаковый тип данных , который текст .

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

CREATE TABLE my_table (
    col_1 , col_2, ......., col_100
)

Есть ли способ выполнить описанную выше операцию, указав только тип данных только один раз для всех столбцов? Спасибо

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

самый простой способ!

1- Скопируйте заголовок csv в новый файл csv. 2- Отредактируйте файл вручную с помощью notpad ++, чтобы повернуть данные (замените ';' на '\ n;'), чтобы получить 100 столбцов в одном столбце. Предположим, что имена столбцов не содержат разделитель csv.

3 - скопируйте столбец в temp_table. скопируйте 'tmp_table' из /tmp/listclmn.csv ... (без предложения HEADER)

4-Создайте ddl вашей таблицы как

select 'create table my_table(' union select concat(colname, ' text, ') union select ');'

/ * удалите последнюю запятую текста, последний столбец * /

5- Создайте сгенерированную таблицу и скопируйте все данные из исходного csv с помощью предложения HEADER.

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

Нет такого способа сделать это, но если вы хотите импортировать файл CSV без написания имен столбцов вручную, тогда вы можете написать процедуру postgres со следующими логинами c.

  1. Создать временную таблицу с помощью команды создания таблицы temp ();
  2. Добавить имена временных столбцов (например, col1, col2) с типом данных varchar с помощью l oop.
  3. Скопировать CSV-файл в temp таблица с использованием COPY.
  4. Чтение первой строки из временной таблицы, которая будет заголовком CSV, то есть фактическими именами столбцов.
  5. Переименуйте каждый столбец, используя l oop, используя фактические имена столбцов.
  6. Удалить строку заголовка.
...