以前下記ブログでデータベース作成や、基本的なコマンドをまとめたが、今回はその前段階のSQLサーバー起動について
環境
当方の環境はMac、OSはBIg Sur
% sw_vers ProductName: macOS ProductVersion: 11.6.2 BuildVersion: 20G314
PostgresSQLの前準備
PostgresSQLを起動する前に、まずはデータベースサーバを起動させる必要がある。
サーバ起動なしにはPostgreSQLも起動できない。
すなわちpsqlと言うデータベースを扱うターミナル(PostgreSQL interactive terminal)を立ち上げようとしても、下記エラーが出て起動できない。
% psql postgres psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory Is the server running locally and accepting connections on that socket?
データベースサーバの起動
と言う事でまずはデータベースサーバの起動。
起動の為のコマンドはbrew upgradeの時に下記の通り教えてくれる。
% brew upgrade (中略) To restart postgresql after an upgrade: brew services restart postgresql Or, if you don't want/need a background service you can just run: /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres
これによると起動方法は下記2つ
- Homebrewを利用して起動
- ターミナルのコマンドで起動
1. Homebrewを利用して起動
私も多用している方法だが、Homebrewを利用し、”brew services restart postgresql”でサーバを起動する。
% brew services restart postgresql ==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
最初は”restar”じゃなくて”start”じゃないの?と思ったあなた。私も同様に思いました。
確かに、”brew services start postgresql”でも起動するが、バックグラウンドで起動していると、下記エラーが出て気持ち悪い。
% brew services start postgresql Service `postgresql` already started, use `brew services restart postgresql` to restart.
restartをするとバックグラウンドで起動していても下記の通りstopしてstartしてくれる。
% brew services restart postgresql Stopping `postgresql`... (might take a while) ==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql) ==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
都度使い始めは再起動してから使い始めるのがスッキリ気持ち良いので、バックグラウンドで動いていようがいまいが、”restart”で(再)起動するのがデフォルトとして良さそう。
Homebrewで起動すると止めるまで動いている
ところで、”brew services start postgresql”で起動すると、下記の通り”brew services stop postgresql”のコマンドを入れて”Successfully stopped postgresql
“を見るまでずっと背後(バックグラウンド)でpostgresqlが起動している事になる。
% brew services stop postgresql Stopping `postgresql`... (might take a while) ==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)
特に負荷を感じる事も無かったので当方はこちらを多用していたが、環境によっては都度起動する方が良いのかもしれない。
その場合の、バックグラウンドで動かし続けない、都度起動して停止したい場合の起動方法がこの2つ目ターミナルのコマンドで起動。
2. ターミナルのコマンドで起動
ターミナルで直接”/usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres”を打ち込んで起動。
% /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres 2022-05-14 12:48:09.617 JST [60997] LOG: starting PostgreSQL 14.3 on x86_64-apple-darwin20.6.0, compiled by Apple clang version 13.0.0 (clang-1300.0.29.30), 64-bit 2022-05-14 12:48:09.619 JST [60997] LOG: listening on IPv6 address "::1", port 5432 2022-05-14 12:48:09.619 JST [60997] LOG: listening on IPv4 address "127.0.0.1", port 5432 2022-05-14 12:48:09.619 JST [60997] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432" 2022-05-14 12:48:09.630 JST [60998] LOG: database system was shut down at 2022-05-14 12:48:06 JST 2022-05-14 12:48:09.646 JST [60997] LOG: database system is ready to accept connections
この場合のデータベースサーバを止める方法は、コントロールc(ctr+c)か、お勧めしないが強制的にターミナルを閉じるか、Macをシステム終了させる事。
下記はctr+cで止めた場合のターミナル画面。
^C2022-05-14 12:50:51.089 JST [61031] LOG: received fast shutdown request 2022-05-14 12:50:51.090 JST [61031] LOG: aborting any active transactions 2022-05-14 12:50:51.094 JST [61031] LOG: background worker "logical replication launcher" (PID 61038) exited with exit code 1 2022-05-14 12:50:51.099 JST [61033] LOG: shutting down 2022-05-14 12:50:51.109 JST [61031] LOG: database system is shut down
作業は別タブで
この2で起動した場合、起動させたタブではLOGを取る様なので、データベースターミナルpsqlの操作は別タブで行う事になる。
(別タブで) % psql postgres psql (14.3) Type "help" for help.
以上、PostgreSQL 起動についての備忘録。
現時点ではMac使用なら1つ目のHomebrew利用が便利と考えます。
Homebrew バックグラウンドで動いているかの確認”brew services”
今バックグラウンドで動いているかどうかは”brew services list”で確認できる。
% brew services restart postgresql ==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql) % brew services list Name Status User File postgresql started username ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
止めた後はStatusが”none”になっているのが分かる。
% brew services stop postgresql Stopping `postgresql`... (might take a while) ==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql) % brew services list Name Status User File postgresql none
ちなみに、2の方法で起動した場合、Homebrewで起動していない訳なのでここのStatusは”none”のまま。
そう考えると、できるだけbrewで管理したい向きにはやはり1のHomebrew利用での起動が望ましいと考える。
コメント