Академический Документы
Профессиональный Документы
Культура Документы
PostgreSQL*, SQL*
Из песочницы
В своё время, столкнувшись с импортом и экспортом данных, обнаружилось, что какой-то более-
менее структурированной инфы мало: этот момент обходят на всяких там курсах по аналитике,
подразумевая, что это очень простые моменты, которым не следует уделять внимание.
В данной статье приведены примеры импорта в PostgreSQL непосредственно самой базы данных
в формате sql, а также импорта и экспорта данных в наиболее простом и распространенном
формате .csv, в котором в настоящее время хранятся множество существующих датасетов.
Формат .json хоть и является также очень распространенным, рассмотрен не будет, поскольку, по
моему скромному мнению, с ним все-таки лучше работать на Python, чем в SQL.
C:\Users\User-N\Desktop\БД
Далее понадобиться командная строка windows или SQL shell (psql). Для примера воспользуемся
cmd. Переходим в каталог, где находится скачанная БД, командой cd C:\Users\User-
N\Desktop\БД :
Отметим, что в зависимости от размера базы данных загрузка может занимать до нескольких
десятков минут. Конец загрузки будет отмечен следующим видом:
С таблицами:
Далее воспользуемся SQL shell (psql) для подключения к нужной БД и для подачи команд на
импорт данных. При открытии SQL shell (psql) она стандартно спросит про имя сервера, имя
подключаемой БД, порт и пользователя. Ввести нужно только имя БД и пароль пользователя, всё
остальное проходим нажатием ентра. Создается подключение к нужной БД – airtickets.
Где tickets – название созданной в БД таблицы, из – путь, где хранится .csv-файл, DELIMITER
‘,’ – разделитель, используемый в импортируемом .csv-файле, сам формат файла и HEADER ,
указывающий на заголовки «колонок».
Один интересный момент. Написание команды COPY строчными (маленькими) буквами привело
к тому, что psql ругнулся, выдал ошибку и предложил написать команду прописными буквами.
Для этого подключимся к БД demo через SQL shell (psql) и наберем команду, указав уже знакомые
параметры разделителя, типа файла и заголовка:
Существует и другой способ экспорта через pgAdmin: правой кнопкой мыши по нужной таблице –
экспорт – указание параметров экспорта в открывшемся окне.
Теги: Импорт экспорт данных в PostgreSQL, импорт и экспорт в csv, psql команда copy
Редакторский дайджест
Присылаем лучшие статьи раз в месяц
Электропочта
4 0
Карма Рейтинг
@KiraD
Пользователь
Комментарии 7
Как я понял, плоскую таблицу загрузили в таблицу БД без связи с другими таблицами БД.
А как загружать то же самое, если некоторые поля должны лечь в другие таблицы БД, а в данной
таблице должны появиться соответствующие id из тех таблиц, связанных с этой?
0 Ответить
Для миграции данных между двумя не идентичными схемами необходимо будет создать слой
программного кода для преобразования.
+1 Ответить
Признаться, я тоже догадывался об этой необходимости. Вопрос в том, как это лучше сделать.
Заглядывая сюда, я ожидал увидеть именно такой пример.
0 Ответить
Вы про загрузку нескольких .csv-файлов в новую БД? А никак не лягут, если это потом не прописать
кодом. Попробую следующей статьей показать на примере. Если Вы именно это имели ввиду.
+1 Ответить
Нет. Я про загрузку одной main csv, в которой, к примеру, есть колонки, которые содержат часто
повторяющиеся значения, и которые должны быть вынесены в отдельную таблицу со своими
индексами и связаны с нашей main таблицей связью один ко многим. Например, название филиала.
То-есть, возможно, надо при загрузке сразу список уникальных названий филиала загрузить в
другую таблицу, а при загрузке основной csv видимо делать поиск в таблице «филиалы» по
значению, а помещать в основную таблицу номер соответствующего индекса из «филиалы».
Или наоборот, грузить main как есть, а потом делать что-то вроде создания новой таблицы по select
filials from main group by filials, создания там индекса и создания в main новой колонки filial_id со
связью, а колонку main.filials удаляем. Я так делал, но правильно ли это?
Или ещё как… Сделать функцию добавления новой строки, разбирающую строку исходной csv и
раскладывающую нужные поля по уже созданным пустым таблицам и формирующую финальный
insert для main уже с правильными значениями filial_id… медленно, но верно…тогда эта функция
будет полезна в дальнейшем для пополнения или обновления.
0 Ответить
+1 Ответить
Вероятно вам стоит сделать в другой бд буферную таблицу, потом на основе нее сделать что-то вроде
Если это повторяющийся процесс, то посмотрите в сторону различных etl решений, например, nifi ,
apache airflow
Если вы хотите выгрузить таблицу + связи, то вероятно вам потребуется выгрузка через pg_dump
0 Ответить
Публикации
Кейс
+38 52 10 +10
Обзор
+38 20 11 +11
Ретроспектива
+21 9 0
Проектируйте правильно
Сложный 11 мин 6.1K
Из песочницы
+21 72 1 +1
Из песочницы
+18 31 3 +3
+14 34 8 +8
Перевод
+13 7 15 +15
+11 8 7 +7
Из песочницы
+9 1 1 +1
Мама
Простой 8 мин 5.7K
Ретроспектива
+9 4 6 +6
Показать еще
ИСТОРИИ
ЗАКАЗЫ
МИНУТОЧКУ ВНИМАНИЯ
Настройка языка
Техническая поддержка
© 2006–2023, Habr