ちょっとPostgreSQLで全文検索等を試したかったのですが、そもそも手元の環境に入れてなかったので ついでにまとめてしまいます。
対象環境
今回は以下の環境で実施しました。
- Ubuntu 16.04
- PostgreSQL 9.6.5
ソースの入手
とりあえずソースをダウンロードして解凍します。
denzow@denzow-ubuntu:~$ mkdir -p work/pg denzow@denzow-ubuntu:~$ cd work/pg denzow@denzow-ubuntu:~/work/pg$ wget https://ftp.postgresql.org/pub/source/v9.6.5/postgresql-9.6.5.tar.bz2 --2017-09-08 22:42:08-- https://ftp.postgresql.org/pub/source/v9.6.5/postgresql-9.6.5.tar.bz2 ftp.postgresql.org (ftp.postgresql.org) をDNSに問いあわせています... 204.145.124.244, 174.143.35.246, 87.238.57.227, ... ftp.postgresql.org (ftp.postgresql.org)|204.145.124.244|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 19576132 (19M) [application/x-bzip] `postgresql-9.6.5.tar.bz2' に保存中 postgresql-9.6.5.tar.bz2 100%[=======================================================>] 18.67M 437KB/s in 44s 2017-09-08 22:42:54 (436 KB/s) - `postgresql-9.6.5.tar.bz2' へ保存完了 [19576132/19576132] denzow@denzow-ubuntu:~/work/pg$ tar xf postgresql-9.6.5.tar.bz2 denzow@denzow-ubuntu:~/work/pg$ cd postgresql-9.6.5/ denzow@denzow-ubuntu:~/work/pg/postgresql-9.6.5$
必要パッケージの入手
指定するオプション次第ですが、readline
やlibxml
、openssl
あたりはないとあとで面倒な気がするので入れておきます。
denzow@denzow-ubuntu:~/work/pg/postgresql-9.6.5$ sudo apt-get install libreadline6-dev denzow@denzow-ubuntu:~/work/pg/postgresql-9.6.5$ sudo apt-get install libxml2-dev denzow@denzow-ubuntu:~/work/pg/postgresql-9.6.5$ sudo apt-get install libssl-dev
ディレクトリの準備
インストール先を用意しておきます。
denzow@denzow-ubuntu:~/work/pg/postgresql-9.6.5$ mkdir -p ~/posgreHome/pg965
ビルドの実施
MySQLはcmake
でしたが、PostgreSQLは./configure
でMakeの前準備をします。ここでインストール先等も指定することになります。
denzow@denzow-ubuntu:~/work/pg/postgresql-9.6.5$ ./configure -prefix=$HOME/posgreHome/pg965 --with-openssl --with-libxml : configure: creating ./config.status config.status: creating GNUmakefile config.status: creating src/Makefile.global config.status: creating src/include/pg_config.h config.status: creating src/include/pg_config_ext.h config.status: creating src/interfaces/ecpg/include/ecpg_config.h config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s config.status: linking src/backend/port/dynloader/linux.c to src/backend/port/dynloader.c config.status: linking src/backend/port/sysv_sema.c to src/backend/port/pg_sema.c config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c config.status: linking src/backend/port/dynloader/linux.h to src/include/dynloader.h config.status: linking src/include/port/linux.h to src/include/pg_config_os.h config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
うまく行ったのであとはmake
してmake install
です。CPUに余力があるので-j4
で4並列にしてしまいます。
denzow@denzow-ubuntu:~/work/pg/postgresql-9.6.5$ make -j4 && make install : /bin/mkdir -p '/home/denzow/posgreHome/pg965/lib/postgresql/pgxs/config' /usr/bin/install -c -m 755 ./install-sh '/home/denzow/posgreHome/pg965/lib/postgresql/pgxs/config/install-sh' /usr/bin/install -c -m 755 ./missing '/home/denzow/posgreHome/pg965/lib/postgresql/pgxs/config/missing' make[1]: ディレクトリ '/home/denzow/work/pg/postgresql-9.6.5/config' から出ます PostgreSQL installation complete.
環境変数の設定
PATH等を指定しないで実行できるように必要な環境変数を設定しておきます。.bashrc
に書いてしまいます。
# for pg export PATH=$HOME/posgreHome/pg965/bin:$PATH export PGDATA=$HOME/posgreHome/pg965/data export LD_LIBRARY_PATH=$HOME/posgreHome/pg965/lib export PGPORT=5432
書いたあとはちゃんと読み込んでおきましょう。
denzow@denzow-ubuntu:~$ . .bashrc
DBの初期化
DBを作成していきます。initdb
を実行します。エンコーディングはまぁ要件次第ですが日本語を扱う場合は--no-locale
を指定するのが定石です。
ロケールの指定はソート順序等に影響しますが、日本語データではメリットが少ない割にオーバヘッドがあるためです。
denzow@denzow-ubuntu:~$ initdb --encoding=UTF8 --no-locale The files belonging to this database system will be owned by user "denzow". This user must also own the server process. The database cluster will be initialized with locale "C". The default text search configuration will be set to "english". Data page checksums are disabled. creating directory /home/denzow/posgreHome/pg965/data ... 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 /home/denzow/posgreHome/pg965/data -l logfile start
無事にできましたので起動してみます。
denzow@denzow-ubuntu:~$ pg_ctl start server starting denzow@denzow-ubuntu:~$ LOG: database system was shut down at 2017-09-08 23:01:40 JST LOG: MultiXact member wraparound protections are now enabled LOG: database system is ready to accept connections LOG: autovacuum launcher started denzow@denzow-ubuntu:~$ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+--------+----------+---------+-------+------------------- postgres | denzow | UTF8 | C | C | template0 | denzow | UTF8 | C | C | =c/denzow + | | | | | denzow=CTc/denzow template1 | denzow | UTF8 | C | C | =c/denzow + | | | | | denzow=CTc/denzow (3 rows) denzow@denzow-ubuntu:~$ psql postgres -c "select version()" version ---------------------------------------------------------------------------------------------------------- PostgreSQL 9.6.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.3.1-14ubuntu2) 5.3.1 20160413, 64-bit (1 row)
構築できましたので、この環境を次回以降でいじっていきます。