Установка и использование PostgreSQL 9.4 в Debian 8
Debian | Комментировать запись
Реляционные базы данных – это основа организации данных для любых целей. Одной из самых популярных реляционных СУБД является PostgreSQL.
Система управления базами данных PostgreSQL поддерживает большинство стандартов SQL, ACID-транзакцию, сторонние ключи и виды. Кроме того, данная СУБД все еще находится в активной разработке.
Данное руководство поможет установить PostgreSQL на сервер Debian 8 и начать работу с данными.
Требования
- Предварительно настроенный сервер Debian 8; о начальной настройке сервера можно прочитать здесь.
- Не-root пользователь с доступом к sudo.
Установка PostgreSQL
Прежде чем приступить к установке PostgreSQL, нужно обновить список пакетов системы:
sudo apt-get update
Reading package lists... Done.
За запуск postgresql отвечают следующие пакеты:
- postgresql-9.4: пакет сервера PostgreSQL.
- postgresql-client-9.4: клиент PostgreSQL.
- postgresql: метапакет; подробнее об этом – здесь.
Чтобы установить пакет postgresql-9.4:
sudo apt-get install postgresql-9.4 postgresql-client-9.4
Для подтверждения нажмите Y, после чего пакеты будут загружены и установлены.
Проверка установки
Чтобы убедиться в том, что программа установлена успешно, используйте команду ps:
# 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
В системе Debian PostgreSQL по умолчанию устанавливается с учётной записью пользователя postgres. Чтобы подключиться к БД, нужно перейти в сессию пользователя postgres из сессии root (команда не работает с sudo):
su - postgres
Теперь сессия postgres является текущей. Чтобы запустить PostgreSQL, введите:
psql
Это откроет консоль PostgreSQL; на экране появится:
psql (9.4.2)
Type "help" for help.
postgres=#
Чтобы закрыть консоль psql, введите:
\q
Создание ролей
По умолчанию Postgres использует понятие ролей. В целом роли очень похожи на обычные учётные записи Unix. Но поскольку PostgreSQL не различает пользователей и группы, роль является некоторым синтезом этих двух понятий.
По умолчанию PostgreSQL использует модель аутентификации ident, которая связывает роли PostgreSQL со стандартными пользователями Unix/Linux. Открыть существующую роль можно при помощи связанной с ней учётной записи Linux.
Итак, во время установки был создан Linux-пользователь postgres, который связан со стандартной ролью Postgres.
Для создания ролей используется команда createuser. Эту команду нужно выполнить в сессии пользователя postgres, не в консоли PostgreSQL:
createuser --interactive
По сути это интерактивный скрипт оболочки, вызывающий команды PostgreSQL, необходимые для создания пользователя. Скрипт задаст несколько вопросов: имя роли, привилегии (superuser или нет), право роли на создание новых БД и новых ролей.
Более подробную информацию можно найти в справочнике:
man createuser
Создание базы данных PostgreSQL
PostgreSQL поставляется со стандартными ролями, которые связываются с системными пользователями.
Примечание: Более подробную информацию можно найти на сайте postgresql.org.
Кроме того, по умолчанию подразумевается, что роль будет подключаться к одноименной БД (например, роль test1 будет пытаться подключиться к базе данных test1).
Чтобы создать БД, запустите команду в сессии пользователя postgres:
createdb test1
Эта команда создаст тестовую БД по имени test1.
Подключение к PostgreSQL при помощи нового пользователя
Предположим, у вас есть пользователь Linux по имени test1, одноименная роль PostgreSQL и одноименная БД.
Чтобы сменить системного пользователя и перейти в сессию test1, введите:
su - test1
Чтобы подключиться к БД test1 при помощи одноименной роли PostgreSQL, используйте команду:
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, который указывает порядковый номер записи. Этот столбец был ограничен по PRIMARY KEY, что значит, что значения должны быть уникальными и не должны быть нулём.
Длина поля остальных двух столбцов не ограничена; дело в том, что задавать длину некоторых столбцов необязательно, так как длина задаётся типом данных.
Столбцы type и color не могут быть пустыми. Столбец location ограничен восемью возможными значениями. Столбец date указывает дату установки оборудования.
Чтобы просмотреть таблицу, используйте команду \dt командной строки psql.
List of relations
Schema | Name | Type | Owner
-------+------------+-------+----------
public | playground | table | postgres
Добавление, запрос и удаление данных
Теперь попробуйте добавить в таблицу данные.
Для этого нужно вызвать целевую таблицу, назвать столбцы и ввести данные, которые нужно добавить. К примеру, чтобы добавить горку (slide) и качели (swing):
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 был заполнен автоматически. Чтобы удалить значение (к примеру, slide), используйте команду:
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: справка по командам SQL; чтобы получить справку о какой-либо конкретной команде, просто используйте её в качестве префикса.
- \q: закрывает консоль psql и возвращает в строку Linux.
- \d: список доступных таблиц, видов.
- \du: список доступных ролей.
- \dp: список привилегий доступа.
- \dt: список таблиц.
- \l: список баз данных.
- \c: подключение к базе данных; после команды нужно указать имя целевой БД.
- \password: изменение пароля для текущего пользователя.
- \conninfo: информация о текущей БД и подключении.
Теперь система управления базами данных PostgreSQL установлена на сервер Debian и готова к использованию.
Полезные ссылки и сведения:
- Руководства PostgreSQL.
- Файл README находится в /usr/share/doc/postgresql-doc-9.4/tutorial/README
- Список команд SQL.
- Использование ролей и управление доступом в PostgreSQL.