herokuの為に初めてPostgreSQLを導入したら、
デフォルトのポート番号5432が既に使用中と表示されて、
しばらく接続出来ず苦労したので記録しておきます。
そのときの状態
該当のエラー文はもう残っていませんが、 要約するとポート5432は既に使用中という旨のエラーが表示され、 コマンドラインからも、もちろんSQLクライアントからもデータベースに触れなくなってしまいました。ポート5432が使用中ということなので、
「タスクマネージャー」>「詳細」>「PID」を確認しましたが実行中のアプリはなく、
コマンドラインから「netstat」を使用しても5432には何もあてがわれていませんでした。
パソコンの再起動も試みましたが、依然として何故か5432が使用中で接続できません。
解決法
「pg_ctl -D "dataフォルダのフルパス" restart」 で直った。
PS C:\Users\hoge> pg_ctl -D "C:\Program Files\PostgreSQL\12\data" restart
pg_ctl: PIDファイル"C:/Program Files/PostgreSQL/12/data/postmaster.pid"がありません
サーバが動作していますか?
とにかくサーバの起動を試みます
サーバの起動完了を待っています....2019-12-23 22:04:24.510 JST [14488] LOG: PostgreSQL 12.1, compiled by Visual C++ build 1914, 64-bit を
起動しています
2019-12-23 22:04:24.516 JST [14488] LOG: IPv6アドレス"::"、ポート5432で待ち受けています
2019-12-23 22:04:24.541 JST [14488] LOG: IPv4アドレス"0.0.0.0"、ポート5432で待ち受けています
....完了
サーバ起動完了
PostgreSQLはサーバーに接続中のときは、
「data」フォルダに「postmaster.pid」というファイルが存在し、
接続が切れたときにこのファイルは自動的に消えます。
そのファイルがないのでサーバーに接続中ではないと判断されるのですが、
とにかくサーバの起動を試みてくれるのでこれでいけました。
ローカルホストのアドレスについて
またそれとは別に、
flask+postgreSQL系の記事でURLに使うlocalhostは「192.168.1.101」になってることが多くて、
SQLAlchemyでそのまま真似て書いてエラー吐きました。
pythonの記述
```python import sqlalchemy # 略 URL = 'postgresql+psycopg2://ユーザー名:パスワード@192.168.1.101:5432/データベース名' ENGINE = sqlalchemy.create_engine(URL, echo=True) con = ENGINE.connect() ```エラー
``` sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5432? ```ローカルホストのアドレスは、
「data」フォルダ内の「pg_hba.conf」に記述があって、
そこにあるアドレスを書いたら通りました。
あと「 pg_ctl -D "dataフォルダのフルパス" start」
でデータベースを起動するのを忘れずに!
アドレスが正しいのに、そもそもデータベースを起動してなくて触れなかった