Установка БД PostgreSQL — различия между версиями

Материал из VAAL-WIKI
Перейти к: навигация, поиск
м
 
(не показано 14 промежуточных версии этого же участника)
Строка 1: Строка 1:
На данной странице приводится инструкция по установке ПО СУБД PostgreSQL.
+
На данной странице приводится инструкция по установке ПО СУБД PostgreSQL.<br />
 +
= <br /><p style="text-align:left"><span style="color:red"><b >Установка СУБД PostgreSQL 9.4 на CentOS 7.x</b ></span></p> =
 
Непосредственно перед установкой СУБД PostgreSQL необходимо выполнить следующие настройки:
 
Непосредственно перед установкой СУБД PostgreSQL необходимо выполнить следующие настройки:
<p style="text-align:left"><span style="color:red"><b >Настройка параметров ядра RHEL.</b ></span></p>
+
== <br /><p style="text-align:left"><span style="color:red"><b >Настройка параметров ядра CentOS 7</b ></span></p> ==
 
Настройка параметров ядра требуется для корректной установки и работы хостов на которых разворачиваются БД ''PostgreSQL 9.4''.
 
Настройка параметров ядра требуется для корректной установки и работы хостов на которых разворачиваются БД ''PostgreSQL 9.4''.
 
Перед тем как вносить изменения в файлы конфигурации, следует предварительно создать их резервные копии следующими командами:
 
Перед тем как вносить изменения в файлы конфигурации, следует предварительно создать их резервные копии следующими командами:
Строка 9: Строка 10:
 
<p style="text-align:left"><b > '''''# cp /etc/profile /etc/profile.bkp''''' </b ></p>
 
<p style="text-align:left"><b > '''''# cp /etc/profile /etc/profile.bkp''''' </b ></p>
 
<br />
 
<br />
<p style="text-align:left"><span style="color:red"><b >Настройка параметров ядра для инсталляции ''PostgreSQL 9.4''.</b ></span></p>
+
== <p style="text-align:left"><span style="color:red"><b >Настройка параметров ядра ОС для инсталляции ''PostgreSQL 9.4''</b ></span></p> ==
 
Отредактируйте файл /etc/sysctl.conf:
 
Отредактируйте файл /etc/sysctl.conf:
 
<p style="text-align:left"><b > '''''# vim /etc/sysctl.conf''''' </b ></p>
 
<p style="text-align:left"><b > '''''# vim /etc/sysctl.conf''''' </b ></p>
 
Рекомендуется закомментировать имеющиеся параметры kernel.shmmax и kernel.shmall.<br />
 
Рекомендуется закомментировать имеющиеся параметры kernel.shmmax и kernel.shmall.<br />
<span style="color:green">'''1) Параметры виртуальной памяти:'''</span>
+
=== <span style="color:green">'''Параметры виртуальной памяти'''</span> ===
<br />Добавьте в конец файла ''/etc/sysctl.conf'' следующие строки:<br />
+
Добавьте в конец файла ''/etc/sysctl.conf'' следующие строки:<br />
 
''vm.dirty_expire_centisecs=500''<br />
 
''vm.dirty_expire_centisecs=500''<br />
 
''vm.dirty_writeback_centisecs=100''<br />
 
''vm.dirty_writeback_centisecs=100''<br />
Строка 30: Строка 31:
 
<p style="text-align:left"><b > '''''# echo >> /etc/sysctl.conf''''' </b ></p>
 
<p style="text-align:left"><b > '''''# echo >> /etc/sysctl.conf''''' </b ></p>
 
<p style="text-align:left"><b > '''''# sysctl -p''''' </b ></p>
 
<p style="text-align:left"><b > '''''# sysctl -p''''' </b ></p>
<span style="color:green">'''2) Параметры общей памяти(kernel.shmmni, kernel.shmmax и kernel.shmall):'''</span><br />
+
=== <span style="color:green">'''Параметры общей памяти(kernel.shmmni, kernel.shmmax и kernel.shmall)'''</span> ===
 
Параметры ''kernel.shmmax'' и ''kernel.shmall'' зависят от количества RAM, установленной на сервере. Параметр ''kernel.shmmax'' указывается в байтах, а ''kernel. shmall'' в страницах.
 
Параметры ''kernel.shmmax'' и ''kernel.shmall'' зависят от количества RAM, установленной на сервере. Параметр ''kernel.shmmax'' указывается в байтах, а ''kernel. shmall'' в страницах.
 
Для определения максимума общей памяти (параметр ядра ''shmall'') в элементах размера страницы памяти, необходимо получить размер страницы в операционной системе (выполняем в терминале команду):
 
Для определения максимума общей памяти (параметр ядра ''shmall'') в элементах размера страницы памяти, необходимо получить размер страницы в операционной системе (выполняем в терминале команду):
Строка 51: Строка 52:
 
<span style="color:navy">'''33568968704/4096=8195549'''</span><br />
 
<span style="color:navy">'''33568968704/4096=8195549'''</span><br />
 
Количество байт оперативной памяти можно узнать, введя в терминале команду ''free -b''.<br />
 
Количество байт оперативной памяти можно узнать, введя в терминале команду ''free -b''.<br />
Минимальное значение для ''kernel.shmall'' равняется <span style="color:DarkGreen">'''''2097152'''''</span>.<br />
+
Минимальное значение для ''kernel.shmall'' равняется <span style="color:darkgreen">'''''2097152'''''</span>.<br />
 
