Ubuntu18.04 LTSにpgRouting環境を構築してみる　PostGIS3.0編

2019/10/20にPostGISのメジャーバージョンアップ3.0がリリースされました！
https://postgis.net/2019/10/20/postgis-3.0.0/

FindsJPさんがマニュアルの翻訳版を公開をしてくださっています。
ありがたいことです。
~~http://www.finds.jp/docs/pgisman/3.0.0/postgis-ja.html~~
↓ドメインが変わりました
http://aginfo.cgk.affrc.go.jp/docs/pgisman/3.0.0/index.html

というわけで
さっそくインストールしてみたので自分の備忘録として手順を残しておきます。

##リポジトリの追加
参考：https://wiki.postgresql.org/wiki/Apt
PostgreSQLのリポジトリを追加しましょう。

```
$ sudo apt install curl ca-certificates
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
```

パッケージリストを更新

```
$ sudo apt update
```
##インストール
PostGIS3.0は ~~PostgreSQL10~~ PostgreSQL9.5以降のバージョンに対応しています。
せっかくなので現時点で最新のPostgreSQL12と組み合わせてインストールをしてみたいと思います。
まずはパッケージ名を検索してみます。

```
$ sudo apt search postgresql-12
ソート中... 完了
全文検索... 完了  
postgresql-12/bionic-pgdg 12.0-2.pgdg18.04+1 amd64
  object-relational SQL database, version 12 server
＜略＞
postgresql-12-pgrouting/bionic-pgdg 2.6.2-1.pgdg18.04+1 amd64
  Routing functionality support for PostgreSQL/PostGIS
＜略＞
postgresql-12-postgis-3/bionic-pgdg 3.0.0+dfsg-1.pgdg18.04+1 amd64
  Geographic objects support for PostgreSQL 12
＜略＞
```

この中からpostgresql-12とpostgresql-12-postgis-3、postgresql-12-pgroutingをインストールします。

pgRoutingと一緒に入るPostGISのバージョンを確認するためにapt installで確認をしてみます。

```
$ sudo apt install postgresql-12-pgrouting
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  cpp-7 gcc-7-base gcc-8-base gdal-data libaec0 libarmadillo8 libarpack2
  libblas3 libboost-serialization1.65.1 libcc1-0 libcgal13 libdap25
  libdapclient6v5 libepsilon1 libfreexl1 libfyba0 libgcc1 libgdal20
  libgeos-3.7.1 libgeos-c1v5 libgeotiff2 libgfortran4 libgif7 libgmpxx4ldbl
  libgomp1 libhdf4-0-alt libhdf5-100 libkmlbase1 libkmldom1 libkmlengine1
  liblapack3 libminizip1 libmysqlclient20 libnetcdf13 libodbc1 libogdi3.2
  libopenjp2-7 libpq5 libproj12 libprotobuf-c1 libqhull7 libquadmath0
  libsfcgal1 libspatialite7 libstdc++6 libsuperlu5 libsz2 liburiparser1
  libxerces-c3.2 mysql-common odbcinst odbcinst1debian2 pgdg-keyring
  postgresql-12 postgresql-12-pgrouting-scripts postgresql-12-postgis-3
  postgresql-12-postgis-3-scripts postgresql-client-12
  postgresql-client-common postgresql-common proj-bin proj-data sysstat
提案パッケージ:
  gcc-7-locales geotiff-bin gdal-bin libgeotiff-epsg libhdf4-doc
  libhdf4-alt-dev hdf4-tools libmyodbc odbc-postgresql tdsodbc unixodbc-bin
  ogdi-bin postgresql-12-pgrouting-doc postgis postgresql-doc-12 libjson-perl
  isag
以下のパッケージが新たにインストールされます:
  gdal-data libaec0 libarmadillo8 libarpack2 libblas3
  libboost-serialization1.65.1 libcgal13 libdap25 libdapclient6v5 libepsilon1
  libfreexl1 libfyba0 libgdal20 libgeos-3.7.1 libgeos-c1v5 libgeotiff2
  libgfortran4 libgif7 libgmpxx4ldbl libhdf4-0-alt libhdf5-100 libkmlbase1
  libkmldom1 libkmlengine1 liblapack3 libminizip1 libmysqlclient20
  libnetcdf13 libodbc1 libogdi3.2 libopenjp2-7 libpq5 libproj12
  libprotobuf-c1 libqhull7 libquadmath0 libsfcgal1 libspatialite7 libsuperlu5
  libsz2 liburiparser1 libxerces-c3.2 mysql-common odbcinst odbcinst1debian2
  pgdg-keyring postgresql-12 postgresql-12-pgrouting
  postgresql-12-pgrouting-scripts postgresql-12-postgis-3
  postgresql-12-postgis-3-scripts postgresql-client-12
  postgresql-client-common postgresql-common proj-bin proj-data sysstat
以下のパッケージはアップグレードされます:
  cpp-7 gcc-7-base gcc-8-base libcc1-0 libgcc1 libgomp1 libstdc++6
アップグレード: 7 個、新規インストール: 57 個、削除: 0 個、保留: 560 個。
51.0 MB 中 50.4 MB のアーカイブを取得する必要があります。
この操作後に追加で 189 MB のディスク容量が消費されます。
続行しますか? [Y/n] 
```

