目录
依赖安装
下载编译libgeos
下载编译proj4
编译Postgresql9
编译PostGIS2
启动postgresql服务
开通外部网络访问
数据库开启PostGIS扩展
查看PostGIS版本
升级PostGIS版本
依赖安装
这个命令里面安装的包可能会多,由于是编译GreenPlum用的,没有尝试最小安装
yum install -y epel-release
yum install -y \
apr-devel \
bison \
bzip2-devel \
cmake3 \
flex \
gcc \
gcc-c++ \
krb5-devel \
libcurl-devel \
libevent-devel \
libkadm5 \
libyaml-devel \
libxml2-devel \
libzstd-devel \
openssl-devel \
perl-ExtUtils-Embed \
python-devel \
python-pip \
readline-devel \
xerces-c-devel \
zlib-devel
yum install -y gdal-devel
yum install -y gdal-devel
下载编译libgeos
yum install -y wget
wget http://download.osgeo.org/geos/geos-3.8.0.tar.bz2
yum install -y bzip2
tar jxf geos-3.8.0.tar.bz2
#编译
./configure -prefix=/usr/local/geos && make && make install
下载编译proj4
wget http://download.osgeo.org/proj/proj-4.9.3.tar.gz #http://download.osgeo.org/proj/proj-6.2.1.tar.gz 注意项目需要的是4.x,其他版本不可用
tar zxf proj-4.9.3.tar.gz
cd proj-4.9.3
yum install -y libsqlite3x-devel
./configure -prefix=/usr/local/proj4 && make && make install
编译Postgresql9
#wget http://ftp.postgresql.org/pub/source/v9.6.9/postgresql-9.6.9.tar.gz
wget http://ftp.postgresql.org/pub/source/v9.6.9/postgresql-9.6.9.tar.bz2
tar jxvf postgresql-9.6.9.tar.bz2
cd postgresql-9.6.9
./configure -prefix=/usr/local/pgsql
make && make install
编译PostGIS2
#wget https://download.osgeo.org/postgis/source/postgis-2.2.8.tar.gz
wget https://download.osgeo.org/postgis/source/postgis-2.1.5.tar.gz
tar zxf postgis-2.1.5.tar.gz
cd postgis-2.1.5
./configure --with-pgconfig=/usr/local/pgsql/bin/pg_config --with-projdir=/usr/local/proj4
make
make报错
lwgeom_accum.c:109:46: error: ‘AggState {aka struct AggState}’ has no member named ‘aggcontext’; did you mean ‘aggcontexts’?
aggcontext = ((AggState *) fcinfo->context)->aggcontext;
搜索了好久才找到(http://osgeo-org.1560.x6.nabble.com/2-0-7-build-error-on-Fedora-22-td5214694.html)
vi postgis/lwgeom_accum.c
修改(参照https://trac.osgeo.org/postgis/browser/branches/2.1/postgis/lwgeom_accum.c)
108行附近
将
if (fcinfo->context && IsA(fcinfo->context, AggState))
aggcontext = ((AggState *) fcinfo->context)->aggcontext;
else if (fcinfo->context && IsA(fcinfo->context, WindowAggState))
aggcontext = ((WindowAggState *) fcinfo->context)->aggcontext;
else
改为
if ( ! AggCheckCallContext(fcinfo, &aggcontext) )
然后编译就通过了
看来是发包之后有人修复了这个bug……
#安装
make install
启动postgresql服务
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
#初始化数据库
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
#启动服务
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
#创建test库
/usr/local/pgsql/bin/createdb test
#psql登录到test库测试
/usr/local/pgsql/bin/psql test
#查看进程
ps -ef|grep postgres
开通外部网络访问
(默认绑定127.0.0.1仅能本机访问)
#开通防火墙
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload
#修改配置
cd /usr/local/pgsql/data
vi postgresql.conf
修改
listen_addresses = '0.0.0.0'
max_connections = 1000
#信任远程连接
vi pg_hba.conf
修改
host all all 0.0.0.0/0 md5
重启数据库
#设置postgres用户的密码
/usr/local/pgsql/bin/psql -U postgres
登录数据库,执行后提示符变为 'postgres=#'
ALTER USER postgres with encrypted password 'postgres'; 设置postgres用户密码为postgres
\q 退出数据库
此时可以通过外部数据库客户端软件连接进行数据库管理
数据库开启PostGIS扩展
连接一个数据库,执行sql语句
CREATE EXTENSION PostGIS
报错
ERROR: could not load library "/usr/local/pgsql/lib/postgis-2.1.so": libproj.so.12: 无法打开共享对象文件: 没有那个文件或目录
此时修改
vi /etc/ld.so.conf
添加
/usr/local/proj4/lib
#使配置生效
ldconfig
再次执行开启扩展
CREATE EXTENSION PostGIS
成功,public模式下出现spatial_ref_sys表
创建GIS类型字段成功
CREATE TABLE "public"."gis_test" (
"id" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,
"name" varchar(255) COLLATE "pg_catalog"."default",
"the_geom" "public"."geometry",
CONSTRAINT "gis_test_pkey" PRIMARY KEY ("id")
)
;
查看PostGIS版本
SELECT PostGIS_version()
升级PostGIS版本
首先到源码目录/root/postgis-2.1.5
make uninstall
在到下载编译源码postgis-2.2.8
最后make install
重启Postgresql后,版本依然是旧的,此时DROP掉扩展
DROP EXTENSION PostGIS
提示有几个表已经使用了,需要把相应的表删除掉(注意做好备份)
再次
DROP EXTENSION PostGIS
此时
SELECT PostGIS_version()
看到版本是新的了