PostGIS

This article or section needs language, wiki syntax or style improvements. See
Help:Style
for reference.
Reason:
Prompts need updating with
Help:Style#Command line text
changes on running a command as another user. (Discuss in
Talk:PostGIS
)
PostGIS
adds support for geographic objects in the PostgreSQL database. This document describes the process for installing PostGIS and creating a template PostGIS database. It is assumed that PostgreSQL has been installed. If it has not, please refer to the
PostgreSQL
page.
Installing PostGIS
Install
the
postgis
package.
Installing PostGIS Extension
Since
PostgreSQL 9.1
, the preferred approach is to install PostGIS and enable postgis extension for each spatial database.
$ psql
-- verify available extensions
 SELECT name, default_version,installed_version 
 FROM pg_available_extensions WHERE name LIKE 'postgis%' ;

 -- install extension for spatial database mygisdb
 \c mygisdb
 CREATE EXTENSION postgis;
 CREATE EXTENSION postgis_topology;
 CREATE EXTENSION fuzzystrmatch;
 CREATE EXTENSION postgis_tiger_geocoder;
You do not need to do the below "Creating a Template PostGIS Database" step if you use PostGIS extension.
upgrade postgis extension
$ psql
ALTER EXTENSION postgis UPDATE TO "2.1.0";
migrate spatial database created with postgis_template
Dump and drop the spatial database, re-create a spatial database with extension, and restore the dumped database.  Follow
https://www.postgis.net/docs/postgis_installation.html#hard_upgrade
for specific commands.
Creating a Template PostGIS Database
Become the postgres user.
# su - postgres
If you have not created a superuser for accessing PostgreSQL, you may want do that now. You will be prompted for granting permissions to that user.
$ createuser [username]
Create a new database called "template_postgis".
$ createdb -O [username] template_postgis -E UTF-8
Load the PostGIS spatial types for PostgreSQL and spatial reference systems. "postgis.sql" and "spatial_ref_sys.sql" are part of the installation of PostGIS, and may reside somewhere else besides "/usr/sharepostgresql/contrib/postgis-2.1/" depending on the installation.
(Below is for default postgis 2.1 installation)
$ psql -d template_postgis -f /usr/share/postgresql/contrib/postgis-2.1/postgis.sql
$ psql -d template_postgis -f /usr/share/postgresql/contrib/postgis-2.1/spatial_ref_sys.sql
Make it a real template.
$ psql
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template_postgis';
Creating a PostGIS Database From the Template
It is common practice to reserve a bare template for creating new PostGIS databases. As a PostgreSQL superuser, the following command will create a new database:
$ createdb -T template_postgis [new_postgis_db]
Upgrading PostgreSQL with PostGIS
If you want to upgrade PostgreSQL using
pg_upgrade
with
postgresql-old-upgrade
, you can install
postgis-old-upgrade
AUR
before
upgrade
.
More Resources
For additional resources concerning PostGIS, check out the
PostGIS Documentation
.
PostGIS failing with json_tokener_error
This happends when adding postgis as an extension.  The libjson-c package has changed, and PostGIS has not put out a stable release with this yet.  It is in 2.1.0rc1, though.  The bug-report is
https://trac.osgeo.org/postgis/ticket/2213
The fix is to download the postgis PKGBUILD and then change the version to '2.1.0rc1'.  Do not forget to change the sha256sum.