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

Введение

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

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

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

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

Для выполнения этого учебника вам понадобится один сервер Ubuntu 22.04, который был настроен в соответствии с нашим Руководством по начальной настройке сервера для Ubuntu 22.04. После завершения этого руководства по предварительным требованиям на вашем сервере должен быть создан не-root пользователь с правами 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 настроен на использование аутентификации по паре, что означает, что он ассоциирует роли 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 в базе данных. Вы можете создавать новые роли из командной строки с помощью команды createuser. Флаг --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

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

  1. man createuser

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

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

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

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

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

  1. createdb sammy

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

  1. sudo -u postgres createdb sammy

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

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

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

Если у вас нет подходящего пользователя Linux, вы можете создать его с помощью команды adduser. Вы должны сделать это из своей учетной записи без привилегий root с использованием команды 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)
);

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

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

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

  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_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 — Обновление данных в таблице

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

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

  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 22.04. Если вы хотите узнать больше о Postgres и о том, как его использовать, мы рекомендуем ознакомиться с следующими руководствами:

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