🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

2回答

4379閲覧

PostgreSQLが起動しない

takuo5

総合スコア48

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2019/09/27 08:11

前提・実現したいこと

下記リンクに沿ってMySQLとPostgreSQLの環境構築をしています。
リンク内容
MySQLは起動までうまくできたのですが、PostgreSQLの方だけうまく起動できません。
アドレスがすでに使われていると書かれているので、何かが起動していてそれが邪魔になっているということはわかるのですが
何が原因でしょうか。

発生している問題・エラーメッセージ

$ docker-compose up -d pgsql_study Starting pgsql_study ... error ERROR: for pgsql_study Cannot start service pgsql_study: driver failed programming external connectivity on endpoint pgsql_study (4c7e85c033174a49cebce74c958d4a8f6b09b8eb12f5c5da33da14ac476d2f33): Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use ERROR: for pgsql_study Cannot start service pgsql_study: driver failed programming external connectivity on endpoint pgsql_study (4c7e85c033174a49cebce74c958d4a8f6b09b8eb12f5c5da33da14ac476d2f33): Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use ERROR: Encountered errors while bringing up the project.

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Mac
Docker

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

5432番ポートであることから、PostgreSQL が使用しているポート番号であると推測できるので、
pspgrep で postgres が起動していないか確認してから、
実際に5432番ポートを専有しているプロセスを lsof で突き止めるのがベターかなと思います。

原因となるプロセスを突き止めた後は、該当プロセスを kill するか、サービスを stop するかはケースバイケースですね。

# postgresが起動していないかプロセス確認 ps auxww | grep postgre[s] pgrep postgres # 実際に5432番ポートを専有しているプロセスを確認 lsof -i:5432

投稿2019/09/27 08:56

編集2019/09/27 08:56
uzyexe

総合スコア239

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takuo5

2019/09/28 09:57

ご回答頂きましてありがとうございます。 コマンド入力の結果が下記のとおりです。 $ pgrep postgres 79230 79232 79233 79234 79235 79236 79237 $ lsof -i:5432 ⇛ 何も表示されず。 上記からわかるのは5432に使用されているものはありませんということでしょうか? だとしたらなぜエラーが出ているのでしょうか? このままkillしても問題はないでしょうか?
uzyexe

2019/09/28 11:51

netstat -an | grep 5432 ss | grep 5432 systemctl -a | grep postgres などを実行しても疑わしいプロセスが何も出てこないようなら、原因についてはちょっとお手上げですね・・・。 このまま普通に kill コマンドか、pkill postgres で kill しても、問題はないと思います。
takuo5

2019/09/29 13:31

netstat -an | grep 5432を入力してみると下記のようになりました。 $ netstat -an | grep 5432 tcp4 0 0 *.5432 *.* LISTEN tcp6 0 0 *.5432 *.* LISTEN a0fcebe96aad4d3d stream 0 0 a0fcebe982aa902d 0 0 0 /tmp/.s.PGSQL.5432 上記のコマンドを使ったことがないのでよくわからないのですが、何のプロセスかは表示されていないと思いますが、、、 ss | grep 5432とsystemctl -a | grep postgresも打ち込みましたが、command not foundと表示されました。 最後に kill -9 5432と打ち込んだところ、 $ kill -9 5432 -bash: kill: (5432) - No such process になりました。。。
uzyexe

2019/09/29 14:06 編集

lsofで引っかからないのが謎ですが、確実にpostgresがどこかで動いていますね。 ちなみに、netstatやssコマンドは現在使用中のポート番号やネットワーク情報などを確認するコマンドです。 systemctl コマンドが command not found ということは、service コマンドのほうかな。 service postgresql status を実行してpostgresが存在してそうなら、 service postgresql stop を実行することで postgres を停止できるとと思います。 killコマンドを実行する場合の基本書式は、以下のような書式なので、 pgrep postgres を実行したときに表示されたPIDを引数として指定して実行する必要があります。 kill <PID> 例: kill 79230 79232 79233 79234 79235 79236 79237 (念の為、killコマンド実行前には、pgrep postgres でPIDを再確認しておいたほうがよいです。) 普通の kill コマンドで kill できなかったときは、 KILLシグナルを追加するために、killコマンドに-9オプションを追加して実行してみましょう。 ちなみにですが、該当プロセスをまとめて kill するような場合には、 pkill コマンド使うと、該当プロセスをすべてまとめてkillすることもできます。 例: pkill postgres
takuo5

2019/10/01 12:01

killコマンドについて詳しくし得ていただきありがとうございます。 下記のように試してみました。 $ service postgresql status -bash: service: command not found サービスコマンドが使えないようですね。
uzyexe

2019/10/01 12:43

なるほど。。では、pkill postgresでkillするのが一番簡単かもしれませんね。
takuo5

2019/10/02 11:15

pkillで下記のように試してみました。 $ pkill postgres pkill: signalling pid 215: Operation not permitted pkill: signalling pid 217: Operation not permitted pkill: signalling pid 218: Operation not permitted pkill: signalling pid 219: Operation not permitted pkill: signalling pid 220: Operation not permitted pkill: signalling pid 221: Operation not permitted pkill: signalling pid 222: Operation not permitted という結果でした。Macのセキュリティが高いからかと思い下記の設定も試してみましたが同じ結果でした。 http://kuneoresearch.com/macos-mojave-terminal-operation-not-permitted/
uzyexe

