четверг, 19 октября 2023 г.

Установка и начало работы с PostgreSQL в RockyLinux 9. Pgadmin4

Установка PostgreSQL в RockyLinux:
# yum install postgresql-server postgresql
После установки необходимо выполнить команды инициализации PostgreSQL
# postgresql-setup --initdb
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Выполняем добавление PostgreSQL в автозагрузку и запускаем сервис:
# systemctl enable postgresql.service
# systemctl start postgresql.service

Сервер баз по умолчанию слушает localhost на порту 5432.
Данные базы будут в каталоге /var/lib/pgsql/data
Логи сервера будут записываться в файлы в директорию: /var/lib/pgsql/data/log/
Имя файла с текущим логом: /var/lib/pgsql/data/current_logfiles
Конфигурационный файл: /var/lib/pgsql/data/postgresql.conf
Проверка работы сервиса:
# systemctl status postgresql
# netstat -ltupn | grep 5432


Подключиться к базе PostgreSQL под root нельзя. Служебные подключения для настройки базы выполняются под пользователем postgres.
# sudo -i -u postgres
$ psql
psql (13.11)
Type "help" for help.
postgres=#


После установки PostgreSQL обычно требуется создать базу данных и пользователя для работы с этой базой данных.
Создадим базу данных с именем «bombey2» и пользователем «bombey2» для работы с этой базой данных.
Создание базы данных:
postgres=# CREATE DATABASE bombey2;
Создаем пользователя этой базы данных с именем bombey2 и паролем ‘12345’
postgres=# CREATE USER bombey2 WITH PASSWORD '12345';
Даем пользователю bombey2 все права на базу bombey2:
postgres=# GRANT ALL PRIVILEGES ON DATABASE bombey2 to bombey2;
Подключаемся к созданной базе и даем все права пользователю bombey2 на работу со всеми таблицами этой базы
postgres=# \c bombey2
bombey2=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "bombey2";
Теперь нужно изменить поведение сервера PostgreSQL в части методов аутентификации. Дело в том, что по умолчанию к базе могут подключаться только пользователи самой операционной системы. Изменим поведение, что бы к базе мог подключаться пользователь bombey2 под учеткой, созданной нами ранее:
Изменения вносятся в файл /var/lib/pgsql/data/pg_hba.conf
$ nano /var/lib/pgsql/data/pg_hba.conf
Добавляем ПЕРЕД строкой
host all all 127.0.0.1/32 ident
Строку:
host bombey2 bombey2 127.0.0.1/32 md5
То есть должно получиться:
# IPv4 local connections:
host bombey2 bombey2 127.0.0.1/32 md5
host all all 127.0.0.1/32 ident

Рестартуем postgresql
# systemctl restart postgresql
Теперь к базе можно подключиться под пользователем bombey2 так:
# psql -h 127.0.0.1 -d bombey2 -U bombey2 -W
Password: <вводим_пароль_пользователя_bombey2>
psql (13.11)
Type "help" for help.
bombey2=>


Далее установим pgadmin4 – программное обеспечение, позволяющее управлять PostgreSQL через web-интерфейс.
Для этого скачаем репозитарий, ссылку на который найдем на странице https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum
# rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm
При установке репозитария выдается предупреждение, на которое можно не обращать внимание.
warning: /var/tmp/rpm-tmp.4CvePz: Header V4 RSA/SHA256 Signature, key ID 210976f2: NOKEY
Теперь устанавливаем само программное обеспечение pgadmin4:
# yum install pgadmin4-web
После установки необходимо провести запуск сценария развертывания pgadmin4 в системе. Скрипт развертывания интегрирует pgadmin в web-сервер Apache, на котором будет работать сервер pgadmin4
# /usr/pgadmin4/bin/setup-web.sh
Во время работы сценария будет необходимо ввести адрес электронной почты и пароль, которые будут использоваться для входа в панель администрирования pgAdmin.
Enter the email address and password to use for the initial pgAdmin user account:
Email address: v.korolev@domain.ru
Password: *****
Retype password: *****