В случае, если ''shmall'' или ''shmmax'' по вычислениям меньше минимально рекомендованного, то необходимо присвоить этим параметрам рекомендованные значения.<br />
 
В случае, если ''shmall'' или ''shmmax'' по вычислениям меньше минимально рекомендованного, то необходимо присвоить этим параметрам рекомендованные значения.<br />
<span style="color:magenta">'''''Ниже приводится пример расчёта параметров shmall и shmmax для сервера с количеством оперативной памяти равной 32 ГБ:<br />
+
'''''Ниже приводится пример расчёта параметров shmall и shmmax для сервера с количеством оперативной памяти равной 32 ГБ'''''.<br />
'''''</span>
+
'''''Выполните следующие команды в терминале, которые обновят содержимое ''etc/sysctl.conf'' ''''':<br />
<span style="color:darkred"><b><p>
+
<span style="color:darkred">
Выполните следующие команды в терминале, которые обновят содержимое ''etc/sysctl.conf'':
+
'''''# echo '## The following values are for 32 GB of RAM'  >>  /etc/sysctl.conf'''''<br />
'''''# echo '## The following values are for 32 GB of RAM'  >>  /etc/sysctl.conf'''''</p>
+
'''''# echo 'kernel.shmmax = 16784484352'  >>  /etc/sysctl.conf'''''<br />
<p style="text-align:left">'''''# echo 'kernel.shmmax = 16784484352'  >>  /etc/sysctl.conf'''''</p>
+
'''''# echo 'kernel.shmall = 8195549'  >>  /etc/sysctl.conf'''''<br />
<p style="text-align:left">'''''# echo 'kernel.shmall = 8195549'  >>  /etc/sysctl.conf'''''</p>
+
'''''# echo '# do not scale this parameter with RAM'  >>  /etc/sysctl.conf'''''<br />
<p style="text-align:left">'''''# echo '# do not scale this parameter with RAM'  >>  /etc/sysctl.conf'''''</p>
+
'''''# echo 'kernel.shmmni = 4096'  >>  /etc/sysctl.conf'''''<br />
<p style="text-align:left">'''''# echo 'kernel.shmmni = 4096'  >>  /etc/sysctl.conf'''''</p>
+
'''''# echo >>  /etc/sysctl.conf'''''<br />
<p style="text-align:left">'''''# echo >>  /etc/sysctl.conf'''''</p>
+
'''''# sysctl -p'''''</span>
<p style="text-align:left">'''''# sysctl -p'''''</p></b></span>
+
=== <span style="color:green">'''Семафоры'''</span> ===
<span style="color:green">'''3) Семафоры:'''</span>
+
<br />
+
 
Linux предоставляет семафоры для передачи небольшого количества информации между процессами. Семафоры — это числа-счётчики или on/off значения, которые организуются в группы. СУБД PostgreSQL необходимо больше групп, больше комнат в каждой группе и больше счётчиков, чем предоставляется операционной системой по умолчанию.
 
Linux предоставляет семафоры для передачи небольшого количества информации между процессами. Семафоры — это числа-счётчики или on/off значения, которые организуются в группы. СУБД PostgreSQL необходимо больше групп, больше комнат в каждой группе и больше счётчиков, чем предоставляется операционной системой по умолчанию.
 
Измените параметр ''kernel.sem'', определяющий необходимое количество семафоров, выполнив следующую команду:
 
Измените параметр ''kernel.sem'', определяющий необходимое количество семафоров, выполнив следующую команду:
 
<p style="text-align:left">'''''# echo 'kernel.sem = 250 32000 100 128'>>  /etc/sysctl.conf'''''</p>
 
<p style="text-align:left">'''''# echo 'kernel.sem = 250 32000 100 128'>>  /etc/sysctl.conf'''''</p>
<span style="color:green">'''4) Сетевые порты:'''</span>
+
=== <span style="color:green">'''Сетевые порты'''</span> ===
<br />
+
 
Измените параметр ''net.ipv4.ip_local_port_range'' в /etc/sysctl.conf для модификации диапазона ip портов для автоматического назначения клиентам исходящих портов, выполнив в терминале команду:
 
Измените параметр ''net.ipv4.ip_local_port_range'' в /etc/sysctl.conf для модификации диапазона ip портов для автоматического назначения клиентам исходящих портов, выполнив в терминале команду:
 
<p style="text-align:left">'''''# echo 'net.ipv4.ip_local_port_range = 9000 65500'>>  /etc/sysctl.conf'''''</p>
 
<p style="text-align:left">'''''# echo 'net.ipv4.ip_local_port_range = 9000 65500'>>  /etc/sysctl.conf'''''</p>
<span style="color:green">'''5) Оптимизация сетевых настроек (TCP/IP):'''</span>
+
=== <span style="color:green">'''Оптимизация сетевых настроек(TCP/IP)'''</span> ===
<br />
+
 
Рекомендуется установить постоянные размеры для буфера - максимальный и по умолчанию для сокетов приложений. Их рекомендованные значения – разумная точка для начала. Выполните в терминале следующие команды:
 
Рекомендуется установить постоянные размеры для буфера - максимальный и по умолчанию для сокетов приложений. Их рекомендованные значения – разумная точка для начала. Выполните в терминале следующие команды:
 
<p style="text-align:left">'''''# echo 'net.core.rmem_default = 262144' >>  /etc/sysctl.conf'''''</p>
 
