pgAdmin 4 | Как сохранить данные из отдельной таблицы в Debian? — efim360.ru

pgAdmin 4 | Как сохранить данные из отдельной таблицы в Debian?

Это про Linux. Столкнулся с проблемой "Импорта/Экспорта". Встроенный в pgAdmin 4 инструмент сохраняет файлы в свой "Storage Manager" ПУСТЫМИ! Файлы, конечно, сохраняются, но данных из таблицы в них нет.

pgAdmin4 в Storage Manager сохраняет пустые файлы через встроенный инструмент
pgAdmin4 в Storage Manager сохраняет пустые файлы через встроенный инструмент

 

Решение

Можно пойти иным путём и самостоятельно выполнить SQL-запрос при помощи "Запросника" на выделенной таблице. Как это делать?

 

Шаг 1 - Выделение нужной таблицы

Откройте нужный Сервер через интерфейс pgAdmin 4.

Откройте нужную Базу Данных через интерфейс pgAdmin 4.

Откройте нужную Схему через интерфейс pgAdmin 4.

Выделите нужную Таблицу через интерфейс pgAdmin 4.

pgAdmin4 выделили нужную таблицу в дереве
pgAdmin4 выделили нужную таблицу в дереве

В нашем случае таблица называется "efim2022db_fio"

 

Шаг 2 - Вызов Запросника для этой таблицы

Нажимаем правой кнопкой по выделенной таблице и в выпавшем меню выбираем "Запросник".

pgAdmin4 нажали правой кнопкой по нужной таблице и видим Запросник
pgAdmin4 нажали правой кнопкой по нужной таблице и видим Запросник

 

Нам откроется пустое окно "Запросника" для выделенной таблицы. В нём нас интересует поле с вкладкой "Query Editor".

Обратите внимание, что вкладка "Результат" не содержит данных. Это потому что мы ещё не выполнили никакой запрос.

pgAdmin4 пустое окно Запросника выделенной таблицы
pgAdmin4 пустое окно Запросника выделенной таблицы

 

Шаг 3 - Получение ВСЕХ данных из этой таблицы при помощи Запросника и SQL-запроса

Команда:

select * from public."efim2022db_fio"

Можно писать SQL-команды и SQL-предложения с маленькими буквами. Запросник в 2022 уже их понимает и различает.

pgAdmin4 ввели запрос на получение всех данных из таблицы
pgAdmin4 ввели запрос на получение всех данных из таблицы

 

После написания команды, нужно нажать на кнопку "Выполнения запроса" (Execute/Refresh) или клавиша F5.

pgAdmin4 Запрос выполнится - Таблица загрузилась в интерфейс
pgAdmin4 Запрос выполнится - Таблица загрузилась в интерфейс

Мы увидели все данные нужной таблицы. В нашем случае это 5 строк. Именно их мы и хотим сохранить к себе на сервер.

 

Шаг 4 - Создаём SQL-запрос на копирование информации в файл

Мы говорим о ОС Debian, поэтому нужно понимать структуру хранения файлов и каталогов в данной ОС.

Ещё важно понимать, что такое пользователи и их права на управление файлами.

Справка

Заданный файл должен быть доступен пользователю PostgreSQL (тому пользователю, от имени которого работает сервер), и путь к файлу должен задаваться с точки зрения сервера.

Команда:

copy public."efim2022db_fio" to '/tmp/test.csv' delimiter ';' csv header;

Мы копируем данные из таблицы в каталог "/tmp" в файл "test.csv". Каталог "/tmp" присутствует в любой ОС под управлением Linux.

Мы будем получать строки, которые будут отделены друг от друга спец-символами CR LF.

 

Каждая строка будет иметь внутренние разделения ячеек (столбцов) при помощи разделителя delimiter. У нас это будет точка с запятой для простоты.

Первую строчку с заголовками таблицы мы тоже сохраняем.

pgAdmin4 Добавили вторую строку с SQL-запросом сохранения данных
pgAdmin4 Добавили вторую строку с SQL-запросом сохранения данных

