База знаний

Часто задаваемые вопросы, на которые мы уже ответили

PostgreSQL

PostgreSQL — объектно-реляционная система управления базами данных, доступная для работы на различных операционных системах. В данной инструкции мы установим PostgreSQL-сервер на виртуальную машину с ОС семейства Unix.

CentOS/Fedora/RedHat

  • Находим ссылку на RPM-файл нужной версии PostgreSQL для ОС на официальном сайте
  • Подключаем репозиторий:
 yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
  • Устанавливаем PostgreSQL-пакеты вместе с phpPgAdmin:
 yum install postgresql postgresql-server postgresql-contrib
  • Инициализируем базы данных кластера:
 service postgresql initdb
  • Запускаем сервер базы данных:
 service postgresql start

Ubuntu/Debian

  • Выполняем установку пакетов для PostgreSQL:
 apt-get install postgresql postgresql-contrib
  • Перезапускаем сервис базы данных:
 service postgresql restart

Однако в PPA разработчиков PostgreSQL можно найти актуальную версию. Для этого добавьте репозиторий PostgreSQL в системный список источников и добавьте для него ключ:

 sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
 wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

Это позволит при обновлении пакетов получать наиболее актуальные версии.

Установка из исходного кода

Также имеется возможность установить PostegreSQL нужной версии из исходного кода. Для этого достаточно воспользоваться инструкцией, выгрузив перед этим требуемую версию с официального сайта.

Установка phpPgAdmin

Debian/Ubuntu

  • Устанавливаем пакет:
$ apt-get install phppgadmin
  • Разрешаем внешний доступ в файле /etc/apache2/conf-available/phppgadmin.conf, снимая комментирования со строки #Require all granted
  • Чтобы указать конкретный IP-адрес, нужно использовать:

 Require ip X.X.X.X.

где X.X.X.X. — ваш IP-адрес

  • Можно отключить дополнительную защиту при авторизации в файле /etc/phppgadmin/config.inc.php
$conf['extra_login_security']=false
  • Для применения изменений перезагружаем веб-сервер:
service httpd restart

CentOS

  • Устанавливаем репозиторий EPEL:
yum install epel-release
  • Обновляем менеджер пакетов:
$ yum update
  • Устанавливаем phpPgAdmin:
$ yum -y install phpPgAdmin
  • Разрешаем внешний доступ в файле /etc/httpd/conf.d/phpPgAdmin.conf, снимая комментирования со строки #Require all granted
    • Чтобы указать конкретный IP-адрес, нужно использовать Require ip X.X.X.X.

где X.X.X.X. — ваш IP-адрес

  • Можно отключить дополнительную защиту при авторизации в файле /etc/phppgadmin/config.inc.php
  • Перезагружаем веб-сервер:
service httpd restart

Vesta

Помимо установки согласно инструкции для ОС, нужно выполнить дополнительные действия для интеграции с панелью.

  • Включаем поддержку баз данных PgSQL в Vesta:
$ open /usr/local/vesta/conf/vesta.conf and set DB_SYSTEM to 'mysql,pgsql'
  • Регистрируем экземпляр pg в панели управления:
$ v-add-database-host pgsql localhost postgres pgp4sw0rd
  • Выгружаем phpPgAdmin нужной конфигурации:
    • CentOS
      $ wget http://c.vestacp.com/0.9.8/rhel/pga.conf -O /etc/phpPgAdmin/config.inc.php
      $ wget http://c.vestacp.com/0.9.8/rhel/httpd-pga.conf -O /etc/httpd/conf.d/phpPgAdmin.conf
    • Debian
      $ wget http://c.vestacp.com/0.9.8/debian/pg_hba.conf -O /etc/postgresql/*/main/pg_hba.conf
  • Перезагружаем веб-сервер:
$ service httpd restart
  • Устанавливаем пользовательский пароль:
$ su - postgres
$ psql -c "ALTER USER postgres WITH PASSWORD 'pgp4sw0rd'" 
$ exit

Изменение версии

Перед работами обязательно сохранить бэкап, так как параметры версий могут быть несовместимы.

ISPManager

  • Для изменения основной версии PostgreSQL необходимо воспользоваться инструкцией

На операционных системах без установленной панели управления

  • Вначале необходимо установить новую версию PostgreSQL, руководствуясь инструкцией из пункта «Установка PostgreSQL»
  • Если установка происходит из исходного кода, то необходимо производить её в другой каталог, изменив стандартный порт (его значение 5432) с помощью дополнительных ключей --with-pgport=НОМЕР и --prefix=ПРЕФИКС
  • Запустив параллельно оба сервера, старый и новый, с разными портами, можно будет перенести данные с помощью следующей команды
pg_dumpall -p 5432 | psql -d postgres -p 5433

Сброс пароля суперпользователя

  • Первым делом необходимо найти файл pg_hba.conf любой доступной утилитой.
  • Создаем резервную копию данного файла:
cp pg_hba.conf pg_hba.conf-backup
  • Указываем в файле pg_hba.conf следующую строку:
local  all   all   trust
  • Перезагружаем PostgreSQL:
sudo /etc/init.d/postgresql restart

Если у сервер не перезагружается, выдавая следующую ошибку: local connections are not supported by this build , то необходимо заменить строчку, начинающуюся с local на

host  all   all  127.0.0.1/32  trust
  • Теперь  доступно подключение к серверу PostgreSQL под любым пользователем:
psql -U postgres
  • Задаём новый пароль для нужного пользователя:
ALTER USER user_name with password 'password';
  • Восстанавливаем исходный файл pg_hba.conf:
cp pg_hba.conf-backup pg_hba.conf
  • Перезагружаем сервер PostgreSQL:
sudo /etc/init.d/postgresql restart

Настройка PostgreSQL

Найти конфигурационный файл postgresql.conf можно командой:

ps aux | grep postgres | grep -- -D

Внешнее подключение к базе данных

  • В файле postgresql.confизменяем значение listen_addresses
    • «*» для любых адресов или IP для конкретного источника
listen_addresses = '*'
  • В файле pg_hba.conf (лежит в там же, что и postgresql.conf) добавляем строчку с параметрами
    • host - подключаемся через SSL
    • all - разрешаем подключение ко всем базам
    • postgreadmin - имя пользователя, которому разрешаем подключение
    • 0.0.0.0/0 - маска сети с которой можно подключаться
    • md5 - способ шифрования пароля
host  all  postgreadmin  0.0.0.0/0  md5
  • Создаем пользователя postgreadmin в postgresql, через которого будет происходить подключение с помощью . Используемые опции команды createuser:
    • -s - добавить пользователю права суперпользователя
    • -r - разрешить пользователю создавать других пользователей
    • -d - разрешает пользователю создавать базы данных
    • -P - добавить к пользователю пароль
> createuser -s -r -d -P postgreadmin
# ввести пароль
> exit
  • Перезагружаем postqresql:
$ service postgresql restart

Кодировка

Узнать кодировку

  • На стороне сервера:
 psql -l
  • Получить текущую клиентскую кодировку:
> SHOW client_encoding;

Задать кодировку на стороне клиента

  • Клиентская кодировка устанавливается SQL-командой:
> SET CLIENT_ENCODING TO 'value';
  • Также можно использовать стандартный синтаксис SQL SET NAMES
> SET NAMES 'value';

Вернуть кодировку по умолчанию

> RESET client_encoding;
Была ли эта инструкция полезной?