[ Пред. ] [ Содержание ] [ След. ]

pgAdmin

[ @manjaro @install @postgres @sql @pgadmin ]

 


Установить postgres


Должен быть установлен Управление Manjaro:Управление пакетами:yay


В теории на этом шаге можно было установить сразу postgres и pgadmin, но что-то изменилось, и нативный клиент pgadmin установить невозможно. Его можно установить отдельно через python в виде веб-сервера и пользоваться базами через обычный браузер. Так и сделаем.


yay postgresql


Будет предложено множество вариантов, нам нужен


1 extra/postgresql 16.1-4 (20.0 MiB 64.2 MiB)
Sophisticated object-relational DBMS


поэтому указать цифру «1» и «Приступить к установке?» > Y.


В системе появится сервис postgres и новый юзер „postgres” (по-умолчанию без пароля, он будет задан позже).


Настроить сервис postgres


Задать каталог для сервиса postgres


(Непонятно почему, но…) Этот шаг рекомендуется выполнить в отдельном окне с консолью.


sudo -u postgres -i


initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data/'


exit


exit


Окно консоли будет закрыто. Открыть новое.


Запустить сервис postgres


sudo systemctl enable --now postgresql && sudo systemctl status postgresql


Подразумевается, что отныне сервис postgres будет запускаться вместе с системой.


Задать пароль юзеру „postgres”


Зайти в оболочку для управления postgres


psql -U postgres

Строка ввода теперь должна начинаться так:


postgres=#


Придумать пароль для этого юзера, записать в блокнот, запомнить, блокнот прожевать и проглотить.


\password


Указать пароль, подтвердить.


Выйти из shell:


\q


Настроить безопасность PostgreSQL Client Authentication


Опциональный шаг.


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


Если надо настроить несколько подключений к сервису Postgres извне и будет несколько пользователей, то настройка „Method = trust” опасен, его надо поменять на „md5”.


Логин как root и перейти в каталог с настройками


su
cd /var/lib/postgres/data


Сделать копию файла с настройками (он называется „PostgreSQL Client Authentication Configuration File”) и отредактировать его


cp pg_hba.conf pg_hba.conf.backup && mcedit pg_hba.conf


По-умолчанию в файле pg_hba.conf будет это:


TYPE DATABASE USER ADDRESS METHOD


# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust


Поменять все инструкции „trust” на „md5”.


Настроить быстрое открытие определенной БД


В некоторых обстоятельствах удобно сразу открывать определенную БД, например „DB_NAME”:


> psql DB_NAME postgres


Управляющие команды


postgres=# \c                       # see current database
postgres=# \l                       # see list of databases
postgres=# \c dbname                # set database
postgres=# create database dbname;  # create database
postgres=# \dt                      # see list of tables

Установить pgAdmin


Проверить, что запущен postgres service


Он уже был запущен на предыдущих шагах, но можно и повторить


sudo systemctl enable --now postgresql && sudo systemctl status postgresql


Создать основные директории для pgadmin


sudo mkdir /var/lib/pgadmin && sudo mkdir /var/log/pgadmin


Назначить своего юзера владельцем этих директорий:


sudo chown $USER /var/lib/pgadmin && sudo chown $USER /var/log/pgadmin


Создать Python-based virtual environment


cd ~/


python3 -m venv pgadmin4


Подразумеваем, что каталог для этого окружения будет создан в профиле пользователя, которому это всё нужно.


Перейти в созданный каталог


cd ~/pgadmin4


Установить pgAdmin4


Сделаем это грубо:


pip install pgadmin4 --break-system-packages


Запустить pgAdmin4


Активировать окружение для запуска pgAdmin


source ~/pgadmin4/bin/activate


Будет запущен shell, зрительно это выглядит так:


(pgadmin4) user@hostname:~$


Учесть что отныне это окружение будет постоянно запускаться при старте компьютера. Оно работает незаметно, но будет постоянно запускаться сервер pgAdmin, который будет постоянно занимать порт 5050 на localhost.


В этом shell перейти в каталог с pgAdmin и запустить сервис pgadmin:


cd ~/pgadmin4/ && pgadmin4


Ожидаемый ответ:


Enter the email address and password to use for the initial pgAdmin user account:


и так далее до


Starting pgAdmin 4. Please navigate to http://127.0.0.1:5050 in your browser.


Если есть этот ответ — ок. Это окно с консолью закрывать нельзя — сервис схлопнется.


Если что-то не так


Не факт, что всё пойдёт как надо.


ModuleNotFoundError: No module named 'pkg_resources'