ВНИМАНИЕ!!! Мы пока просто вводим этот запрос в Запросник на вторую строку. На всякий случай оставляем первый запрос в Запроснике.

 

Шаг 5 - Выполняем SQL-запрос на копирование информации в файл

Выделяем второй запрос от начала до конца. Нажимаем кнопку "Выполнения запроса" (Execute/Refresh) или клавиша F5.

pgAdmin4 Выделили только вторую строку в Запроснике
pgAdmin4 Выделили только вторую строку в Запроснике

 

После вызова нас встречает позитивное зелёное уведомление о том что запрос на сохранение файла выполнился успешно.

pgAdmin4 Запрос завершён успешно - Зелёное информационное сообщение
pgAdmin4 Запрос завершён успешно - Зелёное информационное сообщение

 

Информация на вкладке "Сообщения" это подтверждает.

pgAdmin4 вкладка Сообщение в Запроснике - Успешное выполнение COPY
pgAdmin4 вкладка Сообщение в Запроснике - Успешное выполнение COPY

 

Шаг 6 - Находим файл test.csv в Debian

Теперь в терминале Debian можем выполнить команду для просмотра содержимого каталога "/tmp":

ls /tmp

И мы увидим наш успешно сохранённый файл.

Команда ls tmp в Debian для просмотра каталога временных файлов
Команда ls tmp в Debian для просмотра каталога временных файлов

Временных файлов может быть много. Не потеряйте свой.

 

Шаг 7 - Копирование файла test.csv из Debian в свою систему

С этого момента можно подключиться к серверу по ftp через FileZilla и скачать файл с данными из таблицы к себе на ПК или НОУТ.

В разных редакторах информация будет отображена по-разному. Например в Visual Studio Code:

Файл test.csv в редакторе VSC
Файл test.csv в редакторе VSC

Этот редактор умный, поэтому он сразу смог прочитать содержимое и представить его в правильном пользовательском варианте.

 

Редактор Notepad++ никак не преобразовывает информацию, а сразу отображает как есть.

Файл test.csv в редакторе Notepad++
Файл test.csv в редакторе Notepad++

 

В редакторе Excel отвалилась кодировка:

Файл test.csv в редакторе Excel
Файл test.csv в редакторе Excel

 

Задача выполнена!

 

Сохранение в обычный текстовый формат

Можно не заморачиваться с csv, а сразу сохранять в текстовый файл txt. Самый обычный.

Команда:

copy public."efim2022db_fio" to '/tmp/test.txt' delimiter ';';

Мы получим адекватный файл, который будет нормально читаться большинством программ.

Notepad++ корректно отобразил данные из таблицы сохранённой в text формате
Notepad++ корректно отобразил данные из таблицы сохранённой в text формате

Но у нас пропали заголовки столбцов. В целом, это может быть не критично, но всё же.

 

VSC корректно отобразил данные из таблицы сохранённой в text формате
VSC корректно отобразил данные из таблицы сохранённой в text формате

 

А вот обычный Блокнот Windows не понял переносы строк. Имейте ввиду. Он для этого не подходит.

Обычный Блокнот Windows не понял переносы строк
Обычный Блокнот Windows не понял переносы строк

 

Информационные ссылки

Синтаксис SQL-команды SELECT на русском языке - https://postgrespro.ru/docs/postgresql/14/sql-select

Синтаксис SQL-команды COPY на русском языке - https://postgrespro.ru/docs/postgresql/14/sql-copy

Команды SQL в PostgreSQL 14 - https://postgrespro.ru/docs/postgresql/14/sql-commands

Список команд терминального клиента PSQL - https://postgrespro.ru/docs/postgresql/14/app-psql

Официальный сайт PostgreSQL - https://www.postgresql.org

Графический веб-интерфейс для управления СУБД PostgreSQL - https://www.pgadmin.org

Операционная система Debian - https://www.debian.org