Как установить и использовать PostgreSQL на Ubuntu 20.04

Введение

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

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

Это руководство демонстрирует, как установить Postgres на сервере Ubuntu 20.04. Оно также содержит инструкции по общему администрированию баз данных.

1-Нажмите, чтобы развернуть базу данных PostgreSQL, используя Управляемые базы данных DigitalOcean. Позвольте DigitalOcean заниматься масштабированием, обслуживанием и обновлениями вашей базы данных.

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

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

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

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

Если вы еще этого не сделали, обновите локальный индекс пакетов вашего сервера:

  1. sudo apt update

Затем установите пакет Postgres вместе с пакетом -contrib, который добавляет некоторые дополнительные утилиты и функциональность:

  1. sudo apt install postgresql postgresql-contrib

Убедитесь, что сервер запущен с помощью команды systemctl start:

  1. sudo systemctl start postgresql.service

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

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

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

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

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

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

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

Переключитесь на учетную запись postgres на своем сервере, набрав:

  1. sudo -i -u postgres

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

  1. psql

Оттуда вы свободно можете взаимодействовать с системой управления базами данных по мере необходимости.

Выйдите из приглашения PostgreSQL, набрав:

  1. \q

Это вернет вас к командной строке Linux postgres.

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

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

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

  1. sudo -u postgres psql

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

Опять же, вы можете выйти из интерактивной сессии Postgres, набрав:

  1. \q

Во многих случаях требуется более одной роли Postgres. Читайте дальше, чтобы узнать, как их настроить.

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

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

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

  1. createuser --interactive

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

  1. sudo -u postgres createuser --interactive

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

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

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

  1. man createuser

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

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

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

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

Если вы вошли в систему под учетной записью postgres, вы бы ввели что-то вроде:

  1. createdb sammy

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

  1. sudo -u postgres createdb sammy

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

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

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

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

  1. sudo adduser sammy

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

  1. sudo -i -u sammy
  2. psql

Либо вы можете сделать это встроенно:

  1. sudo -u sammy psql

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

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

  1. psql -d postgres

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

  1. \conninfo
Output
You 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 здесь.

Для демонстрации создайте следующую таблицу:

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

Эта команда создаст таблицу, в которой будут отражаться данные об игровом оборудовании. Первый столбец в таблице будет содержать номера ID оборудования типа serial, который является автоинкрементирующимся целым числом. Этот столбец также имеет ограничение PRIMARY KEY, что означает, что значения в нем должны быть уникальными и не нулевыми.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 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 успешно заполнен, и что все ваши другие данные правильно организованы.

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

  1. DELETE FROM playground WHERE type = 'slide';

Снова запросите таблицу:

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

Обратите внимание, что строка с slide больше не является частью таблицы.

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

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

  1. ALTER TABLE playground ADD last_maint date;

Если вы еще раз просмотрите информацию в вашей таблице, вы увидите, что новый столбец был добавлен, но данные не были введены:

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

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

  1. ALTER TABLE playground DROP last_maint;

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

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

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

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

  1. UPDATE playground SET color = 'red' WHERE type = 'swing';

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

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

Как видите, теперь горка зарегистрирована как красная.

Заключение

Вы теперь настроены с PostgreSQL на вашем сервере Ubuntu 20.04. Если вы хотите узнать больше о Postgres и как его использовать, мы рекомендуем ознакомиться с следующими руководствами:

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-20-04