Как создать базу данных в postgresql


Создать базу данных в postgresql можно через какой-либо веб-интерфейс, установленный на сервере (например, pgAdmin) или в консоли.

Второй способ более универсален, им можно пользоваться для любого Linux сервера, рассмотрим этот способ.



Создать базу данных в Postgresql в консоли


Прежде всего требуется подключиться к серверу по SSH.



Далее подключиться к базе от имени пользователя postgres (по умолчанию существует только он)

sudo -u postgres psql

could not change directory to «/root»
psql (9.2.24)
Type «help» for help.



Если возникла ошибка, подобная приведенной выше — нужно перейти в любой каталог, в который  postgres имеет доступ.


cd /tmp

sudo -u postgres psql


Чтобы попасть в базу без sudo и смены каталога можно выполнить 2 команды от имени пользователя root:


su - postgres

psql



Пример авторизации и вывод списка баз приведен на скриншоте:

Создать базу данных в Postgresql в консоли


Оказавшись к консоли можно создать базу данных

postgres=# CREATE DATABASE app;

CREATE DATABASE



Затем пользователя, которому присвоить пароль.

postgres=# CREATE USER appadmin WITH PASSWORD 'jkfdk8H0Indgshy6hk';

CREATE ROLE



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



Например, полный доступ:

postgres=# GRANT ALL PRIVILEGES ON DATABASE app to appadmin;

GRANT



Также требуется скорректировать значения в одном из конфигурационных файлов

mcedit /var/lib/pgsql/data/pg_hba.conf



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


На практике это обычно неудобно и требуется подключение с реквизитами специально созданного пользователя, по установленному паролю.



В файле потребуется заменить в двух строках, начинающихся с host тип аутентификации с ident на md5. Это последнее значение в каждой строке.


# 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 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 ident
host all all ::1/128 md5



Для вступления в силу изменений нужно перезапустить сервис

systemctl restart postgresql



Установка postgresql на Centos и Debian


Если пакета postgresql на сервере еще нет, его нужно сначала установить.

postgresql есть в репозиториях всех популярных дистрибутивов.



Centos 7


yum install epel-release

yum install postgresql-server postgresql-devel postgresql-contrib



Debian 9+


apt-get update

apt-get install postgresql



После установки на CentOS требуется выполнить начальную настройку. Скрипт подобен mysql_secure_instalation в MySQL.

postgresql-setup initdb

Initializing database … OK



Для Debian / Ubuntu сервис запускается автоматически, для Centos его нужно стартовать и добавить в автозагрузку

systemctl start postgresql

systemctl enable postgresql




Читайте про подключение к базе данных с реквизитами созданного пользователя.

Если сайт, работающий с Postgresql переносится на другой сервер — требуется создать, а потом развернуть на другой машине дамп базы.

Сказать спасибо