Docker や VirtualBox ではなく Mac に PostgreSQL をインストールしてみます。
Homebrew を更新してから PostgreSQL 最新版をインストールします。
$ brew update
$ brew install postgresql
パスを設定します。
$ brew link postgresql
postinstall をします。
$ brew postinstall postgresql
インストールが完了したら、バージョンを確認します。
$ postgres --version
psql (PostgreSQL) 12.3
データベースを初期化(UTF-8)します。
$ initdb /usr/local/var/postgres -E utf8
PostgreSQL を起動します。
$ brew services start postgresql
PostgreSQL の起動を確認します。
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
postgres | yoo | UTF8 | C | C |
template0 | yoo | UTF8 | C | C | =c/yoo +
| | | | | yoo=CTc/yoo
template1 | yoo | UTF8 | C | C | =c/yoo +
| | | | | yoo=CTc/yoo
DB データのパスを環境変数に設定します。
$ echo export PGDATA=/usr/local/var/postgres >> ~/.bash_profile
$ source ~/.bash_profile
~/.bash_profile に書き込まれます。
createdb でデータベースを作成します。
$ createdb sample
DB が作成されているのを確認します。
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
postgres | yoo | UTF8 | C | C |
sample | yoo | UTF8 | C | C |
...
$ psql -h localhost -U default -l
psql: error: could not connect to server: FATAL: unsupported frontend protocol 1234.5679: server supports 2.0 to 3.0
Macにインストールした psql のバージョンを変更する。
$ which psql
/usr/local/opt/libpq/bin/psql
$brew search postgresql
...
$ brew install postgresql@11
$ alias psql='/usr/local/opt/postgresql@11/bin/psql'
pgAdmin4 からブラウザで起動することになった。
ただポートを自動生成してブラウザ起動するので、ブラウザを閉じてURL(ポート)がわからないと開けないという仕様 pgAdmin4アプリ自体をクリックしても開かないので以下で対応 - pgAdmin4 メニューのURLコピー - pgAdmin4 シャットダウン
コピー後にブラウザでアクセス
それでもひらけない場合は、シャットダウンして再起動
文字コードを en_US.UTF-8 から ja_JP.UTF-8 に変更する方法
※この処理は DBが全てリセットされてしまうので注意!
# localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8 # vi /etc/locale.gen ja_JP.UTF-8 UTF-8 # update-locale LANG=ja_JP.UTF-8
再ログイン
# locale LANG=ja_JP.UTF-8 LANGUAGE= LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
# /etc/init.d/postgresql stop # pg_dropcluster --stop 11 main
# pg_createcluster 11 -e UTF-8 --locale ja_JP.UTF-8 --start main # /etc/init.d/postgresql start
$ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres
host all all ::1/128 trust
何だか納得いかないが、IPv6で接続しているんだろうか?DROP SCHEMA public DASCADE; CREATE SCHEMA public;