本博文参考 http://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS24UbuntuPGSQL10Apt
本文说明如何在Ubuntu 16.04上安装 Postgresql 10、PostGIS 2.4、pgRouting 2.6、pgAdmin,并详细介绍了创建用户空间数据库并安装postgis、pgRouting扩展,新增超级用户,使用SHP2PGSQL导入SHP文件、允许外部连接并查看配置文件位置、编辑并安装使用ogr_fdw等。在Linux Mint、Lubuntu和Xubuntu上同样适用。
1、确认Ubuntu系统的版本
sudo lsb_release -a
2、添加仓库地址到源列表
对Ubuntu 16.04 LTS(xenial),对其他系统,需要更改下面链接中的 别名,具体参考https://www.postgresql.org/download/linux/ubuntu/
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt xenial-pgdg main" >> /etc/apt/sources.list'
3、添加Keys并更新
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
4、安装
依次执行下面的命令,安装Postgresql 10、PostGIS 2.4、pgAdmin 4和pgRouting以及其他补充模块,包括adminpack扩展等。
sudo apt install postgresql-10
sudo apt install postgresql-10-postgis-2.4
sudo apt install postgresql-10-postgis-scripts
#to get the commandline tools shp2pgsql, raster2pgsql you need to do this
sudo apt install postgis
5、安装pgRouting
# Install pgRouting 2.6 package
sudo apt install postgresql-10-pgrouting
6、启动Adminpack
在终端中,以 postgres 用户登录到 psql 控制台,并创建adminpack扩展:
sudo -u postgres psql
CREATE EXTENSION adminpack;
禁止将PostGIS扩展安装到数据库 postgres中,创建一个用户数据库并使用PostGIS扩展,操作如下:
sudo -u postgres psql --以postgres用户登录,默认的数据库是 postgres
CREATE DATABASE gisdb;
\connect gisdb; -- 切换到gisdb数据库
CREATE SCHEMA postgis; --创建 模式postgis
ALTER DATABASE gisdb SET search_path=public, postgis, contrib;
\connect gisdb; -- this is to force new search path to take effect
CREATE EXTENSION postgis SCHEMA postgis; -- 在模式postgis上创建postgis扩展
SELECT postgis_full_version();
执行完之后,你应该会得到如下的信息:
postgis_full_version ------------------------------------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------- POSTGIS="2.4.4 r16526" PGSQL="100" GEOS="3.6.2-CAPI-1.10.2 4d2925d6" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.2.3, released 2017/11/20" LIBXML= "2.9.4" LIBJSON="0.12.1" LIBPROTOBUF="1.2.1" RASTER
如果你需要高级 3D支持,安装 postgis_sfcgal,如下:
CREATE EXTENSION postgis_sfcgal SCHEMA postgis;
SELECT postgis_full_version();
你会得到如下信息:
postgis_full_version ------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------- POSTGIS="2.4.4 r16526" PGSQL="100" GEOS="3.5.0-CAPI-1.9.0 r4084" SFCGAL="1.2.2" PROJ="Rel. 4.9.2, 08 September 2015" GDAL="GDAL 1.11.3, released 2015 /09/16" LIBXML="2.9.3" LIBJSON="0.11.99" LIBPROTOBUF="1.2.1" RASTER
安装pgRouting:
CREATE EXTENSION pgrouting SCHEMA postgis;
SELECT * FROM pgr_version();
你会得到如下信息:
version | tag | hash | branch | boost ---------+--------+---------+-------------+-------- 2.6.0 | v2.6.0 | a6226c4 | release/2.6 | 1.65.1 (1 row)
退出psql控制台的命令:
\q
7、开启运行客户端连接
如果允许外部连接,可以执行以下操作:
sudo -u postgres psql
ALTER SYSTEM SET listen_addresses='*'; \q
你可能还需要编辑 pg_hba.conf 或者 pg_ident.conf文件以运行外部连接:
sudo nano /etc/postgresql/10/main/pg_hba.conf
如果允许外部访问,滚动到 pg_hba.conf的底部并添加如下面一行的内容(它允许所有的客户端以md5密码认证的方式访问):
host all all 0.0.0.0/0 md5
依次按CTRL+X保存修改,Y将他们写入文件,ENTER退出。
如果你修改了ip或端口,需要重启postgresql服务,如下:
sudo service postgresql restart
注意:你也可以从 postgres的 psql控制台通过以下的命令使修改生效(仅限于不需要重启的修改操作):
SELECT pg_reload_conf();
8、查看配置文件的位置
通过以下的sql语句(在 psql控制台执行):
SELECT name, setting FROM pg_settings where category='File Locations';
会输出类似于下面的结果:
name | setting -------------------+----------------------------------------- config_file | /etc/postgresql/10/main/postgresql.conf data_directory | /var/lib/postgresql/10/main external_pid_file | /var/run/postgresql/10-main.pid hba_file | /etc/postgresql/10/main/pg_hba.conf ident_file | /etc/postgresql/10/main/pg_ident.conf (5 rows)
9、创建一个新的Postgresql用户
可以创建一个新的超级用户用来代替默认的用户 postgres,在终端执行以下命令:
sudo -u postgres psql
CREATE ROLE mysuperuser LOGIN PASSWORD 'whatever' SUPERUSER; --mysuperuser可以修改为自定义的用户名,whatever可以修改为安全的用户密码
10、通过shp2pgsql-gui导入shp文件
shp2pgsql-gui是另一个方便使用的工具,它允许你连接postgis并快速将shp文件导入数据数据库。注意,它仅限于在Ubuntu Desktop上使用。
打开终端,键入
sudo apt-get install postgis-gui
注意:这来源于Ubuntu的软件仓库,Postgresql apt仓库不再收藏 SHP2PGSQL-GUI软件包。
接下来打开 SHP2PGSQL 应用:
shp2pgsql-gui
按照说明加载数据并执行导入操作即可,更多信息可以参考 http://www.bostongis.com/PrinterFriendly.aspx?content_name=postgis_tut01
10、ogr_fdw用来包装外部空间数据
不好的一点是 Postgresql APT不包括 ogr_fdw空间数据包装器,数据包装器使用GDAL,大量的管道作为Postgis的一部分已经被安装。编译不太困难,在Ubuntu上,我们可以通过以下的操作先编译后安装:
#for compiling ogr_fdw
cd ~/
mkdir sources
cd sources
sudo apt-get install git
sudo apt-get install postgresql-server-dev-9.6
sudo apt-get install make
sudo apt-get install gcc
sudo apt-get install libgdal1-dev
sudo git clone -b master https://github.com/pramsey/pgsql-ogr-fdw.git pgsql_ogr_fdw
cd pgsql_ogr_fdw
export PATH=/usr/lib/postgresql/9.6/bin:$PATH
make && make install
在完成二进制的编译和安装后,你可以将 ogr_fdw 扩展安装到数据库中:
sudo -u postgres psql
\connect gisdb;
CREATE EXTENSION ogr_fdw SCHEMA postgis;
CREATE SCHEMA IF NOT EXISTS staging ;
-- here I assume you have a file in root of /gis_data folder that postgres process has read rights to
-- any file that gdal can read will do e.g shape file, CSV, etc
CREATE SERVER svr_shp
FOREIGN DATA WRAPPER ogr_fdw
OPTIONS (
datasource '/gis_data',
format 'ESRI Shapefile' );
-- this will link in all your shapefile tables in folder gis_data as foreign tables
IMPORT FOREIGN SCHEMA ogr_all
FROM SERVER svr_shp INTO staging;