читать так: отсутствует\поломался пакет setuptools из Python.


sudo pacman -S python-setuptools


Опционально:


pip install --upgrade setuptools && pip install --upgrade distribute


Вернуться в shell и сновы выполнить pgadmin4.


Сделать исполняемый sh-файл


Разумно закатать эту последовательность команд для запуска сервиса в один исполняемый sh-файл и запускать страницу управления СУБД в Firefox (с рабочим профилем „profileNameWork”):


#!/bin/bash


# запуск окружения для работы pgadmin в Manjaro


source ~/pgadmin4/bin/activate


echo "Окружение Python поднято."


cd ~/pgadmin4 & sleep 1 & pgadmin4 &


echo "Пауза 20 секунд."
echo "Подождать служебную информацию о запуске сервиса pgAdmin. Затем откроется Fifefox со страницей локалхоста."


sleep 20


firefox -p MyPROFILE --new-tab http://127.0.0.1:5050 &


echo "Done!"


Открыть СУДБ


Доступ только из браузера.


Открыть браузер
> http://127.0.0.1:5050
> залогиниться в pgAdmin
> подключиться к нужной БД


По-умолчанию доступна БД на локалхосте:


Host: localhost
Port: 5432
Maintenance database: postgres
Username: postgres
Password: [your password]

Закрыть окружение Python


Сперва перейти в каталог с виртуальным окружением


cd ~/pgadmin4


и вызвать там шелл Python:


source ~/pgadmin4/bin/activate


Будет запущен shell, зрительно это выглядит так:


(pgadmin4) user@hostname:~$


Проверить, что виртуальное окружение запущено:


(pgadmin4) user@hostname:~$ echo $VIRTUAL_ENV


Если оно запущено, в ответ придёт путь к окружению. Если не запущено, в ответ придет пустая строка.


Рекомендуется не использовать для этой проверки команды вроде „pip -V”, потому что это чтение содержимого каталога site-packages, а на компьютере может одновременно работать несколько версий Python, и ответ придёт из той, которая обслуживает «основную» версию.


Погасить окружение:


(pgadmin4) user@hostname:~$ deactivate


Обновить pgAdmin через Python


Скачать файл с установкой


Открыть https://www.pgadmin.org/download/pgadmin-4-python/


Перейти на страницу свежей версии из наличествующих — в этом примере „pgAdmin 4 v8.0 (released Nov. 23, 2023)”


Скачать файл „pgadmin4-8.0-py3-none-any.whl“, если будет установка с hdd, или просто скопировать прямую ссылку на него (это проще).


Убедиться в том, что виртуальное окружение НЕ работает


Перейти в Python-based virtual environment (ранее был создан в ~/pgadmin4):


cd ~/pgadmin4


echo $VIRTUAL_ENV


В ответ ждём пустую строку.


Погасить сервис postgres


sudo systemctl disable --now postgresql && sudo systemctl stop postgresql && sudo systemctl status postgresql


Погасить pgAdmin


Он, когда запущен, постоянно занимает Port 5050.


Проверить какая программа в данный момент занимает порт 5050:


lsof -i tcp:5050


Пример ответа, в котором есть только уже запущенный мною сервер pgAdmin:


COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
pgadmin4 69548 user 6u IPv4 586678 0t0 TCP localhost:mmcc (LISTEN)


Убить процесс „69548”:


sudo kill -9 69548


Выполнить обновление из сети


pip install https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v8.0/pip/pgadmin4-8.0-py3-none-any.whl --break-system-packages


Вообще это грубо и неправильно насильно впихивать пакеты в систему. Надо грамотно, через venv в Software:Python


Если всё было правильно погашено, то начнётся загрузка файла и новая установка.
Если нет, то ответом будет перечень сообщений «Requirement already satisfied».


Вероятно, будет предложено обновить pip — обновить его:


pip install --upgrade pip


Заново запустить сервис postgres


sudo systemctl enable --now postgresql && sudo systemctl start postgresql && sudo systemctl status postgresql


Заново активировать виртуальное окружение Python


Пропустить этот шаг, если мы и так в его шелле находимся.


source ~/pgadmin4/bin/activate


Будет запущен shell, зрительно это выглядит так:


(pgadmin4) user@hostname:~$


Запустить сервис pgadmin


Тут или запустить ранее созданный исполняемый sh-файл или вручную в этом shell перейти в каталог с pgAdmin и


cd ~/pgadmin4/ && pgadmin4


Дождаться сообщения


Starting pgAdmin 4. Please navigate to http://127.0.0.1:5050 your browser.


Next step: Software:pgAdmin