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

Вступление

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

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

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

Предпосылки

Чтобы следовать этому руководству, вам понадобится один сервер Ubuntu 18.04, который был настроен в соответствии с нашим руководствомInitial Server Setup for Ubuntu 18.04. После выполнения этого обязательного руководства на вашем сервере должен быть пользователь, отличный отroot, с разрешениями sudo и базовым брандмауэром.

[[step-1 -—- install-postgresql]] == Шаг 1. Установка PostgreSQL

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

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

sudo apt update
sudo apt install postgresql postgresql-contrib

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

[[step-2 -—- using-postgresql-roles-and-databases]] == Шаг 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

Это вернет вас в командную строку Linuxpostgres.

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

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

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

sudo -u postgres psql

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

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

\q

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

[[step-3 -—- created-a-new-role]] == Шаг 3 - Создание новой роли

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

Если вы вошли в систему как учетную запись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

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

[[step-4 -—- created-a-new-database]] == Шаг 4 - Создание новой базы данных

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

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

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

createdb sammy

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

sudo -u postgres createdb sammy

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

[[step-5 -—- open-a-postgres-prompt-with-the-new-role]] == Шаг 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".

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

[[step-6 -—- create-and-deleting-tables]] == Шаг 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)
);

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

Вы можете узнать больше оhow to create and manage tables in 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, что означает, что значения должны быть уникальными, а не нулевыми.

Для двух столбцов (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)

[[step-7 -—- add-querying-and-deleting-data-in-a-table]] == Шаг 7. Добавление, запрос и удаление данных в таблице

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

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

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

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

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)

Вы замечаете, что ваш слайд больше не является частью таблицы.

[[шаг-8 -—- добавление-и-удаление-столбцов-из-таблицы]] == Шаг 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 и все найденные в нем значения, но все остальные данные остаются нетронутыми.

[[step-9 -—- update-data-in-a-table]] == Шаг 9 - Обновление данных в таблице

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

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

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)

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

Related