Установка и использование PostgreSQL на Ubuntu 18.04

Введение

Системы управления реляционными базами данных являются ключевым компонентом многих веб-сайтов и приложений. Они предоставляют структурированный способ хранения, организации и доступа к информации.

PostgreSQL, или Postgres, — это система управления реляционными базами данных, которая предоставляет собой реализацию языка запросов SQL. Она является популярным решением для множества небольших и крупных проектов и имеет ряд преимущество, включая соответствие стандартам и множество передовых функций, таких как надежность и параллельность операций без блокировки при чтении.

Настоящее руководство посвящено установке Postgres на VPS сервер с Ubuntu 18.04, а также содержит базовые рекомендации по администрированию баз данных.

Предварительные требования

Для выполнения данного руководства вам потребуется один сервер Ubuntu 18.04 с конфигурацией, выполненной согласно руководству Начальная настройка сервера на Ubuntu 18.04. После выполнения всех предварительных действий ваш сервер должен иметь пользователя без прав root с разрешениями sudo и базовый брандмауэр.

Шаг 1 — Установка PostgreSQL

Используемые по умолчанию репозитории Ubuntu содержат пакеты Postgres, поэтому вы можете устанавливать их с помощью системы управления пакетами apt.

Поскольку это первый запуск apt в этой сессии, необходимо обновить локальный индекс пакетов. После этого установите пакет Postgres вместе с пакетом -contrib, который содержит дополнительные утилиты и функциональные возможности:

  • sudo apt update
  • sudo apt install postgresql postgresql-contrib

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

Шаг 2 — Использование ролей и баз данных в PostgreSQL

По умолчанию Postgres использует концепцию “ролей” для выполнения аутентификации и авторизации. В некоторых аспектах они напоминают обычные учетные записи в Unix, однако Postgres не делает различий между пользователями и группами и предпочитает использовать более гибкий термин “роль”.

После установки Postgres настроена на использование аутентификации ident, что значит, что выполняется привязка ролей Postgres с соответствующей системной учетной записью Unix/Linux. Если роль существует внутри Postgres, пользователь Unix/Linux с тем же именем может выполнить вход в качестве этой роли.

В ходе установки была создана учетную запись пользователя postgres, которая связана с используемой по умолчанию ролью Postgres. Чтобы использовать Postgres, вы можете войти в эту учетную запись.

Существует несколько способов использования этой учетной записи для доступа к Postgres.

Переключение на учетную запись postgres

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

  • sudo -i -u postgres

Теперь вы можете немедленно получить доступ к командной строке Postgres с помощью следующей команды:

  • psql

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

Закройте командную строку PostgreSQL с помощью следующей команды:

  • q

В результате вы вернетесь в командную строку postgres в Linux.

Доступ к командной строке Postgres без переключения учетных записей

Также вы можете запустить необходимую вам команду с учетной записью postgres напрямую с помощью sudo.

Например, в последнем примере от вас требовалось перейти в командную строку Postgres с помощью переключения на пользователя postgres и последующего запуска psql, чтобы открыть командную строку Postgres. Вы можете сделать это в один прием с помощью отдельной команды psql, используя пользователя postgres с sudo следующим образом:

  • sudo -u postgres psql

Это позволит выполнить вход в Postgres без необходимости использования промежуточной командной строки bash.

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

  • q

Многие варианты использования требуют использования сразу нескольких ролей Postgres. Ниже вы узнаете, как выполнить настройку в таких случаях.

Шаг 3 — Создание новой роли

К настоящему моменту у вас есть только роль postgres, настроенная внутри базы данных. Вы можете создавать новые роли из командной строки с командой createrole. Флаг --interactive будет запрашивать имя новой роли, а также попросит указать, будут ли у этой роли права superuser.

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

  • createuser --interactive

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

  • sudo -u postgres createuser --interactive

Скрипт будет предлагать варианты на выбор и, исходя из ваших ответов, выполнять нужные команды Postgres для создания пользователя в соответствии с вашими спецификациями.

OutputEnter name of role to add: sammy Shall the new role be a superuser? (y/n) y 

Вы можете получить дополнительный контроль с помощью дополнительных флагов. Посмотрите возможные варианты на странице man:

  • man createuser

В результате этих действий у вас будет новый пользователь, но вам предстоит еще добавить базы данных. В следующем разделе описан этот процесс.

Шаг 4 — Создание новой базы данных

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

Это означает, что если созданный вами в последнем разделе пользователь будет иметь имя sammy, эта роль попытается подключиться к базе данных, которая также называется «sammy» по умолчанию. Вы можете создать соответствующую базу данных с помощью команды createdb.

Если вы используете учетную запись postgres, необходимо ввести следующее:

  • createdb sammy

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

  • sudo -u postgres createdb sammy

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

Шаг 5 — Открытие командной строки Postgres с новой ролью

Чтобы выполнить аутентификацию с помощью ident, вам потребуется пользователь Linux с тем же именем, что и имя роли и базы данных в Postgres.

Если у вас нет соответствующего пользователя Linux, то вы можете создать его с помощью команды adduser. Вы должны воспользоваться учетной записи без прав root с привилегиями sudo (т.е. не выполняя вход в качестве пользователя postgres):

  • sudo adduser sammy

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

  • sudo -i -u sammy
  • psql

Либо же вы можете сделать следующее:

  • sudo -u sammy psql

Эта команда позволит выполнить вход автоматически, полагая, что все компоненты были настроены должным образом.

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

  • psql -d postgres

