macにHomebrewでPostgreSQLをインストールした手順をメモしておく。
前提
環境は以下になる。
$ sw_vers ProductName: macOS ProductVersion: 15.2 BuildVersion: 24C101
Homebrew
$ brew --version Homebrew 4.4.15
事前確認
インストールが可能なバージョンを確認する。
$ brew search postgresql ==> Formulae postgresql@11 postgresql@12 postgresql@13 postgresql@14 postgresql@15 postgresql@16 postgresql@17 qt-postgresql postgrest ==> Casks navicat-for-postgresql posture-pal If you meant "postgresql" specifically: postgresql breaks existing databases on upgrade without human intervention. See a more specific version to install with: brew formulae | grep postgresql@
手順
今回はバージョン17をインストールするので、@17
をつけてコマンドを実行する。(brew install postgresql@17
)
ちなみに現時点(2025/1)でバージョンを省略するとバージョン14がインストールされる。
$ brew install postgresql@17 ==> Downloading https://formulae.brew.sh/api/formula.jws.json ###################################################################################################################################################################### 100.0% ==> Downloading https://formulae.brew.sh/api/cask.jws.json ###################################################################################################################################################################### 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/postgresql/17/manifests/17.2 ###################################################################################################################################################################### 100.0% ==> Fetching dependencies for postgresql@17: krb5 ==> Downloading https://ghcr.io/v2/homebrew/core/krb5/manifests/1.21.3 Already downloaded: /Users/******************/Library/Caches/Homebrew/downloads/c5793441ca90aa09420dddd84f19d4aaf86da4f0b3f60c84940d77b1cb4c6863--krb5-1.21.3.bottle_manifest.json ==> Fetching krb5 ==> Downloading https://ghcr.io/v2/homebrew/core/krb5/blobs/sha256:75d0ce70b754c159e642f7e9afff27add08203423792f34c240a20ea014bfcec ###################################################################################################################################################################### 100.0% ==> Fetching postgresql@17 ==> Downloading https://ghcr.io/v2/homebrew/core/postgresql/17/blobs/sha256:e0efcbfe6f8bcfa1c63820af7a076f9d8b91b3c609c2e0f5dbfbf8b4df2d29f0 ###################################################################################################################################################################### 100.0% ==> Installing dependencies for postgresql@17: krb5 ==> Installing postgresql@17 dependency: krb5 ==> Downloading https://ghcr.io/v2/homebrew/core/krb5/manifests/1.21.3 Already downloaded: /Users/******************/Library/Caches/Homebrew/downloads/c5793441ca90aa09420dddd84f19d4aaf86da4f0b3f60c84940d77b1cb4c6863--krb5-1.21.3.bottle_manifest.json ==> Pouring krb5--1.21.3.arm64_sequoia.bottle.tar.gz 🍺 /opt/homebrew/Cellar/krb5/1.21.3: 163 files, 5.6MB ==> Installing postgresql@17 ==> Pouring postgresql@17--17.2.arm64_sequoia.bottle.tar.gz ==> /opt/homebrew/Cellar/postgresql@17/17.2/bin/initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@17 ==> Caveats This formula has created a default database cluster with: initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@17 When uninstalling, some dead symlinks are left behind so you may want to run: brew cleanup --prune-prefix postgresql@17 is keg-only, which means it was not symlinked into /opt/homebrew, because this is an alternate version of another formula. If you need to have postgresql@17 first in your PATH, run: echo 'export PATH="/opt/homebrew/opt/postgresql@17/bin:$PATH"' >> ~/.zshrc For compilers to find postgresql@17 you may need to set: export LDFLAGS="-L/opt/homebrew/opt/postgresql@17/lib" export CPPFLAGS="-I/opt/homebrew/opt/postgresql@17/include" To start postgresql@17 now and restart at login: brew services start postgresql@17 Or, if you don't want/need a background service you can just run: LC_ALL="C" /opt/homebrew/opt/postgresql@17/bin/postgres -D /opt/homebrew/var/postgresql@17 ==> Summary 🍺 /opt/homebrew/Cellar/postgresql@17/17.2: 3,813 files, 71.4MB ==> Running `brew cleanup postgresql@17`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). ==> Caveats ==> postgresql@17 This formula has created a default database cluster with: initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@17 When uninstalling, some dead symlinks are left behind so you may want to run: brew cleanup --prune-prefix postgresql@17 is keg-only, which means it was not symlinked into /opt/homebrew, because this is an alternate version of another formula. If you need to have postgresql@17 first in your PATH, run: echo 'export PATH="/opt/homebrew/opt/postgresql@17/bin:$PATH"' >> ~/.zshrc For compilers to find postgresql@17 you may need to set: export LDFLAGS="-L/opt/homebrew/opt/postgresql@17/lib" export CPPFLAGS="-I/opt/homebrew/opt/postgresql@17/include" To start postgresql@17 now and restart at login: brew services start postgresql@17 Or, if you don't want/need a background service you can just run: LC_ALL="C" /opt/homebrew/opt/postgresql@17/bin/postgres -D /opt/homebrew/var/postgresql@17
psqlコマンドのパスを通すため、zshrc
に追記する。
$ echo 'export PATH="/opt/homebrew/opt/postgresql@17/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc
確認
psqlコマンドのパスを確認
$ which psql
/opt/homebrew/opt/postgresql@17/bin/psql
PostgreSQLのバージョンを確認
$ psql --version psql (PostgreSQL) 17.2 (Homebrew)
サービスの起動をする
brew services start
で、postgresqlのサービスを起動する。
$ brew services start postgresql Error: Formula `postgresql@14` is not installed.
バージョンを指定しないで実行すと、バージョン14を起動しようとしてしまいエラーになる。
brew install postgresql
でインストールをすると、デフォルトでバージョン14がインストールされるのでその影響かもしれない。
バージョンを指定してサービスを実行する。
$ brew services start postgresql@17 ==> Successfully started `postgresql@17` (label: homebrew.mxcl.postgresql@17)
データベースの確認
$ psql -l データベース一覧 名前 | 所有者 | エンコーディング | ロケールプロバイダー | 照合順序 | Ctype(変換演算子) | ロケール | ICUルール: | アクセス権限 -----------+------------------+------------------+----------------------+----------+-------------------+----------+------------+--------------------------------------- postgres | ****************** | UTF8 | libc | C | C | | | template0 | ****************** | UTF8 | libc | C | C | | | =c/****************** + | | | | | | | | ******************=CTc/****************** template1 | ****************** | UTF8 | libc | C | C | | | =c/****************** + | | | | | | | | ******************=CTc/****************** (3 行)
接続をする
- ホストを指定してサーバーに接続する(
psql postgres
での接続も可能) \l
でデータベースの一覧を確認する。(psql -l
と同じ内容になるはず)\q
で抜ける
$ psql -h localhost -p 5432 -U ****************** -d postgres psql (17.2 (Homebrew)) "help"でヘルプを表示します。 postgres=# postgres=# \l データベース一覧 名前 | 所有者 | エンコーディング | ロケールプロバイダー | 照合順序 | Ctype(変換演算子) | ロケール | ICUルール: | アクセス権限 -----------+------------------+------------------+----------------------+----------+-------------------+----------+------------+--------------------------------------- postgres | ****************** | UTF8 | libc | C | C | | | template0 | ****************** | UTF8 | libc | C | C | | | =c/****************** + | | | | | | | | ******************=CTc/****************** template1 | ****************** | UTF8 | libc | C | C | | | =c/****************** + | | | | | | | | ******************=CTc/****************** (3 行) postgres=# \q
データベースを作成して、テーブルを作成する
- 接続をする
CREATE DATABASE
でtest
というデータベースを作成するtest
データベースにdistributors
テーブルを作成する
$ psql postgres psql (17.2 (Homebrew)) "help"でヘルプを表示します。 postgres=# CREATE DATABASE test; CREATE DATABASE postgres=# \l データベース一覧 名前 | 所有者 | エンコーディング | ロケールプロバイダー | 照合順序 | Ctype(変換演算子) | ロケール | ICUルール: | アクセス権限 -----------+------------------+------------------+----------------------+----------+-------------------+----------+------------+--------------------------------------- postgres | ****************** | UTF8 | libc | C | C | | | template0 | ****************** | UTF8 | libc | C | C | | | =c/****************** + | | | | | | | | ******************=CTc/****************** template1 | ****************** | UTF8 | libc | C | C | | | =c/****************** + | | | | | | | | ******************=CTc/****************** test | ****************** | UTF8 | libc | C | C | | | (4 行) postgres=# \c test データベース"test"にユーザー"******************"として接続しました。 test=# CREATE TABLE distributors ( did integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, name varchar(40) NOT NULL CHECK (name <> '') ); CREATE TABLE test=# \dt リレーション一覧 スキーマ | 名前 | タイプ | 所有者 ----------+--------------+----------+------------------ public | distributors | テーブル | ****************** (1 行) test=# SELECT * FROM distributors; did | name -----+------ (0 行) test=# \q
参考:https://www.postgresql.jp/document/16/html/sql-createtable.html
サービスの停止をする
brew services stop
で、postgresqlのサービスを起動する。
$ brew services stop postgresql@17 Stopping `postgresql@17`... (might take a while) ==> Successfully stopped `postgresql@17` (label: homebrew.mxcl.postgresql@17)