PostgreSQL
Обновлено 10 января 2024
PostgreSQL - свободная объектно-реляционная система управления базами данных.
Установка
Установите PostgreSQL:
emerge -a dev-db/postgresql
Выполните базовую настройку 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:
postgresql-13 | * /run/postgresql: creating directory postgresql-13 | * /run/postgresql: correcting owner postgresql-13 | * Starting PostgreSQL 13 ... [ ok ]
Добавьте SQL-сервер в автозагрузку:
* service postgresql-13 added to runlevel default
Настройка с доступом по паролю
Настройка пользователя Postgres
Задайте пароль для пользователя postgres:
su postgres -c "psql -c '\password'"
Настройка доступа к базам
Выполните настройки доступа к SQL-серверу, разрешив доступ только локальным запросам и из локальной сети 192.168.0.0/24:
# 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:
#------------------------------------------------------------------------------ # 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-адресов укажите "*".
Перезагрузите сервис баз данных:
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:
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, выполните:
Пароль пользователя test: psql (13.2) Введите "help", чтобы получить справку. test=> \q
Настройка авторизации методом Peer
Метод Peer аутентификации работает путем получения имени пользователя операционной системы клиента от ядра, с использованием его в качестве разрешенного имени пользователя базы данных, с дополнительным сопоставлением имен пользователей. Этот метод поддерживается только для локальных соединений.
Настройка авторизации
Закомментируйте все виды подключений к базе данных, оставив только локальные, изменив метод аутентификации на peer:
# 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 на основе максимальной производительности для указанной конфигурации оборудования. Однако вы должны учесть, что многие параметры должны учитывать размер базы данных, количество клиентов и сложность запросов.