MacにHomebrewでPostgreSQLをインストールしてデータベースを作る
環境
OS : macOS Hight Sierra v10.13.2
Homebrew : 1.5.2
HomebrewでPostgreSQLをインストールして起動する
Homebrewを最新化してインストールする準備をする
# 異常がないか確認する $ brew doctor Your system is ready to brew. # アップデートする $ brew update Updated 5 taps (homebrew/science, homebrew/core, homebrew/php, homebrew/versions, caskroom/cask). ==> New Formulae amber kallisto <省略> # バージョンを確認する $ brew -v Homebrew 1.5.2 Homebrew/homebrew-core (git revision 5c4df; last commit 2018-01-25)
HomebrewでPostgreSQLをインストールする
# どんなバージョンがあるか確認する $ brew search postgresql ==> Searching local taps... postgresql postgresql@9.4 postgresql@9.5 postgresql@9.6 ==> Searching taps on GitHub... caskroom/cask/navicat-for-postgresql caskroom/cask/photo-supreme-postgresql ==> Searching blacklisted, migrated and deleted formulae... # 今回はv9.6をインストールする $ brew install postgresql@9.6 <省略> ==> Caveats If builds of PostgreSQL 9 are failing and you have version 8.x installed, you may need to remove the previous version first. See: https://github.com/Homebrew/legacy-homebrew/issues/2510 To migrate existing data from a previous major version (pre-9.0) of PostgreSQL, see: https://www.postgresql.org/docs/9.6/static/upgrading.html To migrate existing data from a previous minor version (9.0-9.5) of PostgreSQL, see: https://www.postgresql.org/docs/9.6/static/pgupgrade.html You will need your previous PostgreSQL installation from brew to perform `pg_upgrade`. Do not run `brew cleanup postgresql@9.6` until you have performed the migration. This formula is keg-only, which means it was not symlinked into /usr/local, because this is an alternate version of another formula. If you need to have this software first in your PATH run: echo 'export PATH="/usr/local/opt/postgresql@9.6/bin:$PATH"' >> ~/.bash_profile For compilers to find this software you may need to set: LDFLAGS: -L/usr/local/opt/postgresql@9.6/lib CPPFLAGS: -I/usr/local/opt/postgresql@9.6/include To have launchd start postgresql@9.6 now and restart at login: brew services start postgresql@9.6 Or, if you don't want/need a background service you can just run: pg_ctl -D /usr/local/var/postgresql@9.6 start ==> Summary 🍺 /usr/local/Cellar/postgresql@9.6/9.6.6: 3,273 files, 36.8MB
環境変数を設定する
# PATHを設定する $ echo 'export PATH="/usr/local/opt/postgresql@9.6/bin:$PATH"' >> ~/.bash_profile $ source .bash_profile $ printenv PATH /usr/local/bin:/Users/mana/.phpenv/shims:/Users/mana/.phpenv/bin:/usr/local/bin:/Users/mana/.phpenv/shims:/Users/mana/.phpenv/bin:/usr/local/opt/postgresql@9.6/bin:/usr/local/Cellar/ant/1.10.0/libexec/bin:/usr/local/bin:/usr/local/sbin:/Users/mana/.nodebrew/current/bin:/Users/mana/bin/Sencha/Cmd/6.0.2.14/..:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin # デフォルトのデータディレクトリの場所を設定する $ echo 'export PGDATA="/usr/local/var/postgres"' >> ~/.bash_profile $ source .bash_profile $ printenv PGDATA /usr/local/var/postgres
PostgreSQLのデータベースクラスタを作成する
$ pg_ctl initdb -o "-E utf8 -U postgres" The files belonging to this database system will be owned by user "mana". 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. creating 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: /usr/local/Cellar/postgresql@9.6/9.6.6/bin/pg_ctl -D /usr/local/var/postgres -l logfile start
概要
pg_ctl init[db] [-s] [-D datadir] [-o initdb-options]
説明
initまたはinitdbモードはPostgreSQLの新しいデータベースクラスタを作成します。 データベースクラスタとは、単一のサーバインスタンスで管理されるデータベースの集合です。 このモードはinitdbコマンドを呼び出します。 詳しくはinitdbを参照して下さい。
オプション
-D datadir
データベース設定ファイルのファイルシステム上の場所を指定します。 これが省略された場合、環境変数PGDATAが使われます。
-o initdb-options
initdbコマンドに直接渡すオプションを指定します。
このオプションは、確実にひとまとめとして渡すために、通常は単一引用符または二重引用符で囲まなければなりません。
pg_ctl
initdb — PostgreSQLのデータベースクラスタを新しく作成する
概要
initdb [option...] [ --pgdata | -D ] directory
オプション
-E encoding
テンプレートデータベースの符号化方式を選択します。
-U username
データベースのスーパーユーザのユーザ名を選択します。 initdbを実行している実効ユーザの名前がデフォルトです。 スーパーユーザの名前はあまり重要ではありませんが、慣習的に使われているpostgresを(オペレーティングシステムのユーザ名と異なっていても)使っても良いでしょう。
initdb
PostgreSQLサーバを起動してみてみる
$ pg_ctl status pg_ctl: no server running # 起動する $ pg_ctl -D /usr/local/var/postgres -l logfile start server starting $ pg_ctl status pg_ctl: server is running (PID: 68826) /usr/local/Cellar/postgresql@9.6/9.6.6/bin/postgres "-D" "/usr/local/var/postgres" # バージョンをみてみる $ psql -V psql (PostgreSQL) 9.6.6 # データベース一覧をみてみる $ psql -l -U postgres 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 (3 rows) # ユーザ一覧をみてみる $ psql -c 'select * from pg_user' -U postgres usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig ----------+----------+-------------+----------+---------+--------------+----------+----------+----------- postgres | 10 | t | t | t | t | ******** | | (1 row) # ロール一覧をみてみる $ psql -c 'select * from pg_roles' -U postgres rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid -------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+------ postgres | t | t | t | t | t | t | -1 | ******** | | t | | 10 pg_signal_backend | f | t | f | f | f | f | -1 | ******** | | f | | 4200 (2 rows)
psql — PostgreSQLの対話的ターミナル
概要
psql [option...] [dbname [username]]
オプション
-c command
psqlに対し、指定のコマンド文字列commandを実行するよう指示します。 このオプションは繰り返すことができ、また-fオプションと任意の順序で組み合わせることができます。 -cまたは-fが指定されると、psqlは標準入力からコマンドを読み取りません。 その代わりに、すべての-cオプションおよび-fオプションを順に処理した後、終了します。
-l
利用可能な全てのデータベースを一覧表示し、終了します。 この他の接続に関連しないオプションは無視されます。
-U username
デフォルトのユーザではなくusernameユーザとしてデータベースに接続します (当然、そうする権限を持っていなければなりません)。
-V
psqlのバージョンを表示し、終了します。
psql
pg_user
pg_userビューはデータベースユーザに関する情報へのアクセスを提供します。 これはパスワードフィールドを隠蔽したpg_shadowを公に読めるようにしたビューです。
50.81. pg_user
pg_roles
pg_rolesビューはデータベースのロールに関する情報を提供します。 これは単に一般に公開されているpg_authidのビューですが、パスワード列が空白になっています。
50.72. pg_roles
データベースを作ってつなげる
PostgreSQLのユーザを作成する
$ createuser -d -e -P mana -U postgres Enter password for new role: Enter it again: CREATE ROLE mana PASSWORD 'md5a6747d5690695f2d69c556af98aca23b' NOSUPERUSER CREATEDB NOCREATEROLE INHERIT LOGIN; # ユーザ一覧で確認する $ psql -c 'select * from pg_user' -U postgres usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig ----------+----------+-------------+----------+---------+--------------+----------+----------+----------- postgres | 10 | t | t | t | t | ******** | | mana | 16384 | t | f | f | f | ******** | | (2 rows) # ロール一覧で確認する $ psql -c 'select * from pg_roles' -U postgres rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid -------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+------- postgres | t | t | t | t | t | t | -1 | ******** | | t | | 10 pg_signal_backend | f | t | f | f | f | f | -1 | ******** | | f | | 4200 mana | f | t | f | t | t | f | -1 | ******** | | f | | 16384 (3 rows)
createuser — 新しいPostgreSQLのユーザアカウントを定義する
概要
createuser [connection-option...] [option...] [username]
オプション
username
作成するPostgreSQLユーザの名前を指定します。
-d
新しいユーザに対してデータベースの作成を許可します。
-D
新しいユーザに対してデータベースの作成を禁止します。 これはデフォルトです。
-e
createuserが生成しサーバに送信するコマンドを出力します。
-U username
接続に使用するユーザ名です(作成するユーザの名前ではありません)。
-P
このオプションが指定されると、createuserは新しいユーザのパスワードのプロンプトを表示します。 もしパスワード認証を使う予定がなければ、これは必要ありません。createuser
データベースを作成する
$ createdb -e -O mana first-db "はじめてのPsgreSQLのDB" -U postgres CREATE DATABASE "first-db" OWNER mana; COMMENT ON DATABASE "first-db" IS 'はじめてのPsgreSQLのDB'; # データベース一覧で確認する $ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- first-db | mana | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | 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 (4 rows)
createdb — 新しいPostgreSQLデータベースを作成する
概要
createdb [connection-option...] [option...] [dbname [description]]
オプション
dbname
作成するデータベースの名前を指定します。 この名前はクラスタ内の全てのPostgreSQLデータベースの中で一意でなければなりません。 デフォルトでは、現在のシステムユーザと同じ名前でデータベースを作成します。
description
新しく作成されるデータベースに関連付けるコメントを指定します。
-e
createdbが生成し、サーバに送信するコマンドをエコー表示します。
-O owner
新しいデータベースの所有者となるデータベースユーザを指定します。 (この名前は二重引用符で囲まれた識別子として処理され
createdb
データベースに繋いでみる
$ psql -U mana -d first-db psql (9.6.6) Type "help" for help. # データベース一覧をみてみる first-db=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- first-db | mana | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | 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 (4 rows) # ロール一覧をみてみる first-db=> \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- mana | Create DB | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} # テーブル一覧をみてみる(まだ何もない) first-db=> \d No relations found. # 終了してみる first-db=> \q
psql — PostgreSQLの対話的ターミナル
概要
psql [option...] [dbname [username]]
オプション
-d dbname
接続するデータベースの名前を指定します。 コマンドラインでオプション以外の最初の引数としてdbnameを指定するのと同じ効力を持ちます。
-U username
デフォルトのユーザではなくusernameユーザとしてデータベースに接続します (当然、そうする権限を持っていなければなりません)。
psql
思い出の一枚