Как импортировать несколько файлов csv и автоматически создавать таблицы из их заголовков в postgresql?

#postgresql

#postgresql

Вопрос:

Я новичок в postgresql и sql в целом. Из того, что я понял, вручную можно было бы создать таблицу для каждого файла, а затем использовать copy для импорта данных из файла csv в таблицу. Если у нас есть несколько файлов csv, можно ли импортировать и создавать таблицы для всех файлов, используя имена заголовков в файле csv в качестве имен столбцов?

Спасибо

Комментарии:

1. Не напрямую с помощью команд Postgres. Хотя есть это: csvsql

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

3. @AdrianKlaver Я изучаю это вместе с django и python. Размер базы данных составляет 594 МБ. Следуя вашему примеру ниже, должен ли я записывать таблицу CREATE TABLE (…) для каждого файла csv?

4. Вторая часть примера показывает, как таблица создается и заполняется данными за один шаг. Размер файла, который меня интересовал, был размером файлов CSV.

Ответ №1:

В качестве примера с использованием программы, которую я упомянул в комментарии:

 --Shows table schema creation using Postgres dialect
csvsql -i postgresql --tables cp  ~/cell_per.csv 

CREATE TABLE cp (
        line_id DECIMAL NOT NULL, 
        category VARCHAR NOT NULL, 
        cell_per DECIMAL NOT NULL, 
        ts_insert TIMESTAMP WITHOUT TIME ZONE, 
        ts_update TIMESTAMP WITHOUT TIME ZONE, 
        user_insert VARCHAR, 
        user_update VARCHAR, 
        plant_type VARCHAR, 
        season VARCHAR, 
        short_category VARCHAR
);

--Create table and import from file in one step
csvsql --db postgresql://aklaver:@localhost:5432/test --tables cp  --insert  ~/cell_per.csv 

d cp
                               Table "public.cp"
     Column     |            Type             | Collation | Nullable | Default 
---------------- ----------------------------- ----------- ---------- ---------
 line_id        | numeric                     |           | not null | 
 category       | character varying           |           | not null | 
 cell_per       | numeric                     |           | not null | 
 ts_insert      | timestamp without time zone |           |          | 
 ts_update      | timestamp without time zone |           |          | 
 user_insert    | character varying           |           |          | 
 user_update    | character varying           |           |          | 
 plant_type     | character varying           |           |          | 
 season         | character varying           |           |          | 
 short_category | character varying           |           |          | 

select count(*) from cp;
 count 
-------
    68
(1 row)

  

Это всего лишь один инструмент. Вы также можете использовать инструменты ввода-вывода от Pandas.