На вопрос
The Apache web server is running and must be restarted for the pgAdmin 4 installation to complete. Continue (y/n)?
Отвечаем «y»
После перезапуска apache, сервис pgadmin4 готов к работе
Если 80 порт в системе еще не открыт, то его нужно открыть:
# firewall-cmd --add-port=80/tcp --permanent
# firewall-cmd --reload
Теперь обратиться к Pgadmin4 можно по ссылке:
http://<ip-адрес>/pgadmin4 
Вводим имя пользователя и пароль заданные ранее, выбираем язык интерфейса «English» и входим в интерфейс программы:



Добавим (регистрируем в системе) новый сервер PostgreSQL для подключения.
Для этого выбираем иконку «Add New Server». На вкладке «General» задаем имя сервера и устанавливаем параметр обеспечивающий незамедлительное подключение к серверу после регистрации.


На вкладке «Connection» задается IP адрес сервера, название базы, имя пользователя, пароль. Включаем переключатель «Save Password?» в положение «ON».

После нажатия кнопки «Save» произойдет подключение к серверу PostgreSQL и откроется примерно такой Dashboard:



Управление базой будет доступно через пункты меню, открывающиеся в древовидной структуре слева.
Для добавления таблицы в базу нужно пройти по дереву меню слева: Databases—> bombey2 (имя базы) —> Schemes —> public —> Tables. Кликнуть по Tables правой кнопкой мыши и выбрать из контекстного меню: Create —> Table

После этого откроется мастер создания таблиц.
Для примера создадим таблицу состоящую из полей:
id – первичный индекс, большое число, увеличивающееся при добавлении строки в таблицу (auto_incremenet в терминах MySQL)
fio – ФамилияИмяОтчество, Текстовое поле длинной 300 символов
dr - День рождения, типа данных «Дата»
На первой вкладке вписываем имя таблицы, например «test3»

На второй вкладке «Columns» через знак «+» добавляем три строки.
Первая строка с названием «id» – первичный индекс. Тип данных «bigserial». Вторая строка – текстовое поле с названием «fio» и типом character varying. Максимальная длинна строки указывается в поле «Length». Третья строка – это дата рождения. Название поля «dr», тип поля «date».


После определения полей нажимаем кнопку «Save». Таблица добавиться в список таблиц нашей базы данных.
Автоувеличивающееся поле «id» при таком создании будет создано хитрым образом. В PostgreSQL для того что бы создать поле с увеличивающимся целым числом задается специальная сущность – Последовательность «Sequences». Ее можно увидеть в дереве объектов pgadmin:

Последовательность test3_id_seq связана с полем id в основной таблице test3. При добавлении новой строки в таблицу test3 происходит обращение к счетчику сущности test3_id_seq, оттуда извлекается последний выданный номер последовательности, счетчик увеличивается на 1, выдается число для записи в поле id. Затем счетчик последовательности увеличивается на 1.
Связность последовательности и поля первичного ключа описывается конструкцией nextval. Запрос SQL создания вышеописанной таблицы будет следующий:
CREATE SEQUENCE IF NOT EXISTS public.test3_id_seq
   INCREMENT 1
   START 1
   MINVALUE 1
   MAXVALUE 9223372036854775807
   CACHE 1
   OWNED BY test3.id;
CREATE TABLE IF NOT EXISTS public.test3
(
   id bigint NOT NULL DEFAULT nextval('test3_id_seq'::regclass),
   fio character varying(300) COLLATE pg_catalog."default",
   dr date,
   CONSTRAINT test3_pkey PRIMARY KEY (id)
)


Создание индекса для таблицы выполняется с помощью диалога создания индекса. Для вызова этого диалога нужно в дереве объектов pgadmin найти нужную таблицу, кликнуть по «Indexses» правой кнопкой мыши и выбрать Create —> Index...
Для создания типового индекса с настройками по умолчанию достаточно выбрать индексируемую колонку. Для этого в диалоге создания индекса сразу переходим на вкладку «Columns». Тут отключаем переключатель «Is expression» и в поле column выбираем индекируемое поле.

Затем нажимаем кнопку «Add». Выбранное поле переместиться в таблицу индексов. Переключатель «Is expression» вернется в изначальное положение:

Нажимаем кнопку «Save». Индекс будет создан.

Для работы ы SQL запросами в pgadmin вызывается окно запросов «Query Tool». Это делается через контекстное меню объекта таблиц. Меню вызывается правой кнопкой мыши:

Для просмотра / редактирования данных таблицы вызывается меню «View/Edit Data»