brew install postgresql
した時に以下のメッセージが表示されたと思います。
==> postgresql
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
This formula has created a default database cluster with:
initdb --locale=C -E UTF-8 /usr/local/var/postgres
For more details, read:
https://www.postgresql.org/docs/13/app-initdb.html
To have launchd start postgresql now and restart at login:
brew services start postgresql
Or, if you don't want/need a background service you can just run:
pg_ctl -D /usr/local/var/postgres start
まず、最初の段落は PostgreSQL 12 以前で作ったデータベースを新バージョン (13.x) で使うには以下のコマンドを実行するればいいということなので、PostgreSQL 12 以前を使ってなければ無視して大丈夫です。
次の段落の initdb は PostgreSQL のデータベースを初期化するコマンドですが、brew install postgresql の際に自動的にデータベースは作成済みなので、これも無視して大丈夫です。(データベースがおかしくなって初期化したくなったらこのコマンドを思い出せばいいでしょう。)
最後の段落が肝心の PostgreSQL サーバーの起動方法ですが、2 通りあります。
brew services start postgresql
は Homebrew が提供するサービス管理機能を使って自動的に起動するように設定する方法で、このコマンドは 1 回だけ実行すれば、次回以降 macOS を再起動した際には自動的に PostgreSQL サーバーが起動するようになります。
pg_ctl -D /usr/local/var/postgres start
は上記のサービス管理機能を使わずに手動で PostgreSQL サーバーを起動する方法で、macOS を再起動した場合には毎回実行する必要があります。
なお、brew services ですが、brew services
(または brew services list
) というコマンドで現在動いているサービスを確認できます。また、サービスを停止したい場合は brew services stop postgresql
とします。
$ brew services start postgresql
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
$ brew services list
Name Status User Plist
postgresql started hoshi /Users/hoshi/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
※ なお、export PGDATA='/usr/local/var/postgres' は不要だと思います…。
ところで、「サービス」とは何かご存知でしょうか。「サーバー」や「デーモン」と言ったりもしますが、これは直接ユーザーと対話するプログラムではなく、バックグラウンドで常に待機していて、何かあれば処理をしてくれるものです。
上に PostgreSQL サーバーの起動方法を書きましたが、これらのコマンド実行しても、すぐにシェルに戻ってきてしまい、データベースに接続はしません。PostgreSQL データベースに接続するには psql
という別のコマンド (サーバーに接続するためのコマンドなので、クライアントと言ったりもします。) があって、これを使う必要があります。
まず、psql -l
というコマンドを実行してみましょう。
(なお、$
はシェルのプロンプトを表すことにしますので、入力しなくて構いません。)
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
postgres | hoshi | UTF8 | C | C |
template0 | hoshi | UTF8 | C | C | =c/hoshi +
| | | | | hoshi=CTc/hoshi
template1 | hoshi | UTF8 | C | C | =c/hoshi +
| | | | | hoshi=CTc/hoshi
(3 rows)
psql -l は PostgreSQL が管理するデータベースを一覧表示するもので、インストール直後は postgres, template0, template1 という 3 つのデータベースが自動的に作られています。この 3 つのデータベースは PostgreSQL そのものの管理用 (ユーザーやデータベースの一覧が見れたりします) なので、普通はいじる必要はないと思います。
なお、これらの管理用データベースの所有者は、普通に UNIX などで PostgreSQL を扱う場合には postgres という PostgreSQL 管理者ユーザーが所有者になっていることが一般的ですが、Homebrew でインストールした PostgreSQL では一般ユーザーがそのまま PostgreSQL 管理者ユーザーを兼用する設定になってますので、ご注意ください。
一般的な PostgreSQL のインストール手順では、ここで PostgreSQL 管理者ユーザーとは別に PostgreSQL 操作用のユーザーを作ることになりますが、Homebrew ではすでに自分の macOS アカウントと同じ名前の PostgreSQL ユーザーが作られてますので、その手順は不要になります。また、一般的には PostgreSQL にアクセスするためのパスワードを設定することが推奨されてますが、Homebrew ではパスワードも設定しないことも少なくないのでは…。
実際にデータベースを扱う場合は、まず createdb
コマンドでデータベースを作る必要があります。
例えば、testdb
というデータベースを作るには、次のようにします。
$ createdb testdb
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
postgres | hoshi | UTF8 | C | C |
template0 | hoshi | UTF8 | C | C | =c/hoshi +
| | | | | hoshi=CTc/hoshi
template1 | hoshi | UTF8 | C | C | =c/hoshi +
| | | | | hoshi=CTc/hoshi
testdb | hoshi | UTF8 | C | C |
(4 rows)
作ったデータベースに接続するには、psql
コマンドを使います。
test
という名前のテーブルを作って、データを入れて、表示してみます。
$ psql testdb
psql (13.1)
Type "help" for help.
testdb=# \d
Did not find any relations.
testdb=# CREATE TABLE test (id INT, name TEXT);
CREATE TABLE
testdb=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | test | table | hoshi
(1 row)
testdb=# INSERT INTO test VALUES (1, 'abc');
INSERT 0 1
testdb=# SELECT * FROM test;
id | name
----+------
1 | abc
(1 row)
testdb=# \q
データベース名=#
というのが psql のプロンプトで、\d
でテーブル一覧、\q
(または Ctrl-D) で psql から終了します。あとは一般向けの PostgreSQL 解説をお読みください。