PostgreSQL

Обновлено 10 января 2024

PostgreSQL

PostgreSQL - свободная объектно-реляционная система управления базами данных.

Установка

Установите PostgreSQL:

emerge -a dev-db/postgresql

Выполните базовую настройку PostgreSQL:

emerge --config postgresql
Configuring pkg...

 * You can modify the paths and options passed to initdb by editing:
 *     /etc/conf.d/postgresql-13
 * 
 * Information on options that can be passed to initdb are found at:
 *     http://www.postgresql.org/docs/13/static/creating-cluster.html
 *     http://www.postgresql.org/docs/13/static/app-initdb.html
 * 
 * PG_INITDB_OPTS is currently set to:
 *     --encoding=UTF8
 * 
 * Configuration files will be installed to:
 *     /etc/postgresql-13/
 * 
 * The database cluster will be created in:
 *     /var/lib/postgresql/13/data
 * 
 * Continuing initialization in 5 seconds (Control-C to cancel) ...
 [ ok ]
 * Creating the data directory ...
 * Initializing the database ...
Файлы, относящиеся к этой СУБД, будут принадлежать пользователю "postgres".
От его имени также будет запускаться процесс сервера.

Кластер баз данных будет инициализирован со следующими параметрами локали:
  COLLATE:  ru_RU.utf8
  CTYPE:    ru_RU.utf8
  MESSAGES: ru_RU.utf8
  MONETARY: ru_RU.utf8
  NUMERIC:  C
  TIME:     ru_RU.utf8
Выбрана конфигурация текстового поиска по умолчанию "russian".

Контроль целостности страниц данных отключён.

исправление прав для существующего каталога /var/lib/postgresql/13/data... ок
создание подкаталогов... ок
выбирается значение max_connections... 100
выбирается значение shared_buffers... 128MB
выбор реализации динамической разделяемой памяти... posix
создание конфигурационных файлов... ок
выполняется подготовительный скрипт... ок
выполняется заключительная инициализация... ок
сохранение данных на диске... ок

ПРЕДУПРЕЖДЕНИЕ: используется проверка подлинности "trust" для локальных подключений.
Другой метод можно выбрать, отредактировав pg_hba.conf или используя ключи -A,
--auth-local или --auth-host при следующем выполнении initdb.

Готово. Теперь вы можете запустить сервер баз данных:

    /usr/lib64/postgresql-13/bin/pg_ctl -D /var/lib/postgresql/13/data -l файл_журнала start

 * The autovacuum function, which was in contrib, has been moved to the main
 * PostgreSQL functions starting with 8.1, and starting with 8.4 is now enabled
 * by default. You can disable it in the cluster's:
 *     /etc/postgresql-13/postgresql.conf
 * 
 * The PostgreSQL server, by default, will log events to:
 *     /var/lib/postgresql/13/data/postmaster.log
 * 
 * You should use the '/etc/init.d/postgresql-13' script to run PostgreSQL
 * instead of 'pg_ctl'.

В выводе указана вся основная информация.

Запустите PostgreSQL:

/etc/init.d/postgresql-13 start
postgresql-13 | * /run/postgresql: creating directory
postgresql-13 | * /run/postgresql: correcting owner
postgresql-13 | * Starting PostgreSQL 13 ...                                 [ ok ]

Добавьте SQL-сервер в автозагрузку:

rc-update add postgresql-13
 * service postgresql-13 added to runlevel default

Настройка с доступом по паролю

Настройка пользователя Postgres

Задайте пароль для пользователя postgres:

su postgres -c "psql -c '\password'"

Настройка доступа к базам

Выполните настройки доступа к SQL-серверу, разрешив доступ только локальным запросам и из локальной сети 192.168.0.0/24:

/etc/postgresql-13/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     password
# IPv4 local connections:
host    all             all             127.0.0.1/32            password
host    all             all             192.168.0.0/24          password
# 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

Через запятую укажите IP-адреса, которые должен слушать сервер PostgreSQL:

/etc/postgresql-13/postgresql.conf
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '192.168.0.1,127.0.0.1' # what IP address(es) to listen on;
                                           # comma-separated list of addresses;
                                           # defaults to 'localhost'; use '*' for all
                                           # (change requires restart)

Заметка

Если нужно, чтобы сервер был доступен на всех сетевых интерфейсах, вместо IP-адресов укажите "*".

Перезагрузите сервис баз данных:

/etc/init.d/postgresql-13 restart
postgresql-13 | * Stopping PostgreSQL 13 (this can take up to 92 seconds) ... [ ok ]
postgresql-13 | * /run/postgresql: correcting mode
postgresql-13 | * Starting PostgreSQL 13 ...                                  [ ok ]

Проверьте, что PostgreSQL слушает порт 5432:

netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN     
tcp        0      0 192.168.0.1:5432        0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
udp        0      0 127.0.0.1:41006         127.0.0.1:41006         ESTABLISHED
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     281718   /run/postgresql/.s.PGSQL.5432

Создание пользователя и базы данных

Создайте пользователя test и базу данных dbtest, с которой он будет работать:

createuser -U postgres -P test

createdb -U postgres -O test dbtest

Подключение к базе данных

Для подключения к базе данных dbtest пользователем test, выполните:

psql -U test -d dbtest
Пароль пользователя test:
psql (13.2)
Введите "help", чтобы получить справку.

test=> \q

Настройка авторизации методом Peer

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

Настройка авторизации

Закомментируйте все виды подключений к базе данных, оставив только локальные, изменив метод аутентификации на peer:

/etc/postgresql-13/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# 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

Перезагрузите настройки PostgreSQL:

/etc/init.d/postgresql-13 reload

Создание пользователя и базы данных

Создайте системного пользователя test:

useradd test

Создайте пользователя PostgreSQL test:

su postgres -c "createuser test"

Заметка

По умолчанию пользователь создаётся без возможности самому создавать базы данных. Для разрешения пользователю создавать новые базы данных добавьте параметр --createdb

Создайте базу данных testdb для пользователя test:

su postgres -c "createdb -O test testdb"

Подключение к базе данных

Для подключения к базе данных dbtest пользователем test, выполните:

psql -d testdb

psql (13.2)
Введите "help", чтобы получить справку.

testdb=>

Для подключения к базе данных dbtest пользователем root, выполните:

su postgres -c "psql -d testdb"

psql (13.2)
Введите "help", чтобы получить справку.

testing=#

Настройка производительности

При установке PostgreSQL автоматически создается базовый файл /etc/postgresql-13/postgresql.conf. Для оптимизации настроек вы можете использовать внешние инструменты, например PostgreSQL Configuration Builder.

PGTune расчитывает параметры конфигурации PostgreSQL на основе максимальной производительности для указанной конфигурации оборудования. Однако вы должны учесть, что многие параметры должны учитывать размер базы данных, количество клиентов и сложность запросов.