Logicky Blog

Logickyの開発ブログです

MacでPostgreSQLがうまく自動起動しなくなった

OSを新しくしたせいなのか、突然PostgreSQLの自動起動でエラーが出るようになりました。 一度直ったのですが、再度、再起動時に同じエラーが出ましたので、メモします。

エラー内容

❯ php artisan serve
                                                                                                      
   Illuminate\Database\QueryException                                                                
                                                                                                      
  SQLSTATE[08006] [7] connection to server at "127.0.0.1", port 5432 failed: Connection refused       
        Is the server running on that host and accepting TCP/IP connections? (Connection: pgsql, SQL: 
select * from "settings" limit 1)
❯ brew services list
Name          Status     User File
mailpit       none
mysql         none
php           none
postgresql@16 error  256 dev  ~/Library/LaunchAgents/homebrew.mxcl.postgresql@16.plist
redis         started    dev  ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

下記のように再起動しても変わらず上記のままです。

brew services stop postgresql@16
brew services start postgresql@16

plistの内容は下記でした。

❯ cat ~/Library/LaunchAgents/homebrew.mxcl.postgresql@16.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>EnvironmentVariables</key>
        <dict>
                <key>LC_ALL</key>
                <string>C</string>
        </dict>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>homebrew.mxcl.postgresql@16</string>
        <key>LimitLoadToSessionType</key>
        <array>
                <string>Aqua</string>
                <string>Background</string>
                <string>LoginWindow</string>
                <string>StandardIO</string>
                <string>System</string>
        </array>
        <key>ProgramArguments</key>
        <array>
                <string>/opt/homebrew/opt/postgresql@16/bin/postgres</string>
                <string>-D</string>
                <string>/opt/homebrew/var/postgresql@16</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/opt/homebrew/var/log/postgresql@16.log</string>
        <key>StandardOutPath</key>
        <string>/opt/homebrew/var/log/postgresql@16.log</string>
        <key>WorkingDirectory</key>
        <string>/opt/homebrew</string>
</dict>
</plist>

ログを見てみます。

❯ tail -f /opt/homebrew/var/log/postgresql@16.log
2024-10-15 11:19:30.964 JST [8382] FATAL:  lock file "postmaster.pid" already exists
2024-10-15 11:19:30.964 JST [8382] HINT:  Is another postmaster (PID 754) running in data directory "/opt/homebrew/var/postgresql@16"?

ここに同じエラーについて書かれていました。postgresの二重起動を防止するもので、何らかの原因で残ってしまうものが、よく残るようになってしまったのでしょうか? www.fujitsu.com

とりあえず、消してみます。

rm /opt/homebrew/var/postgresql@16/postmaster.pid

おー直りました。

❯ brew services list
Name          Status  User File
mailpit       none
mysql         none
php           none
postgresql@16 started dev  ~/Library/LaunchAgents/homebrew.mxcl.postgresql@16.plist
redis         started dev  ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

これが続くのは嫌ですが、とりあえず、postmaster.pidを削除したら良いのかなと思いました。