После входа вы можете проверить данные о текущем подключении:

  • conninfo
OutputYou are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432". 

Это полезно, если вы подключены к нестандартным базам данных или используете нестандартных пользователей.

Шаг 6 — Создание и удаление таблиц

Теперь, когда вы уже знаете, как подключиться к системе управления базами данных PostgreSQL, можно переходить к знакомству с основными задачами по управлению, которые решает Postgres.

Во-первых, создайте таблицу для хранения данных. Например, таблицу, где описано оборудование для детских площадок.

Базовый синтаксис этой команды выглядит следующим образом:

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

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

Вы можете узнать больше о том, как создавать и управлять таблицами в Postgres, здесь.

Чтобы продемонстрировать процесс, создайте простую таблицу:

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 ); 

Эти команды создадут таблицу с описью оборудования для установки на игровых площадках. Она начинается с идентификатора оборудования, который имеет тип serial. Это тип данных представляет собой целое число с автоматическим инкрементированием. Вы также указали для этого столбца ограничение в виде primary key, что означает, что значения должны быть уникальными и не равны null.

Для двух из столбцов (equip_id и install_date) команды не указали длину поля. Это объясняется тем, что некоторые типы столбцов не требуют указания длины, поскольку длина подразумевается в зависимости от типа значения.

Следующие две команды создают столбцы type и color оборудования соответственно, каждый из которых не может быть пустым. После этого команда создает столбец location и ограничение, требующее, чтобы значение было одним из восьми возможных вариантов. Последняя команда создает столбец даты, которая указывает дату установки оборудования.

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

  • d
Output                  List of relations  Schema |          Name           |   Type   | Owner --------+-------------------------+----------+-------  public | playground              | table    | sammy  public | playground_equip_id_seq | sequence | sammy (2 rows) 

Ваша таблица игрового оборудования готова, но здесь есть что-то под названием playground_equip_id_seq с типом данных sequence. Это представление типа serial, который присвоен столбцу equip_id. Оно отслеживает следующий номер последовательности и создается автоматически для столбцов данного типа.

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

  • dt
Output          List of relations  Schema |    Name    | Type  | Owner --------+------------+-------+-------  public | playground | table | sammy (1 row) 

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

Теперь, когда у вас есть таблица, вы можете ввести в нее данные .

В качестве примера добавьте строги swing (качели) и slide (горка), вызвав таблицу, куда вы хотите добавить данные, указав столбцы и предоставив данные для каждого столбца:

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

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

Еще один момент, который необходимо учитывать, состоит в том, что вы не должны указывать значения для столбца equip_id. Это объясняется тем, что они автоматически генерируются всякий раз, когда в таблице создается новая строка.

Получите добавленную вами информацию, введя следующую команду:

  • SELECT * FROM playground;
Output equip_id | type  | color  | location  | install_date ----------+-------+--------+-----------+--------------         1 | slide | blue   | south     | 2017-04-28         2 | swing | yellow | northwest | 2018-08-16 (2 rows) 

Вы можете убедиться, что столбец equip_id уже заполнен успешно, а все другие данные были организованы корректно.

Если же строка slide в таблице разрывается, вы можете удалить строку из таблицы, использовав следующую команду:

  • DELETE FROM playground WHERE type = 'slide';

Запросите таблицу еще раз:

  • SELECT * FROM playground;
Output equip_id | type  | color  | location  | install_date ----------+-------+--------+-----------+--------------         2 | swing | yellow | northwest | 2018-08-16 (1 row) 

Вы видите, что ваш строка slide уже не является частью таблицы.

Шаг 8 — Добавление и удаление столбцов таблицы

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

  • ALTER TABLE playground ADD last_maint date;

Если вы снова просмотрите данные таблицы, то увидите, что новый столбец был добавлен (но не было добавлено данных):

  • SELECT * FROM playground;
Output equip_id | type  | color  | location  | install_date | last_maint ----------+-------+--------+-----------+--------------+------------         2 | swing | yellow | northwest | 2018-08-16   | (1 row) 

Удаление столбца является таким же простым. Если вы обнаружите, что ваша команда использует отдельный инструмент для отслеживания истории обслуживания, то можете удалить столбец, введя следующую команду:

  • ALTER TABLE playground DROP last_maint;

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

Шаг 9 — Обновление данных в таблице

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

Вы можете обновить значения существующей записи, запросив нужную вам запись и установите для столбца значение, которое вы хотите использовать. Вы можете запросить записи «swing» (это будет соответствовать каждой записи swing в таблице) и изменить цвет на «red». Это может быть полезным, если вы дали задание на покраску качелей:

  • UPDATE playground SET color = 'red' WHERE type = 'swing';

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

  • SELECT * FROM playground;
Output equip_id | type  | color | location  | install_date ----------+-------+-------+-----------+--------------         2 | swing | red   | northwest | 2010-08-16 (1 row) 

Как видите, ваша горка теперь имеет красный цвет.

Заключение

Вы настроили PostgreSQL на сервере Ubuntu 18.04. Однако вам еще очень многое предстоит узнать о Postgres. Ниже вы найдете несколько руководств по использованию Postgres:

  • Сравнение систем управления реляционными базами данных
  • Как создавать таблицы Postgres и управлять ими
  • Подробное знакомство с управлением ролями и разрешениями
  • Создание запросов Postgres с помощью команды Select
  • Обеспечение безопасности PostgreSQL
  • Создание резервной версии базы данных Postgres