はじめに
2018/9/6にpgAdmin4 v3.3がリリースされました!
本記事では **新機能(geometry viewer)**について紹介します。
- v3.3の新機能(リリースノート全文はコチラ)
- Feature #1407 - Add a geometry viewer that can render PostGIS data on a blank canvas or various map sources.
- Feature #3503 - Added new backup/restore options for PostgreSQL 11. Added dump options for ‘pg_dumpall’.
- Feature #3553 - Add a Spanish translation.
1点目を御覧ください。PostGISデータ向けのビュワーを標準実装したとのこと!これは試さずにはいられないですね!
PostGISとは、GIS(Geographic Information System)つまり、地理情報をPostgreSQL上に格納するためのEXTENSIONです。詳細は Let's Postgres 等で紹介されているので詳しくはそちらをご参照ください。
1. Setup
- 環境情報
- DBサーバ:VirtualBox CentOS7 PostgreSQL10.5 PostGIS2.4
- クライアント:Windows10(64bit) pgAdmin4 v3.3
1.1. PostgreSQL10+PostGIS
1.1.1. 環境構築
今回の環境では、VirtualBox上でコンテナを立ち上げ、ポートフォワーディングさせて使用します。もちろん、VMに直接環境を構築してもOKです。
参考ですが、以下のような内容を記載すれば、必要なものは入ります。
# install and setting for PG
ENV PATH /usr/pgsql-10/bin:$PATH
ENV PGDATA /var/lib/pgsql/10/data
RUN set -ex && \
rpm -ivh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm && \
yum install -y postgresql10 postgresql10-contrib postgresql10-libs postgresql10-server postgresql10-devel && \
su -c "initdb -D $PGDATA --no-locale -E utf-8" postgres
# Install PostGIS
RUN yum install -y epel-release.noarch
RUN yum install -y gdal proj proj-devel proj-epsg
RUN yum install -y postgis24_10
今回は以下の手順でcontainerを起動させています。
# docker build -t image01 -f Dockerfile.03_pg10_postgis .
...(略)...
# docker run -d --privileged --net=dnw01 --ip=192.168.1.100 -p 15432:5432 --name contener01 image01 /sbin/init
f2e2ca915c41b01fde29a27e563fd554e044ce81d8ab4431b4a6955a383e9b63
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2e2ca915c41 image01 "/sbin/init" 38 minutes ago Up 38 minutes 0.0.0.0:15432->5432/tcp contener01
1.1.2. PostGISを有効にする
yumで入れただけではPostgreSQL上でPostGISは有効にはなりません。
以下、PostGISを有効にして、GISのサンプルデータを入力するまでの手順を記載します。
// PG10起動
[postgres@f2e2ca915c41 ~]$ pg_ctl -D 10/data start
waiting for server to start....2018-09-11 23:53:13.499 JST [140] LOG: listening on IPv4 address "0.0.0.0", port 5432
2018-09-11 23:53:13.499 JST [140] LOG: listening on IPv6 address "::", port 5432
2018-09-11 23:53:13.501 JST [140] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2018-09-11 23:53:13.504 JST [140] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2018-09-11 23:53:13.514 JST [140] LOG: redirecting log output to logging collector process
2018-09-11 23:53:13.514 JST [140] HINT: Future log output will appear in directory "log".
done
server started
// PostGISを有効にする
[postgres@f2e2ca915c41 ~]$ psql postgres -c "CREATE EXTENSION postgis"
CREATE EXTENSION
// PostGISのバージョン確認
[postgres@f2e2ca915c41 ~]$ psql postgres -c "SELECT postgis_version()"
postgis_version
---------------------------------------
2.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)
1.1.3. 動作確認
サンプルデータを入力し、PostgreSQLに地理データが格納できるか確認します。
サンプルとして、best_placeテーブルを作成し、POINT型のデータを1点追加しています。
// best_placeテーブルを作成
[postgres@f2e2ca915c41 ~]$ psql postgres -c "CREATE TABLE best_place (id int primary key);"
CREATE TABLE
// best_placeテーブルにPOINT型のカラムを追加
[postgres@f2e2ca915c41 ~]$ psql postgres -c "SELECT addGeometryColumn('best_place', 'fp', 4326, 'POINT', 2);"
addgeometrycolumn
---------------------------------------------------
public.best_place.fp SRID:4326 TYPE:POINT DIMS:2
(1 row)
// サンプルデータとしてある座標を挿入
[postgres@f2e2ca915c41 ~]$ psql postgres -c "INSERT INTO best_place VALUES (1, ST_GeomFromText('POINT(139.697800 35.270089)',4326));"
INSERT 0 1
参照してみると、ちゃんとデータが入っていることは確認できます。
[postgres@f2e2ca915c41 ~]$ psql postgres -c "SELECT * FROM best_place;"
id | fp
----+----------------------------------------------------
1 | 0101000020E6100000C364AA60547661403201BF4692A24140
(1 row)
これで下準備は完了です。
いよいよメインディッシュ!
1.2. pgAdmin4
今回の環境では、ホストマシンからVM上で起動しているPostgreSQLにアクセスさせるので、Windows10にインストールします。ダウンロード先はコチラ
1.2.1. インストール
インストーラーをダウンロードできるので、内容に従ってポチポチしていくとrebootを求められるのでVMを落として再起動しましょう。
1.2.2. PostgreSQLへの接続
Seversを右クリックし、Server...をクリックします。
すると、Serverのプロパティウィンドウが出力されるので、適宜必要事項を埋めます。不足があれば、pgAdminから怒られます。
今回の環境ではVMが192.168.56.1で動いており、Containerの5432ポートとは15432でフォワーディングしているので以下のような設定になります。
以下のようにDBが追加されていることが確認できればOKです。
ちなみにグループ化されている項目を開いていくと先程作成したbest_placeテーブルとカラムの情報も確認できます。
2. 新機能のちから
「1.1.3. 動作確認」で入力した情報をpgAdminから確認することで新機能を確かめられます。
pgAdmin4のタブ「Tools」から「Query Tool」を選択します。
先程、実行したクエリ "SELECT * FROM best_place;"をここで実行します。F5か図の稲妻マークをクリックすることで実行できます。
実行結果が下のウィンドウに出力されます。新機能はカラム名の横の「目のマーク」をクリックすることで使用することができます。
Geometry Viewerタブが開かれ、さきほどプロットした点をOpenStreetMap背景上に表示してくれます。
これまではPostGISのデータを描画する際は描画用のソフトウェア(QGIS等)を別途利用する必要がありましたが、pgAdminだけでできるようになってしまいました!
さいごに
今回は新機能紹介ということで、これで終わります。
pgAdminはこれまであまり使うことがなかったので、試す良いきっかけになりました。せっかくなので、いろいろ試してみようと思います。
ちなみにプロットした場所は・・・
鯛が釣れるポイントでした。(釣れたことがあるとは言っていない)
ぜひ、釣りに行くときはPostgreSQL10+PostGIS+pgAdmin4を持参してみてください。