2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Renderで構築したPostGISへの接続方法

Posted at

はじめに

GISエンジニアを名乗っておきながら、PostGISとは無縁の生活を送っていたのですが、使ってみたくなったので触ってみることにしました。

PostGISを触る方法は世の中にいっぱいあると思いますが、以下の理由からRenderのPostgreSQLを使うことにしました。

  • 無料プランがある
    • 個人開発なので金はかけたくない
    • 無料プランはクレカ情報の入力すら不要なので安心安全
    • 一定期間後にDBは削除されるけど、学習用途だし別にいいか
  • オンライン環境でアクセスできる
    • Dockerコンテナ立ててローカルだけで動かすのは、なんかやる気でない
    • バックエンドサーバーから接続してみたい

というわけで、世間的な需要があるとは思っておらず、ほぼ自分向けの備忘録です。
(故に、Renderのアカウントは既に持っている前提で進めます)

実行環境

  • Windows11
  • QGIS 3.40
  • Docker Desktop 27.4.0

基本的な操作

DBサーバーのデプロイ

Renderのダッシュボードを開き、Postgresを作ります。
image.png

以下の設定でDBを作成します。

  • Name:別になんでもいい
  • Region:Oregon(多分、Singaporeでもいい)
  • PostgreSQL Version:17(特に理由なければ新しいやつ)
  • Optionalなパラメータ:デフォルトのままでいい
    image.png

CLI操作

Postgresサーバーがデプロイできたら、CLIからPostgresを操作してみましょう。

CLIからPostgresを操作するにはpsqlというアプリケーションを利用します。psqlをWindowsに入れるのはめんどくさそうなので、DockerでPostgresのコンテナを作成して、コンテナ内のpsqlを使うことにします。

Windows PowerShellで以下のコマンドを実行し、Postgresのイメージをpullしておきましょう。
(作成したPostgresサーバーとverは合わせておくのが無難かと)

docker pull postgres:17

イメージをpullできたら、以下のコマンドでPostgresコンテナを起動します。

docker run -it --rm postgres:17 /bin/bash

コンテナを起動したらpsqlを使ってPostgresサーバーに接続します。接続するためのコマンドはPostgresサーバーのInfoの下の方に載っています。
image.png

Postgresに接続できたら、以下のコマンドでデータベースを作成します。

CREATE DATABASE gis;

作成したデータベースに接続し、PostGISのエクステンションを有効化します。

\c gis
CREATE EXTENSION postgis;

PostGISが有効化されたことを確認するために、以下のコマンドでバージョンを確認してみましょう。

SELECT postgis_version();

以下のようにバージョン情報が返ってきたらOKです。

            postgis_version
---------------------------------------
 3.5 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

では、任意のデータを登録してみましょう。ここでは国土数値情報の道の駅データをダウンロードしておきます。

データをダウンロードしたら、OSGeo4W Shell(QGISに同梱)を起動します。
image.png

OSGeo4W Shell上で、登録したいデータが保存されているディレクトリに移動し、PostGISにデータを登録します。

ogr2ogr -f "PostgreSQL" \
  "PG:host=dpg-xxxxxxxx-xxxxxxxx-postgres.render.com port=5432 dbname=gis user=render_postgis_test_user password=xxxxxxxx sslmode=require" \
  -nln loadside \
  -lco GEOMETRY_NAME=geom \
  -oo ENCODING=cp932 \
  P35-18_Roadside_Station.shp

Postgresの接続情報は以下の通りです。

  • host: ホスト名(DB接続時に使用したpsqlコマンドで-hで与えている引数)
  • port: Postgresのポート番号(デフォルトは5432)
  • dbname: 作成したDBの名前(本記事の例ならgis
  • user: ユーザー名(PostgresサーバーのInfoに載っている)
  • password: パスワード(PostgresサーバーのInfoに載っている)
  • sslmode: SSLモード(RenderのPostgresは外部接続時に暗号化が必須)

また、その他のパラメータは以下の通りです。

  • -nln: 新たに作成するテーブル名
  • -lco: GEOMETRY_NAMEでジオメトリ情報が含まれている列を指定
  • oo: ENCODINGを指定

QGISから接続

登録したデータをQGISで確認してみましょう。QGISを開き、PostgreSQL > 接続の新規作成をクリックします。
image.png

DBへの接続情報を入力してOKをクリックします。
image.png

ユーザー名とパスワードを入力します。
image.png

上手くいっていればPostgreSQLの配下にテーブル名が表示されているので、確認してみましょう。
image.png

お片付け

RenderのFreeプランの場合、放っておいても30日後に勝手に消える(はず)です...が、手動で削除したい場合は、Infoの一番下にあるDelete Databaseで削除できます。
image.png

おわりに

今回はローカルではなく、Renderで構築したPostGISへの接続を試してみました。Freeプランだと使える容量は少ないし、DB自体も30日で消えちゃいますが、「PostGISを利用したお遊びアプリを期間限定で公開する」くらいの用途なら使えそうですね。

皆さんも、PostGISを使ってちょっとしたことを試す程度なら、Renderも選択肢に入れてみてはいかがでしょうか?

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?