- Вопрос или проблема
- Ответ или решение
- Шаг 1: Установка PostgreSQL
- Шаг 2: Инициализация базы данных
- Шаг 3: Включение и запуск службы PostgreSQL
- Шаг 4: Настройка пользователя и ролей
- Шаг 5: Решение возможных проблем
- Ошибка: «postgres не знает, где найти файл конфигурации сервера»
- Ошибка: «роль "CORP\layne.sadler" не существует»
- Причина: Не удаётся запустить pg_ctl как root
- Заключение
Вопрос или проблема
Большинство учебников устанавливают и postgresql, и postgresql-server:
$ sudo yum install postgresql postgresql-server
Установлено:
postgresql.x86_64 0:9.2.24-1.amzn2.0.1
postgresql-server.x86_64 0:9.2.24-1.amzn2.0.1
Установлено зависимое ПО:
postgresql-libs.x86_64 0:9.2.24-1.amzn2.0.1
Программы установлены здесь:
$ which psql
/usr/bin/psql
$ which postgres
/usr/bin/postgres
На этом этапе большинство учебников переходит к initdb
и pg_ctl <path> start
$ cd '/usr/lib'
$ service postgresql initdb
Совет: предпочтительный способ сделать это сейчас - "postgresql-setup initdb"
$ sudo postgresql-setup initdb
[sudo] пароль для CORP\layne.sadler:
Инициализация базы данных ... OK
$ systemctl enable postgresql
Создан символическая ссылка из /etc/systemd/system/multi-user.target.wants/postgresql.service в usr/lib/systemd/system/postgresql.service.
$ systemctl start postgresql
[18:47:32] /usr/bin ☯ systemctl status postgresql
● postgresql.service - Сервер базы данных PostgreSQL
Загружено: загружено (/usr/lib/systemd/system/postgresql.service; включено; предустановлено: отключено)
Активно: активно (работает) с Чт 2020-03-05 18:47:32 EST; 7 с. назад
Процесс: 25559 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (код=вышел, статус=0/УСПЕШНО)
Процесс: 25553 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (код=вышел, статус=0/УСПЕШНО)
Главный PID: 25562 (postgres)
CГруппа: /system.slice/postgresql.service
├─25562 /usr/bin/postgres -D /var/lib/pgsql/data -p 5432
├─25564 postgres: процесс ведения журнала
├─25566 postgres: процесс контрольной точки
├─25567 postgres: процесс записи
├─25568 postgres: процесс записи WAL
├─25569 postgres: процесс запуска автосборщика
└─25570 postgres: процесс сбора статистики
$ passwd postgres
замечание: /usr/bin/postgres -D /var/lib/pgsql/data -p 5432
ЗАСТРЯЛ
$postgres
postgres не знает, где найти файл конфигурации сервера.
Вы должны указать опцию вызова --config-file или -D или установить переменную окружения PGDATA.
$ psql
psql: ФАТАЛЬНАЯ ОШИБКА: роль "CORP\layne.sadler" не существует
$ sudo pg_ctl -D postgresql-setup initdb
pg_ctl: не может быть запущен от имени root
Пожалуйста, войдите (например, используя "su") как (непривилегированный) пользователь, который будет
владеть процессом сервера.
# похоже, что я не могу войти как su, хотя другие команды sudo работают
Примечания:
- ОС утверждает, что это
rhel fedora centos
, но не имеет библиотекrhel-release
. - Похоже, что
epel-release
иdnf
заблокированы для установки. - ^^^ инструкции по установке postgres требуют указанных выше инструментов.
CentOS (Community ENTerprise Operating System) — это пользовательская (повторная) сборка RHEL (Red Hat Enterprise Linux), с изменением брендинга и некоторыми другими деталями. Она стремится быть полностью бинарно совместимой, вплоть до ошибок. У нее нет доступа к репозиториям пакетов RHEL, она использует свои собственные. EPEL (Extra Packages for Enterprise Linux) — это проект Fedora, который предлагает пакеты для RHEL/CentOS, которых нет в RHEL.
Не знаю, откуда взялось “dnf заблокирован для установки”. Обратите внимание, что в RHEL/CentOS dnf относительно нов, (я думаю, это альтернатива, начиная с версии 7), возможно, доступен только (устаревший) yum? Вы можете попробовать yum install dnf
, если это необходимо. В зависимости от вашей точной версии CentOS, его может вообще не быть.
Последнее сообщение об ошибке, которое вы приводите, довольно ясно: Postgres не может найти/прочитать свою конфигурацию. Проверьте внимательно, чтобы установка была выполнена правильно. Неправильное имя файла где-либо может сорвать все.
Ответ или решение
Когда вы настраиваете PostgreSQL на Amazon Linux, важно выполнить несколько шагов, чтобы обеспечить правильное функционирование базы данных. В этом руководстве мы рассмотрим, как установить и настроить PostgreSQL, а также устранить распространённые ошибки, которые могут возникнуть в процессе.
Шаг 1: Установка PostgreSQL
Первый шаг — установка необходимых пакетов. Используйте следующую команду для установки PostgreSQL и его серверной части:
sudo yum install postgresql postgresql-server
После установки, вы можете проверить, что PostgreSQL установлен, командой:
which psql
which postgres
Эти команды должны вернуть путь к установленным программам, например:
/usr/bin/psql
/usr/bin/postgres
Шаг 2: Инициализация базы данных
Для инициализации базы данных выполните следующие команды. Обратите внимание, что на более новых версиях системы предпочтительно использовать postgresql-setup
:
sudo postgresql-setup initdb
Если вы столкнётесь с проблемами при использовании команды initdb
, попробуйте следующее:
sudo service postgresql initdb
При успешной инициализации вы увидите сообщение, подобное следующему:
Инициализация базы данных ... OK
Шаг 3: Включение и запуск службы PostgreSQL
После инициализации базы данных необходимо включить и запустить службу PostgreSQL. Выполните следующие команды:
sudo systemctl enable postgresql
sudo systemctl start postgresql
Вы можете проверить состояние службы с помощью:
systemctl status postgresql
Если всё настроено правильно, вы должны увидеть статус, как показано ниже:
Active: active (running)
Шаг 4: Настройка пользователя и ролей
Если вам нужно создать нового пользователя для доступа к вашей базе данных, выполните следующие шаги:
- Сначала измените пользователя на
postgres
, который был создан в процессе установки:
sudo su - postgres
- Затем запустите psql для создания нового пользователя:
createuser --interactive
Следуйте подсказкам и введите имя пользователя и настройки, такие как наличие прав суперпользователя.
Шаг 5: Решение возможных проблем
На этом этапе могут возникнуть ошибки, которые можно решить следующим образом:
Ошибка: «postgres не знает, где найти файл конфигурации сервера»
Эта ошибка может указать на проблемы с переменной окружения PGDATA. Убедитесь, что в конфигурации правильно указаны пути. Вам нужно убедиться, что переменная PGDATA
указывает на правильный путь, например:
export PGDATA=/var/lib/pgsql/data
Ошибка: «роль "CORP\layne.sadler" не существует»
Эта ошибка указывает на то, что роль, с которой вы пытаетесь войти, не создана. Используйте ранее указанные команды для создания нужного пользователя или войдите под пользователем postgres
.
Причина: Не удаётся запустить pg_ctl как root
Процесс SQL должен запускаться от имени пользователя PostgreSQL, а не под root. Убедитесь, что вы сменили пользователя как указано ранее:
sudo su - postgres
Заключение
Настройка PostgreSQL на Amazon Linux требует выполнения нескольких последовательных шагов от установки пакетов до конфигурации пользователей. Следуя предоставленным инструкциям и решая возникающие трудности, вы сможете успешно настроить свою базу данных PostgreSQL.
Если у вас есть дополнительные проблемы, убедитесь, что все конфигурационные файлы находятся на правильных местах, и используйте команды, присущие вашей версии системы.