2019/10/02 11:20

うーん、、環境はMacでしょうか。 sudo pkill postgres か sudo brew services stop postgres か sudo su - postgres pkill postgres exit のいずれかの手段で kill できませんかね
takuo5

2019/10/02 12:05

大変お手間をおかけしまして申し訳ございません。 環境はMacです。 全て連続で試してみました結果が下記です。 $ sudo pkill postgres $ sudo su - postgres ~ postgres$ cd :~ postgres$ pkill postgres ~ postgres$ pkill postgres ~ postgres$ exit logout $ sudo pkill postgres $ sudo brew services stop postgres Updating Homebrew... ==> Tapping homebrew/services Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-services'... remote: Enumerating objects: 14, done. remote: Counting objects: 100% (14/14), done. remote: Compressing objects: 100% (9/9), done. remote: Total 14 (delta 0), reused 8 (delta 0), pack-reused 0 Unpacking objects: 100% (14/14), done. Tapped 1 command (43 files, 59.5KB). Error: Service `postgresql` is not started. t-mbp:~ yamamototakuya$ cd ~/pjc/sql_study t-mbp:sql_study yamamototakuya$ docker-compose up -d pgsql_study Starting pgsql_study ... error ERROR: for pgsql_study Cannot start service pgsql_study: driver failed programming external connectivity on endpoint pgsql_study (4b361d1ff30637b5970d3553f5e06895fed00d818b08e3d0747d3a04aaad3981): Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use ERROR: for pgsql_study Cannot start service pgsql_study: driver failed programming external connectivity on endpoint pgsql_study (4b361d1ff30637b5970d3553f5e06895fed00d818b08e3d0747d3a04aaad3981): Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use ERROR: Encountered errors while bringing up the project.
uzyexe

2019/10/02 12:31

まさか、ここまでkillしようとしてもkillしきれないプロセスとは・・・笑 Docker側の問題かもしれないので、 1. すべてのコンテナを削除する docker-compose down --rmi all --volumes を実行する。 2. Macのメニューバーにあると思われるDockerのアイコンをクリックしてDockerの再起動を試みる。 3. Macを完全にシャットダウンして、再起動してみる。 ここまでやっても、postgresが生き残っていたらちょっとお手上げかもです笑
takuo5

2019/10/02 14:00

docker-compose down --rmi all --volumes を入力後、mysqlとpostgresqlがremoveされましたとメッセージが表示されましたので、DockerとMacを再起動させて、brew install postgresql実行 ⇛ postgresqlはすでに存在してますとメッセージがあり、docker-compose up -d pgsql_studyを再度実行しましたが同じエラーが出ました。 ここまでしてもらって解決できず申し訳ございません。 その後他におかしいところはないか確認してみたところ、Finderでmysql_dbのファイルを見てみると沢山ファイルが入っているのですが、postgre_dbの方は空になっています。 ということはインストールの時点から失敗していると思われますが、 $ brew reinstall postgresql を実行すると下記のようなメッセージが出ました。 Already downloaded: /Users/yamamototakuya/Library/Caches/Homebrew/downloads/16033a0d015d390bb56167abebd3aca24543bc2ea107d320283bd9f69ac59d14--postgresql-11.5_1.mojave.bottle.tar.gz 上記は解決のヒントになりますでしょうか?
uzyexe

2019/10/02 15:06 編集

Dockerを使って学習を進めていく場合は、Macのbrewでインストールされているpostgresのほうは使わないと思うので、sudo brew remove postgresql で削除できそうなら削除してから、Macを再起動して、その後に docker-compose up -d pgsql_study を実行してみたほうがよさそうです。 どのような方法でインストールされたかで postgres の停止方法は違うとしても、 通常ならば、以下の3つのインストール手段くらいしか考えつかないんですよね・・・。 手段1. Macのbrewでインストールされたpostgresが動いている。 (しかし、sudo brew services stop postgresで完全に停止するはず・・・。) 手段2. 実はDockerのpostgresが既に自動的に動いてて多重起動しようとしている。 (docker-compose down --rmi all --volumes したならば消えているはず・・・。) 手段3. brewでもDockerでもない方法でpostgresが起動している。 (普通は sudo pkill postgres か sudo pkill -9 postgres でプロセスは消える・・・。) もしくは、pgsql_study の Dockerfile か docker-compose.yml の内容に問題があって、docker-compose up -d pgsql_study を一回実行しただけで pgsql_study が二回起動しようとしているような内容になっちゃっているとかですかね。。
guest

0

5432ポートを他のプロセスが使用していて、
現状のデータベースの定義のままでは立ち上げられない、
ってことだと思われます。

5432ってPostgreSQLの標準的なポート番号なので、
インストールした直後にデフォルトのデータベースが構築されていたりはしないでしょうか。
それとおなじポート番号でpgsql_studyを立ち上げようとしてもダメなので、
ポート番号を変更するか、デフォルトのデータベースを立ち上げないような設定にすると良いかも。

投稿2019/09/27 08:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takuo5

2019/09/28 10:02

ご回答頂きましてありがとうございます。 デフォルトのデータベースが作られたかどうかというのはどのようにすれば調べることができますでしょうか。 それとは別に、上記のリンクのとおりに進めましたのでMysqlのインストールも同時に行っていますが、これが関係しているということはあり得ますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問