DBの導入や使い方については勉強したことあったが、実際に使ったことはなかった。
というか、動かしたことがなかった。
なので、勉強がてら使ってみるために、インストールした。
準備
SourceのDownload
(公式)[https://www.postgresql.org/ftp/source/]からダウンロードする。
今回はv9.6.1のSourceをダウンロードした。
DocumentのDownload
必要なことはすべてDocumentに書いてある。
さすがに文章量が多いので、読むには少し骨が折れるかも。
今回はDocumentを読みながら、必要な部分だけ実行した。
インストール
よくある一般的なインストール。今回、pythonから呼びたかったので、一応オプションを付けた。
$ ./configure --prefix=/path/to/install/dir --enable-python 2>&1 | tee configure.log
$ make world 2>61 | tee make.log
$ make install-world 2>&1 | tee install.log
makeにworldのオプションをつけると、構築可能なものをすべて構築してくれる。
インストールするときも、make install
で十分だが、make install-world
だと、Document(HTMLやman)一式もインストールしてくれるらしい。
使う
データベースとして稼働させる場合、データベースにアクセスする専用のアカウントを作成して運用する方が良いらしい。
ただし、今回は個人のローカル環境でしか使わないため、一切気にしないこととする。
PATHを通す
とりあえず、.bashrcに書いた。
export POSTGRE_SQL_DIR=/path/to/install/dir
export PATH=$POSTGRE_SQL_DIR/bin:$PATH
export LD_LIBRARY_PATH=$POSTGRE_SQL_DIR/lib:$LD_LIBRARY_PATH
export MANPATH=$POSTGRE_SQL_DIR/share/man:$MANPATH
読み込む。
$ source ~/.bashrc
DBの準備
Document上だといきなりDBを作るところになるが、先にDBを動かさないといけない。
最初に、データベースの格納スペースを定義する。
今回は、インストール先の直下にデータディレクトリをおいた。
$ initdb -D /path/to/install/dir/data
次に起動をする。
$ postgres -D /path/to/install/dir/data >logfile 2>&1 &
バックグラウンドで、サーバーの標準出力と標準エラー出力を保管しておくことがおすすめ。
このあたりのコマンドを短くかけるらしい。
$ pg_ctl -D /path/to/install/dir/data initdb
$ pg_ctl start -l logfile
PC自体が起動直後にサーバーを起動させる方法もあるが、これは環境によって異なるようなので割愛。
シャットダウン自体は、プロセスにシグナルを送ってシャットダウンすることになるとのこと。
- SIGTERM スマートシャットダウンモード。新しいサーバ接続を禁止するが、現在のセッションは継続する。 現在のセッションが全て切れたら、終了する。
- SIGINT 高速シャットダウンモード。新しいサーバ接続を禁止し、現在存在するサーパプロセスにSIGTERMを送信後、現在のトランザクションをアボート、即座に終了する。
- SIGQUIT 即時シャットダウンモード。サーバーはすべての子プロセスにSIGQUITを送信し、子プロセスが終了するのを待つ。 5秒以内に終了しない場合、SIGKILLを送る。すべてのプロセス終了後、サーバーが終了する。
高速シャットダウンは次で実行できた。
$ kill -INT `head -1 /path/to/install/dir/data/postmaster.pid`
どのシャットダウンが一番いいのかわかっていないが、公式に例が乗っていたこともあってSIGINTでいいのかなと。
Databaseを作る
以下のコマンドを実行する。mydbという名前のデータベースができる。
$ createdb mydb
下のようなメッセージが出たら、サーバーが起動できていない。
$ createdb mydb
createdb: could not connect to database template1: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
$ createdb
だけだと、ユーザー名と同じデータベースを作るらしい。
Databaseにアクセスする
$ psql mydb
psql (9.6.1)
Type "help" for help.
mydb=#
アクセスできた。なお、次のような場合もあるらしい。
$ psql mydb
psql (9.6.1)
Type "help" for help.
mydb=>
これはスーパーユーザ(=#,PostgreSQLをインストールしたユーザー)か否か(=>)の違いだそうだ。
とにかく、これで一通りコマンドを実行できる。
$ psql mydb
psql (9.6.1)
Type "help" for help.
mydb=# SELECT version();
version
--------------------------------------------------------------------------------------------------------------
PostgreSQL 9.6.1 on x86_64-apple-darwin16.6.0, compiled by Apple LLVM version 8.1.0 (clang-802.0.42), 64-bit
(1 row)
mydb=# SELECT current_data;
ERROR: column "current_data" does not exist
LINE 1: SELECT current_data;
^
mydb=# SELECT current_date;
date
------------
2017-06-10
(1 row)
mydb=# SELECT 2+2;
?column?
----------
4
(1 row)
mydb=# \h
Available help:
ABORT DEALLOCATE
ALTER AGGREGATE DECLARE
ALTER COLLATION DELETE
ALTER CONVERSION DISCARD
ALTER DATABASE DO
ALTER DEFAULT PRIVILEGES DROP ACCESS METHOD
ALTER DOMAIN DROP AGGREGATE
ALTER EVENT TRIGGER DROP CAST
ALTER EXTENSION DROP COLLATION
ALTER FOREIGN DATA WRAPPER DROP CONVERSION
ALTER FOREIGN TABLE DROP DATABASE
ALTER FUNCTION DROP DOMAIN
ALTER GROUP DROP EVENT TRIGGER
ALTER INDEX DROP EXTENSION
ALTER LANGUAGE DROP FOREIGN DATA WRAPPER
ALTER LARGE OBJECT DROP FOREIGN TABLE
ALTER MATERIALIZED VIEW DROP FUNCTION
ALTER OPERATOR DROP GROUP
ALTER OPERATOR CLASS DROP INDEX
ALTER OPERATOR FAMILY DROP LANGUAGE
ALTER POLICY DROP MATERIALIZED VIEW
ALTER ROLE DROP OPERATOR
(中略、ヘルプがでる)
mydb=# \q
$
Databaseの一覧を表示する
$ psql -l
ポート番号やホスト名も指定できる。
$ psql -l -p <port> -h <host>
Databaseを消す
$ dropdb mydb
環境ができたので、色々操作していく。