Поиск по сайту:

Как установить и использовать 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:

  1. 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:

  1. sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

При появлении запроса подтвердите установку с помощью y.

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

  1. yum list postgresql*

Выберите и установите нужную версию PostgreSQL. В этом руководстве вы будете использовать выпуск PostgreSQL 11.

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

  1. 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:

  1. sudo /usr/pgsql-11/bin/postgresql-11-setup initdb

Вы увидите следующий вывод:

Output
Initializing database ... OK

Теперь запустите и включите PostgreSQL с помощью systemctl:

  1. sudo systemctl start postgresql-11
  2. sudo systemctl enable postgresql-11

Это даст следующий вывод

Output
Created 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 на своем сервере, набрав:

  1. sudo -i -u postgres

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

  1. psql

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

Выйдите из командной строки PostgreSQL, набрав:

  1. \q

Это вернет вас в командную строку postgres Linux. Теперь вернитесь к исходной учетной записи sudo со следующим:

  1. exit

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

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

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

  1. sudo -u postgres psql

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

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

  1. \q

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

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

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

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

  1. createuser --interactive

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

  1. sudo -u postgres createuser --interactive

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

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

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

  1. man createuser

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

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

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

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

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

  1. createdb sammy

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

  1. sudo -u postgres createdb sammy

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

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

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

Чтобы войти с аутентификацией на основе ident, вам понадобится пользователь 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".

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

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

Шаг 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 и ограничение, которое требует, чтобы значение было одним из восьми возможных значений. Последняя команда создает столбец даты, в котором записывается дата установки оборудования.

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

  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)

На этом шаге вы создали образец таблицы. На следующем шаге вы попробуете добавлять, запрашивать и удалять записи в этой таблице.

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

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

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

  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)

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

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

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

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

  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 и все найденные в нем значения, но все остальные данные остаются нетронутыми.

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

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

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

Вы можете обновить значения существующей записи, запросив нужную запись и установив для столбца значение, которое хотите использовать. Вы можете запросить запись 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 | 2010-08-16 (1 row)

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

Заключение

Теперь вы настроили PostgreSQL на своем сервере CentOS 7. Однако с Postgres еще многое предстоит узнать. Вот еще несколько руководств по использованию Postgres:

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