PostgreSQL

Материал из Etersoft wiki
Перейти к навигацииПерейти к поиску

Postgre@Etersoft

Postgre@Etersoft — это специальные сборки свободной реляционной СУБД PostgreSQL, в которые включены все изменения, необходимые для работы SELTA@Etersoft и серверов 1С:Предприятие 8.1 и 1С:Предприятие 8.2.

Об изменениях по отношению к оригинальной версии PostgreSQL смотрите в разделе Изменения, внесённые в PostgreSQL.

Вы можете приобрести поддержку Postgre@Etersoft на сайте продаж.

Поддерживаемые платформы

Платформы, для которых собран Postgre@Etersoft, можно увидеть на странице продукта при заказе сборки SELTA@Etersoft или Postgre@Etersoft. Обратите внимание, что в зависимости от выбора платформы, Вам будет предоставлена полная, либо базовая поддержка на вашей системе.


Приоритетными при тестировании и сборке новых версий являются платформы ALT Linux Server, Ubuntu Server, CentOS. Мы рекомендуем ставить PostgreSQL на них.

Пакеты доступны как в 32-битных, так и в 64-битных версиях.


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

Инструкция приводится на примере ALT Linux 5.0. Для других систем могут быть свои особенности.

  • Установка происходит под root
$ su -
Password:
  • Готовим место под пакеты
# cd ~
# mkdir pg
# cd pg
  • Скачиваем пакеты, проверяем, что всё скачалось

Стабильные пакеты для различных систем можно получить здесь:

# wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/ALTLinux/5.0/*.rpm

.....

# ls 
postgresql-8.3eter-8.3.8-alt1.M50.2.1.i586.rpm
postgresql-8.3eter-contrib-8.3.8-alt1.M50.2.1.i586.rpm
postgresql-8.3eter-server-8.3.8-alt1.M50.2.1.i586.rpm

Устанавливаем пакеты

Для работы требуется установить следующие пакеты PostgreSQL:

  • postgresql-8.3eter
  • postgresql-8.3eter-contrib
  • postgresql-8.3-eter-server
# rpm -ihv *.rpm
Preparing... ##################################################
postgresql-8.3eter ##################################################
postgresql-8.3eter-contrib ##################################################
postgresql-8.3eter-server ##################################################
Running /usr/lib/rpm/posttrans-filetriggers

Удаляем rpm, больше они не понадобятся:

