はじめに
GISエンジニアを名乗っておきながら、PostGISとは無縁の生活を送っていたのですが、使ってみたくなったので触ってみることにしました。
PostGISを触る方法は世の中にいっぱいあると思いますが、以下の理由からRenderのPostgreSQLを使うことにしました。
- 無料プランがある
- 個人開発なので金はかけたくない
- 無料プランはクレカ情報の入力すら不要なので安心安全
- 一定期間後にDBは削除されるけど、学習用途だし別にいいか
- オンライン環境でアクセスできる
- Dockerコンテナ立ててローカルだけで動かすのは、なんかやる気でない
- バックエンドサーバーから接続してみたい
というわけで、世間的な需要があるとは思っておらず、ほぼ自分向けの備忘録です。
(故に、Renderのアカウントは既に持っている前提で進めます)
実行環境
- Windows11
- QGIS 3.40
- Docker Desktop 27.4.0
基本的な操作
DBサーバーのデプロイ
Renderのダッシュボードを開き、Postgresを作ります。

以下の設定でDBを作成します。
- Name:別になんでもいい
- Region:Oregon(多分、Singaporeでもいい)
- PostgreSQL Version:17(特に理由なければ新しいやつ)
- Optionalなパラメータ:デフォルトのままでいい
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の下の方に載っています。

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に同梱)を起動します。

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 > 接続の新規作成をクリックします。

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

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

おわりに
今回はローカルではなく、Renderで構築したPostGISへの接続を試してみました。Freeプランだと使える容量は少ないし、DB自体も30日で消えちゃいますが、「PostGISを利用したお遊びアプリを期間限定で公開する」くらいの用途なら使えそうですね。
皆さんも、PostGISを使ってちょっとしたことを試す程度なら、Renderも選択肢に入れてみてはいかがでしょうか?