インストールされるパッケージを確認すると、postgresql-12-pgroutingをインストールすればPostgreSQL12とPostGIS3.0も入るようですね。
では、「Y」でインストールを続行しましょう。

```
続行しますか? [Y/n] y
＜略＞
postgresql-12 (12.0-2.pgdg18.04+1) を設定しています ...
Creating new PostgreSQL cluster 12/main ...
/usr/lib/postgresql/12/bin/initdb -D /var/lib/postgresql/12/main --auth-local peer --auth-host md5
データベースシステム内のファイルの所有者はユーザ"postgres"となります。
このユーザをサーバプロセスの所有者とする必要があります。

データベースクラスタはロケール"ja_JP.UTF-8"で初期化されます。
デフォルトのデータベース符号化方式はそれに対応してUTF8に設定されました。
initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8"
デフォルトのテキスト検索構成は simple に設定されます。

データベージのチェックサムは無効です。

ディレクトリ/var/lib/postgresql/12/mainの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... posix
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 128MB
selecting default time zone ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています ... ok

成功しました。以下のようにしてデータベースサーバを起動することができます:

    pg_ctlcluster 12 main start
＜略＞
```

正常にインストールされましたので起動してみます。

```
$ sudo pg_ctlcluster 12 main start
```

エラー無く起動したようです。


##初期設定
postgresユーザーができているのでそちらに切り替えて作業をする。

```
$ sudo su - postgres
```

psqlコマンドで接続してpostgresアカウント（PostgreSQLのログインロール）のパスワード設定とテスト用データベースの作成をします。

```
$ psql
postgres=# ALTER USER postgres PASSWORD 'new_password';
ALTER ROLE
postgres=# create database testdb;
CREATE DATABASE
postgres=# \q
```

今度はテスト用データベースにpostgresアカウントで接続してPostGISとpgRoutingを有効にします。

```
$ psql -d testdb -U postgres
testdb=# CREATE EXTENSION postgis;
CREATE EXTENSION
testdb=# CREATE EXTENSION pgrouting;
CREATE EXTENSION
```

続いてバージョンを確認してみましょう。

```
testdb=# SELECT postgis_version();
            postgis_version            
---------------------------------------
 3.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 行)

testdb=# SELECT  * FROM pgr_version();
 version |  tag   |   hash    | branch | boost  
---------+--------+-----------+--------+--------
 2.6.2   | v2.6.2 | b14f4d56b | master | 1.65.1
(1 行)

```

PostGIS3.0と、pgRouting2.6.2が入っていることが確認できました。

以上です。