<p style="text-align:left">'''''# echo 'net.core.rmem_default = 262144' >>  /etc/sysctl.conf'''''</p>
 
<p style="text-align:left">'''''# echo 'net.core.rmem_max = 4194304' >>  /etc/sysctl.conf'''''</p>
 
<p style="text-align:left">'''''# echo 'net.core.rmem_max = 4194304' >>  /etc/sysctl.conf'''''</p>
 
<p style="text-align:left">'''''# echo 'net.core.wmem_default = 262144' >>  /etc/sysctl.conf'''''</p>
 
<p style="text-align:left">'''''# echo 'net.core.wmem_default = 262144' >>  /etc/sysctl.conf'''''</p>
<p style="text-align:left">'''''# echo 'net.core.wmem_max = 1048586' >>  /etc/sysctl.conf'''''</p>
+
<p style="text-align:left">'''''# echo 'net.core.wmem_max = 1048576' >>  /etc/sysctl.conf'''''</p>
<span style="color:green">'''6) Различная системная конфигурация:'''</span>
+
=== <span style="color:green">'''Различная системная конфигурация'''</span> ===
 
*Вам может понадобиться увеличить следующие конфигурационные параметры, если они слишком малы:
 
*Вам может понадобиться увеличить следующие конфигурационные параметры, если они слишком малы:
 
: <span style="color:green">Максимальное количество открытых файлов:</span>
 
: <span style="color:green">Максимальное количество открытых файлов:</span>
Строка 90: Строка 87:
 
<br ><br />
 
<br ><br />
  
<p style="text-align:left"><span style="color:red"><b >Ограничения оболочки для пользователя postgres.</b ></span></p>
+
== <p style="text-align:left"><span style="color:red"><b >Ограничения оболочки для пользователя postgres</b ></span></p> ==
 
Во время обычной работы запускается много процессов, открывается большое количество файлов и требуется больше ресурсов, чем обычно. В то же время, пределы (hard limits) на аккаунте предотвратит в некоторых случаях зависание процессов (resource starvation). Конфигурация PAM по умолчанию (в /etc/pam.d/system-auth) загружает модули (session required pam_limits.so) которые устанавливают и приводят в действие эти пределы.<br />
 
Во время обычной работы запускается много процессов, открывается большое количество файлов и требуется больше ресурсов, чем обычно. В то же время, пределы (hard limits) на аккаунте предотвратит в некоторых случаях зависание процессов (resource starvation). Конфигурация PAM по умолчанию (в /etc/pam.d/system-auth) загружает модули (session required pam_limits.so) которые устанавливают и приводят в действие эти пределы.<br />
 
Как администратор '''''root''''' добавьте следующие строчки в ''/etc/security/limits.conf'':<br />
 
Как администратор '''''root''''' добавьте следующие строчки в ''/etc/security/limits.conf'':<br />
Строка 111: Строка 108:
  
 
Настройка ОС для серверов БД PostgreSQL выполнена. Далее будет описан процесс установку СУБД PostgreSQL 9.4 на ОС CentOS 7.2.
 
Настройка ОС для серверов БД PostgreSQL выполнена. Далее будет описан процесс установку СУБД PostgreSQL 9.4 на ОС CentOS 7.2.
 +
== <br /><p style="text-align:left"><span style="color:red"><b >Установка СУБД PostgreSQL 9.4</b ></span></p> ==
 +
Установку можно производить как из локальных репозиториев, так и из репозиториев, размещённых в интернете(при наличии соответствующего доступа). Пакеты которые должны быть установлены: postgresql94-server, postgresql94-contrib, postgresql94-libs, postgresql94-devel. Служба firewalld должна быть отключена, selinux должен быть отключен.<br />
 +
Командой '''''# locale''''' проверяем текущую локаль сервера БД. При правильной настройке вывод должен быть таким:<br />
 +
[[File:LOCALE PSQL.png|center]]
 +
 +
1) Для установки пакетов PostgreSQL в командной строке выполнить команду от root:
 +
<p style="text-align:left">'''''# yum install postgresql94-server postgresql94-contrib postgresql94-libs postgresql94-devel'''''</p>
 +
2) Инициализируем базу данных PostgreSQL, добавляем сервис в автозагрузку, стартуем сервис БД, проверяем статус, выполнив команды:
 +
<p style="text-align:left">'''''# /usr/pgsql-9.4/bin/postgresql94-setup initdb'''''</p>
 +
<p style="text-align:left">'''''# systemctl enable postgresql-9.4'''''</p>
 +
<p style="text-align:left">'''''# systemctl start postgresql-9.4'''''</p>
 +
<p style="text-align:left">'''''# systemctl status postgresql-9.4'''''</p>
 +
3) В /var/lib/pgsql ($HOME postgres) создаём файл .pgsql_profile следующего содержания: '''''export PATH=/usr/pgsql-9.4/bin:$PATH'''''<br />
 +
4) Создадим резервную копию и отредактируем файл ''/var/lib/pgsql/9.4/data/postgresql.conf'':<br />
 +
<p style="text-align:left">'''''# cp /var/lib/pgsql/9.4/data/postgresql.conf /var/lib/pgsql/9.4/data/postgresql.conf.bkp'''''</p>
 +
<p style="text-align:left">'''''# vi /var/lib/pgsql/9.4/data/postgresql.conf'''''</p>
 +
Раскомментируем строку ''listen_addresses = 'localhost''' и заменим localhost на '*'. Это говорит PostgreSQL принимать запросы со всех интерфейсов. Должно получиться следующее: ''listen_addresses = '*' ''
 +
