[ @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:~$
В этом 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
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
Если всё было правильно погашено, то начнётся загрузка файла и новая установка.
Если нет, то ответом будет перечень сообщений «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