centos7 postgresql9和postgis2.1插件编译部署

目录

依赖安装

下载编译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()

看到版本是新的了

发布了426 篇原创文章 · 获赞 33 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/whq12789/article/details/103531038