На сервере 32 Gb RAM, выделим для PostgreSQL 16 Gb. Здесь же раскомментируем и изменим нижеследующие параметры исходя из 16 ГБ RAM доступных PostgreSQL:
 +
<pre>
 +
max_connections = 200
 +
shared_buffers = 4GB
 +
effective_cache_size = 12GB
 +
work_mem = 21970 kB
 +
maintenance_work_mem = 1024MB
 +
wal_buffers = 32MB
 +
checkpoint_segments = 64
 +
checkpoint_completion_target = 0.9
 +
default_statistics_target = 100
 +
log_destination = 'stderr'
 +
logging_collector = on
 +
log_min_duration_statement = 3000
 +
log_checkpoints = on
 +
log_connections = on
 +
log_disconnections = on
 +
log_line_prefix = '%t [%p]: [%l-1]'
 +
log_lock_waits = on
 +
log_temp_files = 0
 +
log_autovacuum_min_duration = 0
 +
lc_messages = 'C'
 +
log_statement = 'none'
 +
log_min_messages = info
 +
log_error_verbosity = verbose
 +
</pre>
 +
5) Далее редактируем файл /var/lib/pgsql/9.4/data/pg_hba.conf. В конце файла добавляем строчку, прописав нужный адрес сети, вместо ''<адрес сети>'':<br />
 +
<pre>host&#9;all&#9;all&#9;<адрес сети>/24&#9;md5</pre>
 +
В строке ''local&#9;all&#9;all&#9;peer'' меняем ''peer'' на ''trust'':
 +
<pre>local&#9;all&#9;all&#9;trust</pre>
 +
А в строке ''host&#9;all&#9;all&#9;127.0.0.1/32&#9;ident''
 +
''ident'' меняем на ''md5'':
 +
<pre>host&#9;all&#9;all&#9;127.0.0.1/32&#9;md5</pre>
 +
Добавляем в конец ''pg_hba.conf'',прописав нужный адрес сети, вместо ''<адрес сети>'':
 +
<pre>host&#9;all&#9;&#9;all&#9;&#9;<адрес сети>/4&#9;md5
 +
host&#9;replication&#9;postgres&#9;::1/128 &#9;trust
 +
</pre>
 +
6) Перезапускаем службу PostgreSQL:
 +
<p style="text-align:left">'''''#  systemctl restart postgresql-9.4'''''</p>
 +
7) Меняем пароль для пользователя postgres (в ОС и в БД), после перезагружаем сервер и заходим под этим пользователем (postgres):
 +
<p style="text-align:left">'''''# passwd postgres'''''</p>
 +
Вводим пароль, подтверждаем пароль, перезагружаем систему.
 +
После перезагрузки, заходим под postgres, в терминале набираем:
 +
<p style="text-align:left">'''''$ psql'''''</p>
 +
и меняем пароль для пользователя БД postgres:
 +
<p style="text-align:left">'''''postgres=# \password postgres '''''</p>
 +
8) Установим PostgreSQL Adminpack:
 +
<p style="text-align:left">'''''postgres=# CREATE EXTENSION adminpack;'''''</p>
 +
9) Создаём базу данных и пользователя, где ''<user>'' - имя пользователя, ''<password>'' - пароль пользователя ''<user>'', ''<dbname>'' - имя базы:
 +
<p style="text-align:left">'''''postgres=# CREATE DATABASE <dbname>;'''''</p>
 +
<p style="text-align:left">'''''postgres=# CREATE USER <user> WITH password '<password>';'''''</p>
 +
<p style="text-align:left">'''''postgres=# GRANT ALL privileges ON DATABASE <dbname> TO <user>;'''''</p>
 +
Выходим из psql:
 +
<p style="text-align:left">'''''postgres=# \q'''''</p>
 +
10) Проверяем подключение к базе, выполнив следующую команду:
 +
<p style="text-align:left">'''''$ psql -h 127.0.0.1 <dbname> <user>'''''</p>
 +
Если всё нормально, отключаемся.<br />
 +
11) Для того, что бы параметры вступили с силу, необходимо перегрузить PostgreSQL:
 +
<p style="text-align:left">'''''# systemctl restart postgresql-9.4'''''</p>
 +
 +
P.S. Некоторые параметры из postgresql.conf можно применять без перезагрузки PostgreSQL. Для этого служат следующие команды:<br />
 +
* '''''su - postgresl; /usr/bin/pg_ctl reload''''' — используя командный интерпретатор(bash)<br />
 +
* '''''SELECT pg_reload_conf();''''' — используя SQL-код
 +
= <br /><p style="text-align:left"><span style="color:red"><b >Установка СУБД PostgreSQL 9.4 на ОС Windows</b ></span></p> =
 +
В данном разделе рассматривается инсталляция СУБД PostgreSQL 9.4 на ОС Windows без использования штатного инсталлятора.<br />
 +
== <span style="color:green">'''Установка СУБД PostgreSQL'''</span> ==
 +
Установка СУБД PostgreSQL включает в себя выполнение следующих шагов(выполняются из-под <u>административной учётной записи</u>):<br />
 +
:<span style="color:red">'''1)'''</span> Скачиваем инсталляционный пакет <u>'''[https://www.microsoft.com/en-us/download/confirmation.aspx?id=17657 rktools.exe]'''</u>. Инсталлируем его в систему.
 +
:<span style="color:red">'''2)'''</span> Создаём директорию <u>PostgreSQL</u> на диске C:\, используя терминал командной строки('''>mkdir "C:\PostgreSQL"''') или контекстное меню, вызываемое правой клавишей мыши('''Создать—>Папку''').
 +
:<span style="color:red">'''3)'''</span> Скачиваем архив c бинарными файлами '''postgresql-9.4.xx-x-windows-x64-binaries.zip''' c https://www.enterprisedb.com/download-postgresql-binaries. Распаковываем архив в директорию '''C:\PostgreSQL'''.
 +
:<span style="color:red">'''4)'''</span> Создаём каталог <u>C:\PostgreSQL\data</u>('''>mkdir "C:\PostgreSQL\data"'''),  в нём будут лежать базы.
 +
:<span style="color:red">'''5)'''</span> Создаём пользователя '''postgres''' с паролем ''postgres''. В командной строке(запущена из-под <u>'''Администратора'''</u>) вводим:
 +
::<span style="color:darkred">'''''net user postgres postgres /add'''''</span>
 +
:<span style="color:red">'''6)'''</span> Устанавливаем ему неограниченный срок действия пароля:
 +
::<span style="color:darkred">'''''WMIC UserAccount WHERE Name="postgres" Set PasswordExpires=FALSE'''''</span>
 +
:<span style="color:red">'''7)'''</span> Даём право входа в качестве службы утилитой '''ntrights''' из '''''Windows Resource Kit Tools(rktools)''''':
 +
::<span style="color:darkred">'''''ntrights +r SeServiceLogonRight -u postgres'''''</span>
 +
:<span style="color:red">'''8)'''</span> Даём все права на каталог <u>C:\PostgreSQL</u>:
 +
::<span style="color:darkred">'''''cacls C:\PostgreSQL /E /G postgres:F'''''</span>
 +
:<span style="color:red">'''9)'''</span> Создаём в <u>C:\PostgreSQL\bin</u> текстовый файл с именем <u>''pf''</u>, содержащий пароль — ''postgres'':
 +
::<span style="color:darkred">'''''echo postgres> C:\PostgreSQL\bin\pf'''''</span>
 +
:<span style="color:red">'''10)'''</span> Переходим в терминале CMD в директорию <u>C:\PostgreSQL\bin</u> и выполняем команду по инициализации базы:
 +
::<span style="color:darkred">'''''cd C:\PostgreSQL\bin'''''</span>
 +
::<span style="color:darkred">'''''initdb -U postgres --pwfile=pf -A md5 -E UTF8 --locale=Russian_Russia -D C:\PostgreSQL\data'''''</span>
 +
:<span style="color:red">'''11)'''</span> Регистрируем сервис:
 +
::<span style="color:darkred">'''''pg_ctl register -N PostgreSQL -U postgres -P postgres -D C:\PostgreSQL\data -S auto'''''</span>
 +
:<span style="color:red">'''12)'''</span> Запускаем службу:
 +
::<span style="color:darkred">'''''sc start PostgreSQL'''''</span>
 +
:<span style="color:red">'''13)'''</span> Для удобства прописываем путь к бинарным файлам '''PostgreSQL''' в ''PATH''(переменные окружения):
 +
::<span style="color:darkred">'''''pathman /as c:\PostgreSQL\bin'''''</span>
 +
:<span style="color:red">'''14)'''</span> Вносим изменения в системный сервис '''PostgreSQL'''(В ''cmd'' ввести '''services.msc''', выбрать службу '''PostgreSQL''', вкладка '''Восстановление'''):
 +
::<span style="color:darkred">'''''Первый сбой: Перезапуск службы'''''</span>
 +
::<span style="color:darkred">'''''Второй сбой: Перезапуск службы'''''</span>
 +
:<span style="color:red">'''15)'''</span> Добавляем в системные переменные окружения ключ '''PGDATA''' со значением <u>C:\PostgreSQL\data</u>:
 +
::<span style="color:darkred">'''''setx PGDATA "C:\PostgreSQL\data"'''''</span>
 +
:<span style="color:red">'''16)'''</span> Для настройки кодовой страницы с корректным выводом кириллицы в терминале выполняем следующие команды:
 +
::<span style="color:darkred">'''''psql -d postgres -U postgres'''''
 +
::<span style="color:darkred">'''''\! chcp 1251'''''
 +
 +
== <span style="color:green">'''Создание БД в PostgreSQL в Windows'''</span> ==
 +
Для создания БД в PostgreSQL необходимо выполнить следующие шаги(выполняются из-под <u>административной учётной записи</u>):<br />
 +
:<span style="color:red">'''1)'''</span> Запускаем интерпретатор командной строки(CMD)
 +
:<span style="color:red">'''2)'''</span> Подключаемся к инстансу БД:
 +
::<span style="color:darkred">'''''psql -d postgres -U postgres'''''
 +
:<span style="color:red">'''3)'''</span> Устанавливаем '''''PostgreSQL Adminpack''''':
 +
::<span style="color:darkred">'''''CREATE EXTENSION adminpack;'''''
 +
:<span style="color:red">'''4)'''</span> Создаём базу данных '''test''' и пользователя БД '''test''' с паролем '''test''':
 +
::<span style="color:darkred">'''''CREATE DATABASE test;'''''
 +
::<span style="color:darkred">'''''CREATE USER test WITH password 'test';'''''
 +
::<span style="color:darkred">'''''GRANT ALL privileges ON DATABASE test TO test;'''''
 +
