Базы данных

Создание базы данных в PostgreSQL под Ubuntu

PostgreSQL — свободная объектно-реляционная система управления базами данных (СУБД). Существует в реализациях для множества UNIX-подобных платформ, включая AIX, различные BSD-системы, HP-UX, IRIX, Linux, macOS, Solaris/OpenSolaris, Tru64, QNX, а также для Microsoft Windows.

В инструкции предполагается, что сама СУБД уже установлена в Ubuntu. Рассмотрим создание рабочей базы данных.

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

sudo su - postgres

Далее выполним команду psql: 

psql

Следующая команда добавит в PostgreSQL пользователя admin (на каждом сервере должны быть свои имена пользователей и баз данных): 

CREATE USER admin WITH PASSWORD 'masterkey';

где  'masterkey' — пароль пользователя admin.

Для создания базы данных, например admindb, необходимо выполнить команду:

CREATE DATABASE admindb;

Но в этом случае будет ошибка "кодировка UTF-8 не соответствует локали en_US; выбранная настройка LC_CTYPE требует кодировки LATIN1", так как шаблон, из которого создается база данных, основан на кодировке LATIN1, а нам нужна UTF-8. Выходим полностью из базы данных и пользователя "postgres":

\q
exit

Для исправления данной ошибки выполним следующие действия. Создадим файл командой:

nano /etc/profile.d/lang.sh

Добавим в него следующие содержимое:

export LANGUAGE="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"

Зайдем снова в базу данных postgres:

sudo su - postgres
psql

Далее выполняем команды по очереди:

update pg_database set datistemplate=false where datname='template1';

drop database Template1;

create database template1 with owner=postgres encoding='UTF-8'lc_collate='en_US.utf8' lc_ctype='en_US.utf8' template template0;

update pg_database set datistemplate=true where datname='template1';

Создадим базу данных командой (английская локализация):

CREATE DATABASE admindb WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.utf8' CONNECTION LIMIT = -1 TEMPLATE template1;

Или создадим базу данных командой (русская локализация):

CREATE DATABASE admindb WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'ru_RU.UTF-8' CONNECTION LIMIT = -1 TEMPLATE template1;

Проверим вывод информации о базе данных командой:

\l

База данных должна быть создана в кодировке "UTF-8".

Теперь необходимо дать пользователю admin все права на базу данных. Для этого выполним команду:

GRANT ALL PRIVILEGES ON DATABASE admindb to admin;

Источники: ruvdsstackoverflow