【2026年版】PostgreSQLが起動しない|Failed to start・Unit not foundの解決方法

PostgreSQLを起動しようとして「Failed to start PostgreSQL database server」や「Unit psql.service not found」が出た場合、最初に確認するのはサービス名とデータベースクラスタの初期化状況です。

2026年10月時点のAlmaLinux 9/RHEL 9系では、OS標準パッケージとPostgreSQL公式PGDGリポジトリ版でサービス名が異なります。この記事では、既存データを消さずに原因を切り分ける手順を説明します。

重要
psql はPostgreSQLへ接続するクライアントコマンドであり、通常 psql.service というサービスはありません。また、原因確認前にデータディレクトリを rm -rf したり、PostgreSQLプロセスを kill -9 したりしないでください。既存データを失うおそれがあります。

結論|最初に実行する確認コマンド

次の順番で確認すると、サービス名の間違いと起動失敗を切り分けられます。

sudo systemctl list-unit-files --type=service | grep -i postgres
rpm -qa | grep -i '^postgresql'
sudo systemctl status postgresql.service --no-pager
sudo journalctl -u postgresql.service -b -n 100 --no-pager

postgresql.service が見つからず、postgresql-16.service や postgresql-18.service が表示された場合は、以降のコマンドのサービス名を実際に表示された名前へ置き換えてください。

「Unit psql.service not found」の原因と解決方法

次のように psql をサービス名として指定すると、通常はエラーになります。

sudo systemctl start psql.service
Failed to start psql.service: Unit psql.service not found.

psql はデータベースへ接続するためのコマンドです。起動対象はPostgreSQLサーバーのsystemdサービスです。

AlmaLinux/RHEL標準パッケージの場合

sudo systemctl status postgresql.service
sudo systemctl start postgresql.service

PGDGリポジトリ版の場合

PGDG版はメジャーバージョンを含むサービス名が一般的です。例としてPostgreSQL 16なら次の名前です。

sudo systemctl status postgresql-16.service
sudo systemctl start postgresql-16.service

推測でサービス名を入力せず、次のコマンドでインストール済みのunitを確認してください。

sudo systemctl list-unit-files --type=service | grep -i postgres

「Failed to start PostgreSQL database server」の調べ方

Failed to start は原因そのものではなく、起動処理が失敗したという結果です。まずstatusとjournalを確認します。

sudo systemctl status postgresql.service --no-pager -l
sudo journalctl -u postgresql.service -b -n 100 --no-pager

PGDG版では、postgresql.service を実際のサービス名に置き換えます。

ログに出る主な内容 考えられる原因
Directory ... is missing or empty データベースクラスタが未初期化
Unit ... not found サービス名の誤り、またはサーバーパッケージ未導入
postmaster.pid already exists 別プロセスが稼働中、または停止後にPIDファイルが残存
Permission denied 所有者・権限・SELinuxコンテキストの不整合
Address already in use 5432番ポートなどを別プロセスが使用中

原因1|データディレクトリが未初期化

新規インストール直後に次のメッセージが出る場合、データベースクラスタを一度だけ初期化します。

Directory "/var/lib/pgsql/data" is missing or empty.
Use "/usr/bin/postgresql-setup --initdb" to initialize the database cluster.

AlmaLinux/RHEL標準パッケージ

sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql.service

PGDG版の例(PostgreSQL 16)

sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
sudo systemctl enable --now postgresql-16.service
初期化してよいのは新規環境だけです
/var/lib/pgsql/ 配下に既存データがある場合、再初期化や削除をせず、バックアップと構成を確認してください。

原因2|サーバーパッケージが入っていない

psql コマンドだけ使えるのにサービスが見つからない場合、クライアントのみ導入され、サーバーパッケージが入っていない可能性があります。

rpm -qa | grep -i '^postgresql'
dnf list installed 'postgresql*'

AlmaLinux/RHEL標準パッケージなら、サーバーを次のように導入します。

