Как установить и использовать PostgreSQL в CentOS 7
Введение
Системы управления реляционными базами данных являются ключевым компонентом многих веб-сайтов и приложений. Они обеспечивают структурированный способ хранения, организации и доступа к информации.
параллелизм без блокировки чтения.
В этом руководстве вы установите Postgres на сервер CentOS 7 и ознакомитесь с некоторыми основными способами его использования.
Предпосылки
Чтобы следовать этому руководству, вам понадобятся:
- Сервер CentOS 7, настроенный в соответствии с нашим руководством по дополнительным рекомендуемым шагам для новых серверов CentOS 7, включая пользователя без полномочий root с привилегиями sudo и брандмауэр, настроенный с помощью
firewalld
. ли> - Чтобы настроить
firewalld
, следуйте инструкциям в разделе «Настройка базового брандмауэра» руководства «Дополнительные рекомендуемые действия для новых серверов CentOS 7». - Базы данных могут быть особенно уязвимы к изменениям системного времени, если они очень активны и имеют метки времени во внутренних записях. Чтобы предотвратить некоторое непоследовательное поведение, которое может возникнуть из-за несинхронизированных часов, обязательно настройте синхронизацию протокола сетевого времени (NTP), следуя разделу «Настройка часовых поясов и синхронизации протокола сетевого времени» в руководстве «Дополнительные рекомендуемые шаги для новых серверов CentOS 7». .
Шаг 1 — Установка PostgreSQL
Postgres можно установить, используя репозитории CentOS по умолчанию. Но на момент написания этого руководства версия, доступная в репозитории CentOS 7 Base, устарела. Поэтому в этом руководстве будет использоваться официальный репозиторий Postgres.
Прежде чем перейти к настройке нового репозитория, исключите поиск пакетов postgresql
из репозитория CentOS-Base. В противном случае зависимости могут разрешаться в postgresql
, предоставленный базовым репозиторием.
Откройте файл конфигурации репозитория с помощью предпочитаемого вами текстового редактора. В этом руководстве будет использоваться vim
:
- sudo vi /etc/yum.repos.d/CentOS-Base.repo
Найдите разделы [base]
и [updates]
, войдите в режим вставки, нажав i
, и вставьте exclude=postgresql*
в обоих разделах. В результате ваш файл будет выглядеть следующим образом с выделенными новыми строками:
...
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
exclude=postgresql*
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
exclude=postgresql*
...
Когда вы закончите, нажмите ESC
, чтобы выйти из режима вставки, затем :wq
и ENTER
, чтобы сохранить и выйти из файла. Чтобы узнать больше о текстовом редакторе vi и его преемнике vim, ознакомьтесь с нашим руководством по установке и использованию текстового редактора Vim на облачном сервере.
Теперь установите пакет конфигурации репозитория, используя официальный репозиторий PostgreSQL для CentOS:
- sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
При появлении запроса подтвердите установку с помощью y
.
Репозиторий PostgreSQL содержит информацию обо всех доступных выпусках PostgreSQL. Вы можете увидеть все доступные пакеты и версии, используя следующую команду:
- yum list postgresql*
Выберите и установите нужную версию PostgreSQL. В этом руководстве вы будете использовать выпуск PostgreSQL 11.
Чтобы установить сервер PostgreSQL, используйте следующую команду:
- sudo yum install postgresql11-server
В процессе установки вам будет предложено импортировать ключ GPG с подсказкой, подобной следующей:
...
Importing GPG key 0x442DF0F8:
Userid : "PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>"
Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
Package : pgdg-redhat-repo-42.0-5.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]:
Подтвердите его с помощью y
, чтобы установка могла завершиться.
Теперь, когда программное обеспечение установлено, вы выполните некоторые шаги по инициализации, чтобы подготовить новый кластер базы данных для PostgreSQL.
Шаг 2 — Создание нового кластера базы данных PostgreSQL
Вам необходимо создать новый кластер базы данных PostgreSQL, прежде чем вы сможете использовать свою базу данных Postgres. Кластер баз данных — это набор баз данных, управляемых одним экземпляром сервера. Создание кластера базы данных состоит из создания каталогов, в которых будут размещаться данные базы данных, создания общих таблиц каталога и создания баз данных template1
и postgres
.
База данных template1
необходима для создания новой базы данных. Все, что в ней хранится, будет помещено в новую базу данных при ее создании. База данных postgres
— это база данных по умолчанию, предназначенная для использования пользователями, утилитами и сторонними приложениями.
Создайте новый кластер базы данных PostgreSQL с помощью initdb
:
- sudo /usr/pgsql-11/bin/postgresql-11-setup initdb
Вы увидите следующий вывод:
OutputInitializing database ... OK
Теперь запустите и включите PostgreSQL с помощью systemctl
:
- sudo systemctl start postgresql-11
- sudo systemctl enable postgresql-11
Это даст следующий вывод
OutputCreated symlink from /etc/systemd/system/multi-user.target.wants/postgresql-11.service to /usr/lib/systemd/system/postgresql-11.service.
Теперь, когда PostgreSQL настроен и работает, вы перейдете к использованию ролей, чтобы узнать, как работает Postgres и чем он отличается от аналогичных систем управления базами данных, которые вы могли использовать в прошлом.
Шаг 3 — Использование ролей и баз данных 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. Теперь вернитесь к исходной учетной записи sudo со следующим:
- exit
Доступ к приглашению Postgres без переключения учетных записей
Вы также можете запустить нужную команду с учетной записью postgres напрямую с помощью sudo
.
Например, в последнем примере вам было предложено перейти к приглашению Postgres, сначала переключившись на пользователя postgres, а затем запустив psql
, чтобы открыть приглашение Postgres. Вы можете сделать это за один шаг, выполнив единственную команду psql
от имени пользователя postgres с помощью sudo
, например:
- sudo -u postgres psql
Это позволит вам напрямую войти в Postgres без промежуточной оболочки bash
.
Опять же, вы можете выйти из интерактивного сеанса Postgres, набрав:
- \q
На этом шаге вы использовали учетную запись postgres для доступа к приглашению psql
. Но для многих вариантов использования требуется более одной роли Postgres. Читайте дальше, чтобы узнать, как настроить новые роли.
Шаг 4 — Создание новой роли
В настоящее время у вас просто настроена роль postgres в базе данных. Вы можете создавать новые роли из командной строки с помощью команды createrole
. Флаг --interactive
предложит вам ввести имя новой роли, а также спросит, должны ли у нее быть права суперпользователя.
Если вы вошли в систему как учетная запись postgres, вы можете создать нового пользователя, набрав:
- createuser --interactive
Если вместо этого вы предпочитаете использовать sudo
для каждой команды, не переключаясь с вашей обычной учетной записи, введите:
- sudo -u postgres createuser --interactive
Сценарий предложит вам несколько вариантов и, основываясь на ваших ответах, выполнит правильные команды Postgres, чтобы создать пользователя в соответствии с вашими требованиями. Для этого руководства создайте пользователя sammy и предоставьте ему права суперпользователя:
OutputEnter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
Вы можете получить больше контроля, передав некоторые дополнительные флаги. Ознакомьтесь с вариантами на странице man
:
- man createuser
В вашей установке Postgres появился новый пользователь, но вы еще не добавили ни одной базы данных. В следующем разделе описан этот процесс.
Шаг 5 — Создание новой базы данных
Еще одно предположение, которое система аутентификации Postgres делает по умолчанию, заключается в том, что для любой роли, используемой для входа в систему, эта роль будет иметь базу данных с тем же именем, к которой она может получить доступ.
Это означает, что если пользователя, которого вы создали в последнем разделе, зовут sammy, эта роль попытается подключиться к базе данных, которая по умолчанию также называется sammy
. Вы можете создать соответствующую базу данных с помощью команды createdb
.
Если вы вошли в систему как учетная запись postgres, вы должны ввести что-то вроде:
- createdb sammy
Если вместо этого вы предпочитаете использовать sudo
для каждой команды, не переключаясь с вашей обычной учетной записи, вы должны ввести:
- sudo -u postgres createdb sammy
Эта гибкость обеспечивает несколько путей для создания баз данных по мере необходимости.
Теперь, когда вы создали новую базу данных, вы войдете в нее со своей новой ролью.
Шаг 6 — Открытие командной строки 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".
Это полезно, если вы подключаетесь к базам данных не по умолчанию или с нестандартными пользователями.
Подключившись к вашей базе данных, вы можете попробовать создавать и удалять таблицы.
Шаг 7 — Создание и удаление таблиц
Теперь, когда вы знаете, как подключиться к системе баз данных 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)
);
Эти команды дают таблице имя, а затем определяют столбцы, а также тип столбца и максимальную длину данных поля. Вы также можете дополнительно добавить ограничения таблицы для каждого столбца.
Вы можете узнать больше в нашем руководстве по созданию, удалению и управлению таблицами в 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
);
Эти команды создадут таблицу, в которой будет инвентаризировано игровое оборудование. Он начинается с идентификатора оборудования типа 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)
На этом шаге вы создали образец таблицы. На следующем шаге вы попробуете добавлять, запрашивать и удалять записи в этой таблице.
Шаг 8 — Добавление, запрос и удаление данных в таблице
Теперь, когда у вас есть таблица, вы можете вставить в нее некоторые данные.
В качестве примера добавьте слайд и качели, вызвав таблицу, к которой вы хотите добавить, назвав столбцы, а затем предоставив данные для каждого столбца, например:
- 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)
Обратите внимание, что ваш слайд больше не является частью таблицы.
Теперь, когда вы добавили и удалили целые значения в своей таблице, вы можете попробовать добавить и удалить столбцы.
Шаг 9 — Добавление и удаление столбцов из таблицы
После создания таблицы вы можете изменить ее, добавив или удалив столбцы. Добавьте столбец, чтобы показать последний визит на техническое обслуживание для каждой единицы оборудования, введя:
- 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
и все найденные в нем значения, но все остальные данные остаются нетронутыми.
Теперь, добавив и удалив столбцы, вы можете попробовать обновить существующие данные на последнем шаге.
Шаг 10 — Обновление данных в таблице
До сих пор вы узнали, как добавлять записи в таблицу и как их удалять, но в этом руководстве еще не рассказывалось, как изменять существующие записи.
Вы можете обновить значения существующей записи, запросив нужную запись и установив для столбца значение, которое хотите использовать. Вы можете запросить запись swing
(она будет соответствовать всем колебаниям в вашей таблице) и изменить ее цвет на красный
:
- 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 на своем сервере CentOS 7. Однако с Postgres еще многое предстоит узнать. Вот еще несколько руководств по использованию Postgres:
- Сравнение систем управления реляционными базами данных
- Узнайте, как создавать таблицы и управлять ими с помощью Postgres
- Научитесь лучше управлять ролями и разрешениями
- Создавайте запросы в Postgres с помощью Select