# rm *.rpm
rm: remove regular file `postgresql-8.3eter-8.3.8-alt1.M50.2.1.i586.rpm'? y
rm: remove regular file `postgresql-8.3eter-contrib-8.3.8-alt1.M50.2.1.i586.rpm'? y
rm: remove regular file `postgresql-8.3eter-server-8.3.8-alt1.M50.2.1.i586.rpm'? y

Запускаем

Запускаем, при первом запуске инициализируемый postgres -- создается окружение баз данных

# /etc/init.d/postgresql start
Initializing database: [ DONE ]
Starting postgresql service: [ DONE ]

если этого не произошло, смотрите ошибки в логе запуска /var/lib/pgsql/pgstartup.log.



Возможные ошибки

Несоответствие SHMMAX и SHMALL

# /etc/init.d/postgresql start
The current value of SHMMAX is too low for postgresql to run.
Please edit /etc/sysctl.conf and set this value to at least 134217728:
kernel.shmmax = 134217728

Значение SHMMAX (максимальный размер сегмента разделяемой памяти в байтах) слишком мало для запуска PostgreSQL.

Решение: Установите значение shmmax на указанное (или больше, если требуется согласно /var/lib/pgsql/pgstartup.log), внеся строку

kernel.shmmax=134217728

в /etc/sysctl.conf

Возможно придётся добавить ещё

kernel.shmall=134217728

После чего для вступления изменений в силу выполнить

sysctl -p /etc/sysctl.conf.

Занятый порт

Одна из проблем, из-за которой может не запускаться PostgreSQL, может быть вызвана невозможностью использования выбранного порта.

PostgreSQL не смог запуститься:

#/etc/init.d/postgresql start
Starting postgresql service: [ FAILED ]

И в /var/lib/pgsql/pgstartup.log

# cat /var/lib/pgsql/pgstartup.log
ПОДСКАЗКА: Is another postmaster already running on port 80? If not, wait a few seconds and retry.
LOG: не получилось создать сокет IPv6: Семейство адресов не поддерживается протоколом
WARNING: could not create listen socket for "*"
FATAL: could not create any TCP/IP sockets

Это означает, что скорее всего порт, используемый PostgreSQL занят. По умолчанию это 5432.

Проверяем это, смотрим, кто использует порт

# netstat -plan | grep 5432


Пути решения:

  1. Решить проблему с программой, которая использует порт. Изменить её порт.
  2. Изменить порт PostgreSQL.

Для этого нужно указать номер порта в файле /etc/sysconfig/postgresql, добавив строку

PGPORT=55432

или любой другой удобный номер порта


Подробности по установке смотрите здесь:

Настройка PostgreSQL

В наших сборках PostgreSQL уже заложены необходимые минимальные настройки для работы СУБД с SELTA@Etersoft.

Инициализация базы производится автоматически при первом запуске PostgreSQL, файлы баз данных будут храниться в каталоге /var/lib/pgsql/data, владелец каталога и процессов PostgreSQL устанавливается пользователь postgres, который создается автоматически, при установке пакетов.


  • Для того, чтобы иметь возможность подключиться к нему, мы должны задать пароль главному пользователю СУБД - владельцу всех баз данных - postgres, это выполняется это следующим образом:

Сначала в файле конфигурации /var/lib/pgsql/data/pg_hba.conf изменяем строчку:

local           all          all                ident sameuser

на строчку:

local           all          all                trust


  • Сохраним изменения и перезапустим PostgreSQL, для вступлений изменений настроек, командой
# /etc/init.d/postgresql restart
Stopping postgresql service: [ DONE ]
Starting postgresql service: [ DONE ]


  • Зададим пароль для работы с PostgreSQL.

Для этого требуется выполнить запрос.

$ psql -U postgres -d template1 -c "ALTER USER postgres PASSWORD 'новый пароль'"

Проверяем:

$ psql -U postgres -W 
Password for user postgres: 
Welcome to psql 8.3.8-eter1, the PostgreSQL interactive terminal.


  • Если вы хотите запретить локальный доверенный доступ (без пароля), поменяйте обратно настройки. Строчку "local all all trust" следует заменить обратно на "local all all ident sameuser" и перезапустить сервис постгри, чтобы отключить возможность подключения локальным пользователем без пароля.


Консоль SQL запросов PostgreSQL

В состав PostgreSQL входит утилита командной строки psql. Для её запуска на сервере, на котором работает PostgreSQL нужно выполнить следующую команду:

$ psql -U postgres

C помощью утилиты psql можно выполнять SQL запросы и просматривать результаты их выполнения, например:


$ psql -U postgres
# select upper('q');
# \quit


Проверка работоспособности

  • Проверяем статус сервера:
#/etc/init.d/postgresql status
pg_ctl: выполняется сервер (PID: 31805)
/usr/bin/postgres "-p" "5432" "-D" "/var/lib/pgsql/data"

Сервер запущен. Если, это не так, запустите сервер, так, как было описано выше.


  • Проверяем, использование порта
# netstat -plan | grep 5432
tcp        0      0 0.0.0.0:5432                0.0.0.0:*                   LISTEN      31805/postmaster
unix  2      [ ACC ]     STREAM     LISTENING     311449 31805/postmaster    /tmp/.s.PGSQL.5432

Требующейся нам порт используется postmaster, как и должно быть.


  • Смотрим установленную версию
# psql -U postgres -c "SELECT version()"

                                                           version 

----------------------------------------------------------------------------------------------

--------------------------------

 PostgreSQL 8.3.8-eter1 on i586-alt-linux-gnu, compiled by GCC i586-alt-linux-gcc (GCC) 4.3.2 

20081105 (ALT Linux 4.3.2-alt9)

(1 row)


После проверки работоспособности желательно провести оптимизацию настроек PostgreSQL в соответствии с возможностями вашего сервера: Оптимизация настроек PostgreSQL.

Создание дампа и загрузка дампа

Дамп должен делаться так:

  1. pg_dump -F p $NAMEDATABASE > $FILEBACKUP -U $USERDATABASE

Восстанавливать из него нужно так:

  1. psql -o $FILELOG -d $NAMEDATABASE -f $FILEBACKUP -U $USERDATABASE

Ссылки