sudo dnf install postgresql-server

PGDG版では postgresql16-server のようにバージョンを含むパッケージ名になります。利用するリポジトリとバージョンを確認してから導入してください。

原因3|postmaster.pidが残っている/別プロセスが動いている

postmaster.pid already exists と表示されても、すぐにPIDファイルを削除したりプロセスを強制終了したりしてはいけません。まず稼働中のPostgreSQLがないか確認します。

ps -ef | grep '[p]ostgres'
sudo ss -ltnp | grep ':5432'
sudo systemctl status postgresql.service --no-pager

別のPostgreSQLが動いている場合は、どのデータディレクトリとサービスを使っているかを確認し、正しいサービス経由で停止・再起動します。

sudo systemctl restart postgresql.service

PostgreSQLプロセスが存在しないことを確認でき、異常停止でPIDファイルだけが残ったと判断できる場合に限り、ファイルを削除せず退避してから起動を試します。

sudo mv /var/lib/pgsql/data/postmaster.pid /var/lib/pgsql/data/postmaster.pid.stale
sudo systemctl start postgresql.service

原因4|権限またはSELinuxの不整合

データディレクトリをコピー・復元した直後は、所有者やSELinuxコンテキストが原因で起動できないことがあります。先に現在の状態を確認します。

sudo ls -ldZ /var/lib/pgsql /var/lib/pgsql/data
sudo journalctl -u postgresql.service -b -n 100 --no-pager

標準のデータディレクトリを使っている場合は、必要に応じて次のように修復します。

sudo chown -R postgres:postgres /var/lib/pgsql/data
sudo restorecon -Rv /var/lib/pgsql

独自のデータディレクトリを使っている場合は、パスをそのまま置き換えるだけでなく、systemd設定とSELinuxポリシーも確認してください。

原因5|5432番ポートが使用中

sudo ss -ltnp | grep ':5432'

別のPostgreSQLインスタンスや他のプロセスが使用している場合、既存プロセスを確認したうえで、不要なサービスを正規の手順で停止するか、postgresql.conf の port を変更します。

起動後の確認方法

サービスが起動しただけで終わらせず、接続できるところまで確認します。

sudo systemctl is-active postgresql.service
sudo systemctl is-enabled postgresql.service
sudo -u postgres psql -d postgres -c 'SELECT version();'

active、enabled と表示され、最後のSQLでPostgreSQLのバージョンが返れば起動確認は完了です。PGDG版ではサービス名を実際の名前へ置き換えてください。

よくある質問

postgresql.serviceとpostgresql-16.serviceのどちらを使いますか?

AlmaLinux/RHEL標準パッケージは通常 postgresql.service、PGDG版は通常 postgresql-16.service のようなバージョン付きです。systemctl list-unit-files --type=service | grep -i postgres の結果を優先してください。

「Unit postgresql.service could not be found」と表示されます

バージョン付きサービスが導入されていないか確認してください。何も表示されない場合は、PostgreSQLサーバーパッケージが未導入の可能性があります。

データディレクトリを削除すれば直りますか?

既存データが不要な検証環境を除き、削除してはいけません。まずログ、サービス名、パッケージ、プロセス、権限を確認します。データが必要な環境ではバックアップを確保してから対応してください。

まとめ

Unit psql.service not found は、多くの場合 psql をサービス名として指定したことが原因です。実際のunit名を確認し、OS標準版なら postgresql.service、PGDG版ならバージョン付きサービスを操作します。

Failed to start PostgreSQL database server の場合は、statusとjournalのエラー行を確認し、未初期化・パッケージ不足・PIDファイル・権限・ポート競合の順に切り分けるのが近道です。

あわせて読みたい

参考にした公式情報

この記事が役に立ったら

応援は任意です。記事はこれまでどおり無料で読めます。

このページをシェアする

コメント

タイトルとURLをコピーしました