:<span style="color:red">'''5)'''</span> Проверяем соединение с созданной базой данных:
 +
::<span style="color:darkred">'''''psql -h 127.0.0.1 -p 5432 -U test -d test'''''<br />

Текущая версия на 20:55, 5 марта 2018

На данной странице приводится инструкция по установке ПО СУБД PostgreSQL.


Установка СУБД PostgreSQL 9.4 на CentOS 7.x

Непосредственно перед установкой СУБД PostgreSQL необходимо выполнить следующие настройки:


Настройка параметров ядра CentOS 7

Настройка параметров ядра требуется для корректной установки и работы хостов на которых разворачиваются БД PostgreSQL 9.4. Перед тем как вносить изменения в файлы конфигурации, следует предварительно создать их резервные копии следующими командами:

# cp /etc/sysctl.conf /etc/sysctl.conf.bkp

# cp /etc/security/limits.conf /etc/security/limits.conf.bkp

# cp /etc/pam.d/login /etc/pam.d/login.bkp

# cp /etc/profile /etc/profile.bkp


Настройка параметров ядра ОС для инсталляции PostgreSQL 9.4

Отредактируйте файл /etc/sysctl.conf:

# vim /etc/sysctl.conf

Рекомендуется закомментировать имеющиеся параметры kernel.shmmax и kernel.shmall.

Параметры виртуальной памяти

Добавьте в конец файла /etc/sysctl.conf следующие строки:
vm.dirty_expire_centisecs=500
vm.dirty_writeback_centisecs=100
vm.swappiness=0
vm.dirty_background_ratio=3
vm.dirty_ratio=15
Или выполните в терминале следующие команды(от root):

# echo '#### New PostgreSQL Kernel Parameters ####' >> /etc/sysctl.conf

# echo '#These parameters a recommended to control the rate at which virtual memory is reclaimed' >> /etc/sysctl.conf

# echo 'vm.swappiness=0' >> /etc/sysctl.conf

# echo 'vm.dirty_background_ratio=3' >> /etc/sysctl.conf

# echo 'vm.dirty_ratio=15' >> /etc/sysctl.conf

# echo 'vm.dirty_expire_centisecs=500' >> /etc/sysctl.conf

# echo 'vm.dirty_writeback_centisecs=100' >> /etc/sysctl.conf

# echo >> /etc/sysctl.conf

# sysctl -p

Параметры общей памяти(kernel.shmmni, kernel.shmmax и kernel.shmall)

Параметры kernel.shmmax и kernel.shmall зависят от количества RAM, установленной на сервере. Параметр kernel.shmmax указывается в байтах, а kernel. shmall в страницах. Для определения максимума общей памяти (параметр ядра shmall) в элементах размера страницы памяти, необходимо получить размер страницы в операционной системе (выполняем в терминале команду):

#getconf PAGE_SIZE


Максимальный размер общего сегмента shmmax должен равняться, по меньшей мере, половине общего объема памяти.SHMMAX не может превышать размер RAM минус один байт, но должен быть больше чем сумма всех SGA на данном хосте. Минимальное значение 536870912. Рекомендуется установить максимальное количество сегментов общей памяти shmmni равным 4096. Текущее значение этих параметров можно узнать, выполнив команды:

# cat /proc/sys/kernel/shmmax

# cat /proc/sys/kernel/shmall

# cat /proc/sys/kernel/shmmni

Параметр kernel.shmmax вычисляется следующим образом:
kernel.shmmax = RAM (в байтах) / 2,
Например:
33568968704/2=16784484352
Количество байт оперативной памяти можно узнать, введя в терминале команду free -b.
Минимальное значение для kernel.shmmax равняется 536870912.
Параметр kernel.shmall вычисляется следующим образом:
kernel.shmall = RAM (в байтах) / 4096,
Например:
33568968704/4096=8195549
Количество байт оперативной памяти можно узнать, введя в терминале команду free -b.
Минимальное значение для kernel.shmall равняется 2097152.
В случае, если shmall или shmmax по вычислениям меньше минимально рекомендованного, то необходимо присвоить этим параметрам рекомендованные значения.
Ниже приводится пример расчёта параметров shmall и shmmax для сервера с количеством оперативной памяти равной 32 ГБ.
Выполните следующие команды в терминале, которые обновят содержимое etc/sysctl.conf :
# echo '## The following values are for 32 GB of RAM' >> /etc/sysctl.conf
# echo 'kernel.shmmax = 16784484352' >> /etc/sysctl.conf
# echo 'kernel.shmall = 8195549' >> /etc/sysctl.conf
# echo '# do not scale this parameter with RAM' >> /etc/sysctl.conf
# echo 'kernel.shmmni = 4096' >> /etc/sysctl.conf
# echo >> /etc/sysctl.conf
# sysctl -p

Семафоры

Linux предоставляет семафоры для передачи небольшого количества информации между процессами. Семафоры — это числа-счётчики или on/off значения, которые организуются в группы. СУБД PostgreSQL необходимо больше групп, больше комнат в каждой группе и больше счётчиков, чем предоставляется операционной системой по умолчанию. Измените параметр kernel.sem, определяющий необходимое количество семафоров, выполнив следующую команду:

# echo 'kernel.sem = 250 32000 100 128'>> /etc/sysctl.conf

Сетевые порты

Измените параметр net.ipv4.ip_local_port_range в /etc/sysctl.conf для модификации диапазона ip портов для автоматического назначения клиентам исходящих портов, выполнив в терминале команду:

# echo 'net.ipv4.ip_local_port_range = 9000 65500'>> /etc/sysctl.conf

Оптимизация сетевых настроек(TCP/IP)

Рекомендуется установить постоянные размеры для буфера - максимальный и по умолчанию для сокетов приложений. Их рекомендованные значения – разумная точка для начала. Выполните в терминале следующие команды:

# echo 'net.core.rmem_default = 262144' >> /etc/sysctl.conf

# echo 'net.core.rmem_max = 4194304' >> /etc/sysctl.conf

# echo 'net.core.wmem_default = 262144' >> /etc/sysctl.conf

# echo 'net.core.wmem_max = 1048576' >> /etc/sysctl.conf

Различная системная конфигурация

  • Вам может понадобиться увеличить следующие конфигурационные параметры, если они слишком малы:
Максимальное количество открытых файлов:

Рекомендуется ввести, как минимум, значение 6815744. Проверьте значение на вашей системе, в случае необходимости изменения значения выполните в терминале команду
# echo 'fs.file-max = 6815744' >> /etc/sysctl.conf

Максимальное количество конкурентных асинхронных запросов ввода/вывода:

Рекомендуется увеличить это значение до значения 1048576. Выполните в терминале команду
# echo 'fs.aio-max-nr = 1048576' >> /etc/sysctl.conf

Ограничения оболочки для пользователя postgres

Во время обычной работы запускается много процессов, открывается большое количество файлов и требуется больше ресурсов, чем обычно. В то же время, пределы (hard limits) на аккаунте предотвратит в некоторых случаях зависание процессов (resource starvation). Конфигурация PAM по умолчанию (в /etc/pam.d/system-auth) загружает модули (session required pam_limits.so) которые устанавливают и приводят в действие эти пределы.
Как администратор root добавьте следующие строчки в /etc/security/limits.conf:

postgres		soft		nproc		2047
postgres		hard		nproc		16384
postgres		soft		nofile		1024
postgres		hard		nofile		65536
postgres		soft		stack		10240
postgres		hard		stack		32768

Отредактируйте файл /etc/pam.d/login, добавив в него строку session required pam_limits.so Отредактируйте файл /etc/profile добавив перед:

unset i
unset pathmunge

Текст со следующим содержанием:

if [ $USER = "postgres" ]; then
ulimit -u 16384 -n 65536
fi

Настройка ОС для серверов БД PostgreSQL выполнена. Далее будет описан процесс установку СУБД PostgreSQL 9.4 на ОС CentOS 7.2.


Установка СУБД PostgreSQL 9.4

Установку можно производить как из локальных репозиториев, так и из репозиториев, размещённых в интернете(при наличии соответствующего доступа). Пакеты которые должны быть установлены: postgresql94-server, postgresql94-contrib, postgresql94-libs, postgresql94-devel. Служба firewalld должна быть отключена, selinux должен быть отключен.
Командой # locale проверяем текущую локаль сервера БД. При правильной настройке вывод должен быть таким:

LOCALE PSQL.png

1) Для установки пакетов PostgreSQL в командной строке выполнить команду от root:

# yum install postgresql94-server postgresql94-contrib postgresql94-libs postgresql94-devel

2) Инициализируем базу данных PostgreSQL, добавляем сервис в автозагрузку, стартуем сервис БД, проверяем статус, выполнив команды:

# /usr/pgsql-9.4/bin/postgresql94-setup initdb

# systemctl enable postgresql-9.4

# systemctl start postgresql-9.4

# systemctl status postgresql-9.4

3) В /var/lib/pgsql ($HOME postgres) создаём файл .pgsql_profile следующего содержания: export PATH=/usr/pgsql-9.4/bin:$PATH
4) Создадим резервную копию и отредактируем файл /var/lib/pgsql/9.4/data/postgresql.conf:

# cp /var/lib/pgsql/9.4/data/postgresql.conf /var/lib/pgsql/9.4/data/postgresql.conf.bkp

# vi /var/lib/pgsql/9.4/data/postgresql.conf

Раскомментируем строку listen_addresses = 'localhost' и заменим localhost на '*'. Это говорит PostgreSQL принимать запросы со всех интерфейсов. Должно получиться следующее: listen_addresses = '*' На сервере 32 Gb RAM, выделим для PostgreSQL 16 Gb. Здесь же раскомментируем и изменим нижеследующие параметры исходя из 16 ГБ RAM доступных PostgreSQL:

max_connections = 200
shared_buffers = 4GB
effective_cache_size = 12GB
work_mem = 21970 kB
maintenance_work_mem = 1024MB
wal_buffers = 32MB
checkpoint_segments = 64
checkpoint_completion_target = 0.9
default_statistics_target = 100
log_destination = 'stderr'
logging_collector = on
log_min_duration_statement = 3000
log_checkpoints = on
log_connections = on
log_disconnections = on
log_line_prefix = '%t [%p]: [%l-1]'
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
lc_messages = 'C'
log_statement = 'none'
log_min_messages = info
log_error_verbosity = verbose

5) Далее редактируем файл /var/lib/pgsql/9.4/data/pg_hba.conf. В конце файла добавляем строчку, прописав нужный адрес сети, вместо <адрес сети>:

host	all	all	<адрес сети>/24	md5

В строке local all all peer меняем peer на trust:

local	all	all	trust

