Mac OS XでPostgreSQLサーバーを起動する方法


989

最終更新:

initdbコマンドを実行するのを忘れていました。

</最終更新>

このコマンドを実行する

ps auxwww | grep postgres

postgresが実行されていないことがわかります

> ps auxwww | grep postgres
remcat          1789   0.0  0.0  2434892    480 s000  R+   11:28PM   0:00.00 grep postgres

これは問題を提起します:どのようにしてpostgresqlサーバーを起動しますか

更新:

>pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
sh: /usr/local/var/postgres/server.log: No such file or directory

アップデート2:

タッチは成功しなかったので、代わりにこれを行いました:

> mkdir /usr/local/var/postgres
> vi /usr/local/var/postgres/server.log
> ls /usr/local/var/postgres/          
server.log

しかし、railsサーバーを起動しようとすると、まだこれが表示されます。

Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?

更新3:

> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running

アップデート4:

pg_hba.conf(pg_hba.conf.sampleのみ)がないことがわかりましたので、サンプルを変更して名前を変更しました(.sampleを削除するため)。内容は次のとおりです。

 # IPv4 local connections:
 host    all             all             127.0.0.1/32           trust
 # IPv6 local connections:
 host    all             all             ::1/128                trust

しかし、私はこれを理解していません:

> pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start     
server starting
> pg_ctl -D /usr/local/var/postgres status                                     
pg_ctl: no server running

また:

sudo find / -name postgresql.conf
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory

アップデート5:

sudo pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Password:
pg_ctl: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.

アップデート6:

これは奇妙に見えます:

> egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
egrep: /usr/local/var/postgres/postgresql.conf: No such file or directory

しかし、私はこれをしました:

>sudo find / -name "*postgresql.conf*"
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample
/usr/share/postgresql/postgresql.conf.sample

だから私はこれをしました:

egrep 'listen|port' /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample 
#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)
                # supported by the operating system:
                #   %r = remote host and port

だから私はこれを試しました:

> cp /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf        
> cp /usr/share/postgresql/postgresql.conf.sample /usr/share/postgresql/postgresql.conf 

それでも同じ「サーバーは稼働していますか?」メッセージ。


どのようにPostgresをインストールしましたか?パッケージマネージャーまたは手動インストールを使用しましたか?
James Allman

1
正確には思い出せませんが、すでにインストールされているか、「brew install postgres」を実行しました。私は後者に傾いていますが、やはり100%確実ではありません。
Ramy

使用sudo、すなわちsudo pg_ctl...
ボヘミアン

54
FINAL UPDATEが私を非常に激しく笑わせたからといって、これに賛成票を投じました!:D
pkoch

14
賛成投票をしなければならなかったので、少なくとも週に3回ここに来て、最初のpg_ctlコマンドをコピーして、予期しない終了後にpsqlを再起動します。
lucygenik 2014年

回答:


1848

自作のパッケージマネージャが自動的に起動するようにlaunchctlプレースメントリストが含まれています。詳細については、を実行してくださいbrew info postgres

手動で開始:

pg_ctl -D /usr/local/var/postgres start

手動で停止します。

pg_ctl -D /usr/local/var/postgres stop

自動的に開始:

「今すぐpostgresqlを起動してログイン時に再起動するには:」

brew services start postgresql


の結果はpg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start何ですか?

の結果はpg_ctl -D /usr/local/var/postgres status何ですか?

server.logにエラーメッセージはありますか?

pg_hba.confでtcp localhost接続が有効になっていることを確認します。

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust

postgresql.confのlisten_addressesおよびポートを確認します。

egrep 'listen|port' /usr/local/var/postgres/postgresql.conf

#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)

清掃

Postgresは、おそらくHomebrewFinkMacPortsまたはEnterpriseDBインストーラーを介してインストールされました。

次のコマンドの出力を確認して、インストールされたパッケージマネージャーを確認します。

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres

1
@Ramyタッチは成功しましたか?/ usr / local / var / postgresおよびserver.logの存在と権限を確認します。ユーザーIDの場合はrwである必要があります。
James Allman、

1
@Ramy:/usr/local/var/postgres/server.logに情報を含めることはできますか?インストールが破損している可能性があり、Homebrewなどの既知のソースを使用してクリーンアップして再インストールする方が速い場合があります。
James Allman、

10
なぜこれがすべて必要なのですか?ノードを開始する方法でpostgresを開始できないのはなぜですか?
Kinnard Hockenhull 2013

32
プログラムを開始および停止するだけの
途方も

