pgRouting環境の構築方法は色々と既存記事があると思いますが、Ubuntu18.04での記事が見つからなかったので覚書として残しておく。
##リポジトリの追加
参考:https://wiki.postgresql.org/wiki/Apt
標準のDEBでもPostgreSQLはインストールできるんですがpgRoutingを入れるならリポジトリを追加しておきましょう。
$ 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
##インストール
PostgreSQL10とPostGIS、pgRouting、管理用にpgAdmin4をインストールします。
pgRoutingを入れるとPostGISは付いてくるので指定していません。
$ sudo apt install postgresql-10 postgresql-10-pgrouting pgadmin4
ちなみにpgAdmin4はメモリをやたらと使いますのでサーバ上で動かす場合はメインメモリを2GB程度は割り当てておかないとまともに動かせませんでした。ご注意を。
##初期設定
postgresユーザーができているのでそちらに切り替えて作業をする。
CentOSだとrootからpostgresユーザーにsuしてたのでpostgresユーザーにパスワードを指定せず(通常ログイン不可状態として)使っていたけどUbuntuではどうするのが一般的なんでしょうか。
ここではpostgresユーザーにパスワードを設定してsuします。
$ sudo passwd postgres
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
$ 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=# \q
できました。
##確認
pgAdmin4を使ってローカルDBに接続して空間関数やpgr関数が設定されているかを確認します。
pgAdmin4を起動したら左のツリーのServersを右クリックして[Create]-[Server]を選ぶ。
GeneralタブのNameに適当に名前を入れたら、ConnectionタブのHostname/addressに[localhost]、UsernameとPasswordに先ほど設定したpostgresアカウントを設定してSaveボタンをクリック。
するとツリーにサーバが追加されるのでどんどん開いていきましょう。
Functionsまで開いて横に(1384)みたいな数字が出ればOKです。
ずらずっと下げていくとST_ほにゃららとかpgr_ほにゃららが出てくると思います。
##感想
手軽にインストール出来ました。
pgRoutingのDockerfileを公開している方もいるのでそういうのを使ってみるのもいいかもしれない。
データの投入や使い方は以下の記事を参考にするといいと思う。
https://qiita.com/sanak/items/f50e8c5bb97bf9619958
##困りごと
pgAdmin4からツールの実行をしようとすると以下のエラーがでるんで解決したい。
pythonではなくpython3にPATHが通るようにするか、pythonでも動くようにするかだと思ってる。
できればvirtualenvは使いたくない。