А в строке host all all 127.0.0.1/32 ident ident меняем на md5:

host	all	all	127.0.0.1/32	md5

Добавляем в конец pg_hba.conf,прописав нужный адрес сети, вместо <адрес сети>:

host	all		all		<адрес сети>/4	md5
host	replication	postgres	::1/128 	trust

6) Перезапускаем службу PostgreSQL:

# systemctl restart postgresql-9.4

7) Меняем пароль для пользователя postgres (в ОС и в БД), после перезагружаем сервер и заходим под этим пользователем (postgres):

# passwd postgres

Вводим пароль, подтверждаем пароль, перезагружаем систему. После перезагрузки, заходим под postgres, в терминале набираем:

$ psql

и меняем пароль для пользователя БД postgres:

postgres=# \password postgres

8) Установим PostgreSQL Adminpack:

postgres=# CREATE EXTENSION adminpack;

9) Создаём базу данных и пользователя, где <user> - имя пользователя, <password> - пароль пользователя <user>, <dbname> - имя базы:

postgres=# CREATE DATABASE <dbname>;

postgres=# CREATE USER <user> WITH password '<password>';

postgres=# GRANT ALL privileges ON DATABASE <dbname> TO <user>;

Выходим из psql:

postgres=# \q

10) Проверяем подключение к базе, выполнив следующую команду:

$ psql -h 127.0.0.1 <dbname> <user>

Если всё нормально, отключаемся.
11) Для того, что бы параметры вступили с силу, необходимо перегрузить PostgreSQL:

# systemctl restart postgresql-9.4

P.S. Некоторые параметры из postgresql.conf можно применять без перезагрузки PostgreSQL. Для этого служат следующие команды:

  • su - postgresl; /usr/bin/pg_ctl reload — используя командный интерпретатор(bash)
  • SELECT pg_reload_conf(); — используя SQL-код


Установка СУБД PostgreSQL 9.4 на ОС Windows

В данном разделе рассматривается инсталляция СУБД PostgreSQL 9.4 на ОС Windows без использования штатного инсталлятора.

Установка СУБД PostgreSQL

Установка СУБД PostgreSQL включает в себя выполнение следующих шагов(выполняются из-под административной учётной записи):

1) Скачиваем инсталляционный пакет rktools.exe. Инсталлируем его в систему.
2) Создаём директорию PostgreSQL на диске C:\, используя терминал командной строки(>mkdir "C:\PostgreSQL") или контекстное меню, вызываемое правой клавишей мыши(Создать—>Папку).
3) Скачиваем архив c бинарными файлами postgresql-9.4.xx-x-windows-x64-binaries.zip c https://www.enterprisedb.com/download-postgresql-binaries. Распаковываем архив в директорию C:\PostgreSQL.
4) Создаём каталог C:\PostgreSQL\data(>mkdir "C:\PostgreSQL\data"), в нём будут лежать базы.
5) Создаём пользователя postgres с паролем postgres. В командной строке(запущена из-под Администратора) вводим:
net user postgres postgres /add
6) Устанавливаем ему неограниченный срок действия пароля:
WMIC UserAccount WHERE Name="postgres" Set PasswordExpires=FALSE
7) Даём право входа в качестве службы утилитой ntrights из Windows Resource Kit Tools(rktools):
ntrights +r SeServiceLogonRight -u postgres
8) Даём все права на каталог C:\PostgreSQL:
cacls C:\PostgreSQL /E /G postgres:F
9) Создаём в C:\PostgreSQL\bin текстовый файл с именем pf, содержащий пароль — postgres:
echo postgres> C:\PostgreSQL\bin\pf
10) Переходим в терминале CMD в директорию C:\PostgreSQL\bin и выполняем команду по инициализации базы:
cd C:\PostgreSQL\bin
initdb -U postgres --pwfile=pf -A md5 -E UTF8 --locale=Russian_Russia -D C:\PostgreSQL\data
11) Регистрируем сервис:
pg_ctl register -N PostgreSQL -U postgres -P postgres -D C:\PostgreSQL\data -S auto
12) Запускаем службу:
sc start PostgreSQL
13) Для удобства прописываем путь к бинарным файлам PostgreSQL в PATH(переменные окружения):
pathman /as c:\PostgreSQL\bin
14) Вносим изменения в системный сервис PostgreSQLcmd ввести services.msc, выбрать службу PostgreSQL, вкладка Восстановление):
Первый сбой: Перезапуск службы
Второй сбой: Перезапуск службы
15) Добавляем в системные переменные окружения ключ PGDATA со значением C:\PostgreSQL\data:
setx PGDATA "C:\PostgreSQL\data"
16) Для настройки кодовой страницы с корректным выводом кириллицы в терминале выполняем следующие команды:
psql -d postgres -U postgres
\! chcp 1251

Создание БД в PostgreSQL в Windows

Для создания БД в PostgreSQL необходимо выполнить следующие шаги(выполняются из-под административной учётной записи):

1) Запускаем интерпретатор командной строки(CMD)
2) Подключаемся к инстансу БД:
psql -d postgres -U postgres
3) Устанавливаем PostgreSQL Adminpack:
CREATE EXTENSION adminpack;
4) Создаём базу данных test и пользователя БД test с паролем test:
CREATE DATABASE test;
CREATE USER test WITH password 'test';
GRANT ALL privileges ON DATABASE test TO test;
5) Проверяем соединение с созданной базой данных:
psql -h 127.0.0.1 -p 5432 -U test -d test