3
これはまだ機能しますが、少し時代遅れです。以下の答えbrew services start postgresqlは、より最新の簡単な答えです。
mthorley 2017年

372

postgresql(homebrew経由でインストール)を手動で開始および停止する場合、最も簡単な方法は次のとおりです。

brew services start postgresql

そして

brew services stop postgresql

特定のバージョンがある場合は、必ずバージョンのサフィックスを付けてください。次に例を示します。

brew services start postgresql@10

7
brew servicesもっと早く知りたいのですが...これが私にとって有効な唯一の解決策です。<ありがとうございます!
seanlinsley 2014年

5
brew tap gapple/servicesbrew servicesコマンドが再び機能するようになります
Fabian Leutgeb 2015年

4
github.com/Homebrew/homebrew-servicesbrew tap homebrew/servicesまだ機能しているようです
kangkyu

4
これは、正常に実行された後に 機能initdbします。そうでなければ、それは静かに失敗した(しかしとして示したサービスで、働いているように見え始めbrew services list
ドミトリ

1
brew services restart postgresqlpg_ctlでdbを起動するかbrew services start、「別のサーバーが実行されている可能性があります」と言い、pg_ctlがハングした状態でdbを停止するため、私はを実行する必要がありました。
tomf

181

私はほぼ同じ問題を抱えていて、あなたはinitdbコマンドが修正であると引用しました。これも私にとって解決策でしたが、誰もそれをここに投稿したことはなかったので、それを探している人のために:

initdb /usr/local/var/postgres -E utf8

16
これも私にとってはうまくいきました、initdbはすでに設定が完了していると言ったので、ディレクトリ全体を削除しました。どうもありがとうございました!
ホルヘサンパヨ2013年

5
rm -rf /usr/local/var/postgres
うん

2
これは私にとってもうまくいきました。initdbの前に、postgres dir(chown _your username on your comp_ usr/local/var/postgres)、次にinitdbも変更する必要がありました。その後、再起動時にサーバーが自動的に起動します(Homebrewの指示に従った場合)、または手動で起動しpg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log startます。
septerr 2014

2
initdb(必要に応じて古いディレクトリを削除することを含む)、brew services start postgresql機能する
Dmitri

rm -rf現在データベースにあるすべてのものを使用するという考えが少し怖い場合は、それを完全に削除するのではなくmv /usr/local/var/postgres /usr/local/var/postgres.backup、新しいバックアップディレクトリに移動するようなものを使用してから、コマンドを実行してデータベースを再び起動できます。
Hartley Brody

102

コンピュータが突然再起動した場合

まず、ファイルを削除する必要があります /usr/local/var/postgres/postmaster.pid次に、インストールに応じて、他の多くの方法のいずれかを使用してサービスを再起動できます。

これを確認するには、Postgresのログを見て、何が起こっているのかを確認します。 tail -f /usr/local/var/postgres/server.log


2
tail -f /usr/local/var/postgres/server.logそのファイルを削除する必要があるかどうかを確認できます。REF coderwall.com/p/zf-fww/...
user1448319

鉱山は/ Users / <user> / Library / Application \ Support / Postgres / var-9.6 / postmaster.pidの下にありました
BatteryAcid

自作インストールの場合、パスは~/homebrew/var/postgres/postmaster.pid
blnc

2
うわー...これだけが私のために働いた!postmaster.pidコンピュータが突然再起動された場合に削除する理由を詳しく説明していただけますか?
adkl

1
これは本当に役に立ちました
NinComPoop 2018年

81

別のアプローチは、ランチのgem(launchctlのラッパー)を使用することです:

brew install postgresql
initdb /usr/local/var/postgres -E utf8
gem install lunchy

postgresを起動するには:

lunchy start postgres

postgresを停止するには:

lunchy stop postgres

詳細については、「HomebrewとLunchyを使用してMacにPostgreSQLをインストールする方法」を参照してください。


postgresの設定方法によっては、postgresの代わりにpostgresqlを使用する必要があるかもしれません
Devon Kiss

72

ここに私の2セント:postgres pg_ctlのエイリアスを作成し、それを.bash_profileに入れました(私のpostgresqlバージョンは9.2.4、データベースパスは/Library/PostgreSQL/9.2/dataです)。

alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"

新しいターミナルを起動します。

その後?これでpostgresqlサーバーを起動/停止できます:

postgres.server start
postgres.server stop

ここでは、-Dを使用してデータディレクトリを指定することが重要です
olore

3
「サーバープロセスを所有する(非特権)ユーザーとしてログインしてください(例:「su」を使用)。」sudoだけを実行する場合。+1
pyb 2015

ありがとう。postgresツールのsuを使用するという提案は無残に失敗します。sudo -uは見事に機能します。(エルキャピタン上)
uchuugaka 2016

33

クリーンな方法はるかにあなたがそれを通じインストールしている場合/停止/再起動のpostgresを起動するには、brew単にアンロードおよび/またはインストールに付属しているのlaunchd設定ファイルをロードすることです:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

1行目はpostgresを停止し、2行目はそれを開始します。すべてがそのファイルにあるため、データディレクトリなどを指定する必要はありません。


Brewを介してOS XにインストールされたPostgreSQL 9.5.3に最適です。ありがとう!
jpswain

これは、postgresサーバーが適切にシャットダウンされず、着信接続を受け入れない場合の魅力のように機能します
AugustoSamaméBarrientos

5
Homebrew自体には、これらのコマンドの単純なラッパーがありますbrew services start postgres-v最後にa をスローすると、それが何をしているのかを確認できます。
マークエディントン

28

postgresqlサーバーを起動するには:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

postgresqlサーバーを終了するには:

pg_ctl -D /usr/local/var/postgres stop -s -m fast

また、CLIを使用してエイリアスを作成し、簡単にすることもできます。

alias pg-start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
alias pg-stop='pg_ctl -D /usr/local/var/postgres stop -s -m fast'

これらを使用すると、「pg-start」と入力してPostgresを起動し、「pg-stop」と入力してシャットダウンすることができます。


3
pg_ctl: directory "/usr/local/var/postgres" is not a database cluster directoryこれを修正する方法でエラーが発生しましたか?
Rohman Masyhar


9

homebrewを使用してpostgresqlをインストールする場合:

brew install postgres

出力の最後に、サーバーを起動するための次のメソッドが表示されます。

To have launchd start postgresql at login:
    ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
Then to load postgresql now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
    postgres -D /usr/local/var/postgres

これが最良の方法だと思います。

便宜上、エイリアスを.profileに追加できます。


7

使い捨てのクイックテストデータベースの場合は、サーバーをフォアグラウンドで実行できます。

新しいディレクトリで新しいpostgresデータベースを初期化します

mkdir db
initdb db -E utf8
createdb public

フォアグラウンドでサーバーを起動します(サーバーを停止するにはctrl-C)

postgres -d db

別のシェルセッションでサーバーに接続する

psql -d public

これは素晴らしいように見えますが、私にとっては機能しません-createdbステップを実行するためにサーバーがすでに実行されているわけではありません。サーブを開始しようとすると、まだ存在しないPGDATAまたはconfig-fileが必要であると表示されます。何が欠けていますか?
szeitlin 2016

7

私は同じ問題を抱えており、すべての更新を最初の投稿から実行します。しかし、ログファイルをチェックした後:

/usr/local/var/postgres/server.log

私は本当の原因を見ます:

FATAL:  data directory "/usr/local/var/postgres" has group or world access
DETAIL:  Permissions should be u=rwx (0700).

このディレクトリの変更許可後

chmod 0700 /usr/local/var/postgres

postgresサーバーが起動しました。

毎回チェックログファイル。


5

PostgreSQLはServer.appに統合されています、Mountain LionのApp Storeから入手できるます。つまり、すでに構成されており、起動してユーザーとデータベースを作成するだけです。

ヒント:$ PGDATAなどの定義から始めずに、ファイルの場所をそのまま使用してください。

あなたはこのファイルを持っているでしょう: 。/ライブラリ/Server/PostgreSQL/Config/org.postgresql.postgres.plist

始めること:

sudo serveradmin start postgres

引数で始まるプロセス:

/Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D / Library / Server / PostgreSQL / Data -c listen_addresses = 127.0.0.1、:: 1 -c log_connections = on -c log_directory = / Library / Logs / PostgreSQL -c log_filename = PostgreSQL.log -c log_line_prefix =%t -c log_lock_waits = on -c log_statement = ddl -c logging_collector = on -c unix_socket_directory = / private / var / pgsql_socket -c unix_socket_group = _postgres -c unix_socket_permissions

あなたはsudoすることができます:

sudo -u _postgres psql template1

または接続:

psql -h localhost -U _postgres postgres

データディレクトリ、バージョン、実行ステータスなどは、

sudo serveradmin fullstatus postgres  

組み込みのPostgresを使用する方法を示す他の多くを見つけることができませんでした。serveradminコマンドを見つけるのにも役立ちました。ありがとう
ジェイソンS

rootユーザー(sudo)としてサービスを実行することは、決して良い考えではありません。セキュリティの問題が発生するとすぐに、コンピューター全体が危険にさらされます。
カルロスバルセロナ

postgresqlはrootとしてではなく、_postgresとして実行されています。
bbaassssiiee

5

この回答のバリエーション:https : //stackoverflow.com/a/13103603/2394728

initdb `brew --prefix`/var/postgres/data -E utf8`` &&  pg_ctl -D /usr/local/var/postgres/data -l logfile start

参照する回答へのリンクを追加する必要があります。
Jeffrey Bosboom、2015

これは、私のpgが正常に機能していて、突然機能しなくなり、/ var / postgresフォルダーが見つからなかったため、役に立ちました。
shinesecret

これがリンクされた回答より優れている理由について誰かがコメントしていただけませんか?前回からすでに賛成していたのを見て、同様の問題があったので、ここでは理由を説明しないので、これを使用します。
MCB 2015年

4

開発目的で最も簡単な方法の1つは、公式サイトからPostgres.appをインストールすることです。アプリケーションフォルダーから、またはターミナルで次のコマンドを使用して開始/停止できます。

# start
open -a Postgres

# stop
killall Postgres
killall postgres

18
killallおそらくデータベースを停止する最良の方法ではありません。
Risadinha 2014年

4
   # remove old database files (If there was any)
   $rm -rf /usr/local/var/postgres    # install the binary

    $ brew install postgresql

    # init it
    $ initdb /usr/local/var/postgres

    # start the postgres server
    $ postgres -D /usr/local/var/postgres

    # create your database
    $ createdb mydb


    # Access db.
    $ psql mydb
    psql (9.0.1)
    Type "help" for help.

4

brewを使用してインストールした場合は、以下のコマンドで十分です。

brew services restart postgresql

そしてこれは時々機能しないかもしれません、その場合以下の2つのコマンドは間違いなく機能するはずです

rm /usr/local/var/postgres/postmaster.pid

pg_ctl -D /usr/local/var/postgres start

1

同じエラーメッセージが表示されるにもかかわらず、上記のいずれの回答でも問題が解決しませんでした。ロックされていて接続を許可していない既存のpostmaster.pidファイルを削除することで、インスタンスを再び稼働させることができました。


1

macportsの場合は、load / unloadコマンドと実行中のサーバーのポート名を使用するだけです。

sudo port load postgresql96-server
- or -
sudo port unload postgresql96-server

そのため、/Library/LaunchDaemons/org.macports.postgresql96.plistファイルの場所を覚えておく必要はありません



1

EnterpriseDBインストーラーを使用してPostgresをインストールした場合、@ Kenialが提案する方法はその方法です。

sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data start
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data stop

1

それは私のために働いた(macOS 10.13) sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

または最初に cd /Library/PostgreSQL/9.6/bin/


1

$ brew upgrade postgres

私のために修正しました。

もちろん、それによってpostgresのバージョンがアップグレードされ、すべての依存関係が更新/インストールされます。

警告:postgresqlのバージョンが変更される可能性があることを認識して、これを行ってください。私にとって、それは大したことではありませんでした。



0

これは、Craig Ringerに触発されて、いつもうまくいきました。

brew install proctools
sudo pkill -u postgres

proctoolsにはpkillが含まれています。Brewがない場合:https : //brew.sh/



0

誰かのために役立つかもしれないいくつかのエッジケースがあります:

postgres.pidにPIDを入力するというオプションがあります。しかし、マシンを再起動し、postgressが再び戻る前に、他のプロセスがそのPIDを取得します。それが発生する場合、pg_ctlステータスとbrewサービスの両方がpostgresステータスについて尋ねられ、UPであることを通知します。ただps aux | grepを実行して、それが本当にpostgressかどうかを確認します


0

自作が道!!

サービスを開始するには:

brew services start postgresql   

リストするには:

brew services list |grep postgres

サービスを停止します。:

brew services stop postgresql 

0

それをbrewで直接インストールし、macパッケージから直接インストールしなかった場合、デフォルトの場所や変数などをすべて使用すると、PostgreSQL 12でこれが機能しました。

$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/12/bin/pg_ctl -D /Library/PostgreSQL/12/data/ stop

0

私も同じ問題に直面していました。これらのソリューションをすべて試しましたが、うまくいきませんでした。

最後に、Django設定のpostgres HOSTをからlocalhostに変更することで、それを機能させることができました127.0.0.1

それが役に立てば乾杯。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.