Установка и использование PostgreSQL 9.4 на Debian 8

Реляционные базы данных — камень преткновения во всех приложениях, которые активно работают с данными. Без них не обходится ни один онлайн магазин, ни запуск ракеты. Одним из примеров достойных уважения БД является PostgreSQL. Она построена по основным стандартам SQL, применяет ACID транзакции, поддерживает внешние ключи и виды (views), а так же все еще в активной стадии разработки.

Вы не найдете лучшего кандидата чем Debian 8 (кодовое имя Jessie) если для вашего приложения требуется стабильная среда и легкое администрирование. Эта ОС возможно работает немного медленнее своих конкурентов, но её стабильность легко восполняет этот недостаток. А пара Debian и PostgreSQL будет лучшей средой для приложений, которые активно работают с данными. В этой статье я покажу как установить PostgreSQL на Debian 8 и начать пользоваться преимуществами этой пары.

Прежде чем начать

Сначала обновим репозитории пакетов на Debian:

sudo apt-get update

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

Reading package lists… Done.

Существует несколько пакетов, чье имя начинается с postgresql:

postgresql-9.4: сервер PostgreSQL
postgresql-client-9.4: клиент PostgreSQL
postgresql: "мета пакет" его значение лучше объясненов в Debian Handbook и в Debian New Maintainers' Guide

Установим postgresql-9.4:

sudo apt-get install postgresql-9.4 postgresql-client-9.4

При вопросе нажмите Y для продолжения установки. В результате вы получите все нужные пакеты.

Проверим установку

Для того, чтобы проверить, что всё установилось как положено, выполним следующую команду:

ps -ef | grep postgre

Примерный вывод:

postgres 32164     1  0 21:58 ?        00:00:00 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/   postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf
postgres 32166 32164  0 21:58 ?        00:00:00 postgres: checkpointer process
postgres 32167 32164  0 21:58 ?        00:00:00 postgres: writer process
postgres 32168 32164  0 21:58 ?        00:00:00 postgres: wal writer process
postgres 32169 32164  0 21:58 ?        00:00:00 postgres: autovacuum launcher process
postgres 32170 32164  0 21:58 ?        00:00:00 postgres: stats collector process

Отлично! PostgreSQL установлен и запущен.

Доступ к БД PostgreSQL

По-умолчанию PostgreSQL создает на Debian пользователя и БД по имени postgres. Для начала вам потребуется войти под этим пользователем, выполнив следующую команду от имени root (sudo не сработает):

su - postgres

Теперь следует запустить консоль PostgreSQL:

psql

Вот и все! Вы вошли в PostgreSQL и должны увидеть следующее:

psql (9.4.2)
Type "help" for help.
postgres=#

Для выхода из консоли введите \q.

Создание новых ролей

По-умолчанию PostgreSQL применяет идею ролей для помощи в аутентификации и авторизации. По идеи, подход очень схож с аккаунтами на Unix системах, но PostgreSQL не отличает пользователей и группы, а использует более гибкий подход — роли. При установке PostgreSQL использует аутентификацию ident, то есть PostgreSQL сопоставляет роли с существующими аккаунтами в Unix/Linux системе. Если роль существует в PostgreSQL, то человек может зайти под ней, введя свои данные из ОС.

Во время установки создается аккаунт postgres, который ассоциируется в ролью по-умолчанию для Postgres. Для создания дополнительных ролей следует обратиться к команде createuser. Помните, что команда должна выполняться от имени postgres, не в терминале PostgreSQL консоли:

createuser --interactive

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

man createuser

Создание новой базы данных

PostgreSQL при установке создает роли, соответствующие аккаунтам в вашей системе (более подробную информацию вы найдете на postgresql.org). Так же он полагает, что для каждой роли будет создана БД. То есть, если я создам пользователя по имени test1, то при подключении к БД под этой ролью вы будете подключаться к БД test1.

Для создания соответствующей БД выполните следующую команду от пользователя postgres:

createdb test1

Будет создана новая БД test1.

Подключение к PostgreSQL под новым пользователем

Допустим у вас есть аккаунт Linux под именем test1, ролью под таким же именем и соответствующая БД. Перейдем под нового пользователя:

su - test1

Затем подключаемся под именем test1 к БД test1:

psql

Вы должны увидеть приглашение к вводу от PostgreSQL под именем test1.

Создание и удаление таблиц

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

CREATE TABLE table_name (
   column_name1 col_type (field_length) column_constraints,
   column_name2 col_type (field_length),
   column_name3 col_type (field_length)
);

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

С процессом создания таблиц вы можете познакомиться в статье Как создавать, удалять и изменять таблицы PostgreSQL на облачном сервере.

Для наших целей достаточно следующей таблицы:

CREATE TABLE playground (
   equip_id serial PRIMARY KEY,
   type varchar (50) NOT NULL,
   color varchar (25) NOT NULL,
   location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
   install_date date
);

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

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

Затем мы определяем поля type и color, оба они не могут иметь пустое значение. После чего мы задаем поле location, которое может принимать одно из восьми возможных значений. Последнее поле — дата добавления оборудования в БД. Чтобы вывести все таблицы в БД, выполните \dt в консоли:

            List of relations
Schema |    Name    | Type  |  Owner
--------+------------+-------+----------
public | playground | table | postgres

Как видите, мы создали таблицу playground.

Добавление, запрос и удаление данных из таблицы

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

INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2014-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2010-08-16');

Наверняка вы обратили внимание на несколько моментов. Первый — имена полей должны быть указаны без кавычек, что не скажешь о значениях этих полей. Второй момент — мы не указываем значение для поля equip_id. Так как оно генерируется автоматически. Теперь просмотрим результат команды:

SELECT * FROM playground;

Пример вывода:

equip_id | type  | color  | location  | install_date
----------+-------+--------+-----------+--------------
       1 | slide | blue   | south     | 2014-04-28
       2 | swing | yellow | northwest | 2010-08-16

Мы видим, что поле equip_id заполнилось автоматически, а все остальные поля соответствуют тем данным, которые мы вводили ранее. Если горка сломается, то мы просто удалим её из этой таблицы:

DELETE FROM playground WHERE type = 'slide';

Снова прочтём данные из таблицы:

SELECT * FROM playground;

Как видите, запись удалена:

equip_id | type  | color | location | install_date
----------+-------+-------+----------+--------------
       1 | slide | blue  | south    | 2014-04-28

Полезные команды

Приведу список часто используемых команд, чтобы вы могли иметь большее представление о БД:

  • \?: Выводит полный список команд psql.
  • \h: Вывод помощи по отдельным командам.
  • \q: Выход из psql и возвратв терминал Linux.
  • \d: Вывод доступных таблиц, видом и функций в текущей БД.
  • \du: Вывод доступных ролей.
  • \dp: Вывод списка доступных прав.
  • \dt: Список таблиц
  • \l: Список БД
  • \c: Подключение к другой БД. Следует указат имя БД.
  • \password: Изменение пароля пользователя, указанного как аргумент команды.
  • \conninfo: Информация о текущей БД и подключении.

Этого набора должно хватить для ориентировании в PostgreSQL.

Заключение

В итоге вы должны получить полностью рабочую PostregSQL на Debian системе. Поздравляю! А теперь взглянем на набор документации:

  • Руководство по PostgreSQL
  • Установка пакет postgresql-doc: sudo apt-get install postgresql-doc
  • README файл в /usr/share/doc/postgresql-doc-9.4/tutorial/README

Полный список команд PostgreSQL

Для более полного понимания ролей и прав: