PostgreSQL
環境設定

mysql使いがpostgresqlを入れてみた


いきさつ

rails tutrialの中級をやっていまして、チュートリアルではmysqlではなく、postgresqlを使っていたので、これを期にpostgresqlを使ってみようと思いはじめてみました。

立ち上げに苦労したので、備忘録として残しておこうと思います。

https://medium.freecodecamp.org/lets-create-an-intermediate-level-ruby-on-rails-application-d7c6e997c63f


環境

元々、私の場合は postgresql自体は入っていたので、

$ brew info postgresql                                                                                                                                                  16:10:37

postgresql: stable 10.4, HEAD
Object-relational database system
https://www.postgresql.org/
Conflicts with:
postgres-xc (because postgresql and postgres-xc install the same binaries.)
/usr/local/Cellar/postgresql/10.1 (3,372 files, 38.8MB) *
Built from source on 2018-01-19 at 18:46:22
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/postgresql.rb
==> Dependencies
Required: openssl ✔, readline ✔
Optional: python ✔, python@2 ✔
==> Options
--with-dtrace
Build with DTrace support
--with-python
Enable PL/Python3 (incompatible with --with-python@2)
--with-python@2
Enable PL/Python2
--without-perl
Build without Perl support
--without-tcl
Build without Tcl support
--HEAD
Install HEAD version
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database

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

上記のように、 10.4が入っていました。

上記のコマンドを打って、postgresqlが入ってないことを確認できた人は

$ brew install postgresql

で、postgresqlをinstallしてください〜


立ち上げ

私の場合はもうすでに入っていたので、意気揚々とデータベースサーバ立ち上げれば、できるじゃんと思い

$ postgres -D /usr/local/var/postgres

2018-07-14 14:18:16.330 JST [84758] FATAL: database files are incompatible with server
2018-07-14 14:18:16.330 JST [84758] DETAIL: The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.4.

をすると、エラーが表示されまして,どうやらデータベース本体のバージョンと今のpostgresqlのバージョンが合っていなかったようなので、

$ brew postgresql-upgrade-database

としてやると、データベースの無事にアップグレードが完了しました。

再度、サーバを立ち上げるべく

$ postgres -D /usr/local/var/postgres/

postgres: could not access the server configuration file "/usr/local/var/postgres/postgresql.conf": No such file or directory

ふむふむ、なるほど、postgresql.confがないと。。。

実際に上記のディレクトリに行ってみると、

$ cd /usr/local/var/postgres

$ ls

中身は空っぽだったので、色々とググってpostgresqlのデータベースを初期化しないといけないことが分かり

$ initdb /usr/local/var/postgres -E utf8                                                                                                                                            14:39:43

The files belonging to this database system will be owned by user "hogehoge".
This user must also own the server process.

The database cluster will be initialized with locale "ja_JP.UTF-8".
initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8"
The default text search configuration will be set to "simple".

Data page checksums are disabled.

fixing permissions on existing directory /usr/local/var/postgres ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

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

今度こそサーバ立ち上げ

$ postgres -D /usr/local/var/postgres                                                                                                                                    16:37:26

2018-07-14 16:37:28.798 JST [84758] LOG: listening on IPv6 address "::1", port 5432
2018-07-14 16:37:28.798 JST [84758] LOG: listening on IPv4 address "127.0.0.1", port 5432
2018-07-14 16:37:28.800 JST [84758] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2018-07-14 16:37:28.817 JST [84759] LOG: database system was shut down at 2018-07-14 16:37:20 JST
2018-07-14 16:37:28.824 JST [84758] LOG: database system is ready to accept connections

^C2018-07-14 16:38:01.963 JST [84758] LOG: received fast shutdown request
2018-07-14 16:38:01.967 JST [84758] LOG: aborting any active transactions
2018-07-14 16:38:01.968 JST [84758] LOG: worker process: logical replication launcher (PID 84765) exited with exit code 1
2018-07-14 16:38:01.968 JST [84760] LOG: shutting down
2018-07-14 16:38:01.979 JST [84758] LOG: database system is shut down

$ pg_ctl start -D /usr/local/var/postgres 16:38:02
waiting for server to start....2018-07-14 16:38:12.567 JST [84776] LOG: listening on IPv6 address "::1", port 5432
2018-07-14 16:38:12.567 JST [84776] LOG: listening on IPv4 address "127.0.0.1", port 5432
2018-07-14 16:38:12.569 JST [84776] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2018-07-14 16:38:12.587 JST [84777] LOG: database system was shut down at 2018-07-14 16:38:01 JST
2018-07-14 16:38:12.593 JST [84776] LOG: database system is ready to accept connections
done
server started

postgres -D /usr/local/var/postgres と pg_ctl start -D /usr/local/var/postgresどっちも試したみたのですが、 pg_ctlの方はバックグラウンドで立ち上げてくれるみたいなので、こっちで立ち上げました。


クライアントの設定

クライアントの選定では、 posticoを選定しました。

以下、設定画面です。

スクリーンショット 2018-07-14 16.56.07.png

無事、接続することができました。


まとめ

この辺mの設定、mysqlのときにもやったはずですが忘れてしまっていたので良いエクササイズになりました。

どなたかの参考になれば :bow: