天天看点

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

1 环境

操作系统: centos7.6 64位

网络环境:可以访问互联网

2 PostgreSQL12.1的安装和配置

2.1 安装

  • 设置保存安装包的目录

cd /usr/local/src

  • 下载资源包
# https://www.postgresql.org/ftp/source/ 这里是官网资源
wget https://ftp.postgresql.org/pub/source/v12.1/postgresql-12.1.tar.gz 
           

安装wget工具:

yum -y install wget

  • 解压

tar zxvf postgresql-12.1.tar.gz

  • 移动位置

mv /usr/local/src/postgresql-12.1 /usr/local/pgsql/postgresql-12.1

目标位置不存在手动创建

  • 进入移动后的目录

cd /usr/local/pgsql/postgresql-12.1

  • 配置选项生成Makefile

默认安装到目录/usr/local/pgsql/postgresql-12.1

如果要安装到自定义目录,这里修改为 # ./configure --prefix= /usr/local/pgsql 红字部分是你的自定义路径

./configure

注:如果报错“configure: error: no acceptable C compiler found in $PATH”,没有安装gcc编译器,执行

yum -y install gcc gcc-c++

  • echo 一下返回是否为0, 0表示无错误

echo $?

  • 发现没有相关包依次安装
yum install -y bison
yum install -y flex
yum install -y readline-devel #(https://www.linuxidc.com/Linux/2012-02/53982.htm 这里有解释为什么安装这个)
yum install -y zlib-devel
           

重新执行

./configure

重新echo一下,返回0可以进行下一步

  • 编译

make

编译完再echo一下,如果返回0可以进行安装了

  • 安装

make install

  • 创建,添加postgres 用户到 postgres组
#创建组:postgres
groupadd postgres

#命令解释:useradd -g 用户组 用户
useradd -g postgres postgres       

#(创建一个data 目录)
mkdir -p /usr/local/pgsql/data

#( 改变data的权限为postgres用户)
chown postgres /usr/local/pgsql/data

#切换操作用户为 postgres
su - postgres                
           
  • 初始化数据库

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/

提示:初始化数据库的操作为: ./initdb -D /usr/local/pgsql/data initdb把用户指定的选项转换成对应的参数,通过外部程序调用的方式执行postgres程序。postgres程序在这种方式下将进入bootstrap模式创建数据集簇,并读取后端接口postgres.bki文件来创建模板数据库。

  • 启动数据库
#(启动数据库)
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data/ -l logfile start
#如果报错“waiting for server to start..../bin/sh: logfile: 权限不够”,尝试进入家目录cd ~再执行,原因不详。

#(停止数据库)
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data/ stop

#(重启数据库)
/usr/local/pgsql/bin/pg_ctl restart -D /usr/local/pgsql/data/ -m fast
           

2.2 配置

2.2.1 修改postgresql.conf文件

修改前先备份一下

cp /usr/local/pgsql/data/postgresql.conf /usr/local/pgsql/data/postgresql.conf_bak

编辑

vim /usr/local/pgsql/data/postgresql.conf

修改listen_addresses = '’ 前面的#号需要去掉(按/键输入listen_addresses可以快速查找该行。)默认参数是‘localhost‘ 只监听本机IP修改为’‘后,可以让远端的其它设备访问 。另外没有vim 可以使用# yum install -y vim 安装vim文本编辑工具。

2.2.2 修改pg_hba.conf文件

修改前先备份一下

cp /usr/local/pgsql/data/pg_hba.conf /usr/local/pgsql/data/pg_hba.conf_bak

编辑

vim /usr/local/pgsql/data/pg_hba.conf

添加以下,表示主机所有IP都可以访问。

host all all 0.0.0.0/0 trust

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

2.2.3 添加环境变量

#(输入密码后切换为root管理员)
su

#(之前我们创建了一个postgres的用户所以这里有这个目录)
cd /home/postgres

vim .bash_profile   
           

末尾添加

export PGHOME=/usr/local/pgsql
export PGDATA=/usr/local/pgsql/data
PATH=$PATH:$HOME/bin:$PGHOME/bin
export PATH
           

注意不要破坏原有的PATH设置,PATH的格式为:PATH=$PATH:/path1:/path2:/pahtn,用:分隔

使修改生效

source .bash_profile

2.2.4 设置开机自启动

cd /usr/local/pgsql/postgresql-12.1/contrib/start-scripts
#这里有个文件名叫linux的文件,它是linux系统的启动脚本
           
postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

由于这个文件权限没有设置为X可以执行权限,我们需要设置它为可运行。

chmod a+x linux

复制linux文件到/etc/init.d目录下,并更名postgresql

cp linux /etc/init.d/postgresql

编辑

prefix=/usr/local/pgsql  (安装程序的文件路径)
PGDATA="/usr/local/pgsql/data" (数据存放目录)
           

如果和自己的路径一致就不需要修改了。

添加开机启动项目

chkconfig --add postgresql

看下是否成功

chkconfig

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

2.2.5 设置系统配置,开放默认的5432端口

firewall-cmd --zone=public --list-ports

#添加5432端口
firewall-cmd --zone=public --add-port=5432/tcp --permanent

#重启防火墙
firewall-cmd --reload
           

注:如果报错“FirewallD is not running”,是防火墙没有打开。通过systemctl status firewalld查看firewalld状态,发现当前是dead状态,即防火墙未开启。通过systemctl start firewalld开启防火墙,没有任何提示即开启成功。再次通过systemctl status firewalld查看firewalld状态,显示running即已开启了。如果要关闭防火墙设置,可能通过systemctl stop firewalld这条指令来关闭该功能。开启之后就可以顺利执行上面的命令了。

附:如果是CentOS6 使用iptables执行以下步骤。

vim /etc/sysconfig/iptables

添加

-A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT 
           

重启服务

/etc/init.d/iptables restart

2.2.6 启动服务

service postgresql start

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

2.2.6 查看服务

ps -ef | grep postgres

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

2.2.7 设置默认密码

PostgreSQL安装后会自动创建一个用户,名为postgres。

su - postgres

默认密码为空,切换到postgres用户。

psql -U postgres

修改密码

ALTER USER postgres with encrypted password 'xxx';

#注:xxx改为你想设置的密码

退出

\q

2.3 连接测试

使用pgadmin或navicat等工具进行连接测试。过程不赘述。

3 PostGIS3.0安装

3.1 安装依赖

3.1.1 必须安装的软件或函数库

关于安装条件的官方说明官方说明

本次安装方案是源码编译安装。下面是官网对源码编译安装说明的原文。

To build from source, you will need a complete installation of PostgreSQL, either built and installed from source itself, or including the development headers and utilities. For Linux users, that means installing the

postgresql-devel

or

postgresql-dev

packages as well as the base packages.

You will also need to install and/or build GEOS, Proj, GDAL, LibXML2 and JSON-C.

大致意思是首先要安装完整的postgresql、geos,proj,gdal,libxml2和json-c。

  • PostgreSQL —— PostGIS构建于PostgreSQL之上,所以PostgreSQL必须要安装。
  • GEOS —— GEOS几何图形库,用于支持PostGIS中的几何信息处理、分析等功能,也可以直接认为GEOS是一个几何算法库。
  • Proj —— Proj 重投影库用于在PostGIS中提供坐标重投影功能。
  • GDAL —— 用于PostGIS对栅格数据的支持。
  • LibXML2 —— LibXML2目前用于PostGIS中的一些导入函数,比如ST_GeomFromGML()和ST_GeomFromKML()。
  • JSON-C —— 目前使用JSON-C通过ST_GeomFromGeoJSON()函数导入GeoJSON格式的数据

3.1.2 可选的软件或函数库

  • SFCGAL —— 用于提供额外的二维和三维的高级分析功能。允许对一些函数使用基于SFCGAL的实现,而不是使用基于GEOS的实现(例如ST_Intersection()和ST_Area()函数),如果安装了SFCGAL,PostgreSQL的配置变量postgis.backend允许终端用户控制他想使用哪个实现(默认情况下是GEOS的实现)。另外,SFCGAL依赖于CGAL和Boost这两个软件,即如果想安装SFCGAL,就先要安装这两个软件。最后pgrouting插件也依赖于CGAL和Boost。注:boost,cgal的安装,只要记住一点,只安装到默认路径,不要指定路径,否则坑死活不了。
  • protobuf —— 支持MVT等格式。
  • protobuf-c —— 支持MVT等格式,依赖protobuf。
  • PgRouting —— 用于网络分析。
  • 其他。待更新。。。

3.1.3 安装PostGIS依赖的软件和函数库

截止到2020年1月,PostGIS3.0是最新的正式版本。所有的软件和函数库也都安装同时的较新的正式发布版本。本次要安装的软件或函数库的清单信息如下表所示,只安装必要依赖。PostgreSQL已安装12.1,未安装请参考上文。

名称 版本 资源定位 发布时间
GEOS 3.8.0 http://download.osgeo.org/geos/geos-3.8.0.tar.bz2 2019年10月
Proj 5.2.0 http://download.osgeo.org/proj/proj-5.2.0.tar.gz 2018年9月
GDAL 2.3.0 http://download.osgeo.org/gdal/2.3.0/gdal-2.3.0.tar.gz 2018年5月
LibXML2 2.9.10 http://distfiles.macports.org/libxml2/libxml2-2.9.10.tar.gz 2019年11月
JSON-C 0.13.1 https://s3.amazonaws.com/json-c_releases/releases/json-c-0.13.1.tar.gz 不详

附:json-c-0.12资源地址:http://downloads.openwrt.org/sources/json-c-0.12.tar.gz

  • 下载资源包
cd /usr/local/src
wget http://download.osgeo.org/geos/geos-3.8.0.tar.bz2
wget http://download.osgeo.org/proj/proj-5.2.0.tar.gz
wget http://download.osgeo.org/gdal/2.3.0/gdal-2.3.0.tar.gz
wget http://distfiles.macports.org/libxml2/libxml2-2.9.10.tar.gz
wget https://s3.amazonaws.com/json-c_releases/releases/json-c-0.13.1.tar.gz
           

3.1.3.1 安装Proj

  • 解压proj-5.2.0.tar.gz

tar -zxvf proj-5.2.0.tar.gz

  • 进入proj-5.2.0

cd proj-5.2.0

  • 运行configure程序,并且设置proj安装的位置为/usr/local/proj-5.2.0

./configure --prefix=/usr/local/proj-5.2.0

echo一下,返回0进行下步

echo $?

  • 运行make命令进行源码包的编译

make

检查,没有问题进行下步

make check

  • 安装

make install

  • 查看

进入

/usr/local

查看,如下图所示表示成功。

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

3.1.3.2 安装GEOS

  • 解压geos-3.8.0.tar.bz2

tar -jxvf geos-3.8.0.tar.bz2

注:如果报错“tar (child): bzip2:无法 exec: 没有那个文件或目录”,是因为缺少bzip2包,执行

yum install -y bzip2

  • 进入geos-3.8.0

cd geos-3.8.0

  • 运行configure程序,并且设置geos安装的位置为/usr/local/geos-3.8.0

./configure --prefix=/usr/local/geos-3.8.0

注:如果只出现如下报错可忽略

Swig: false
Python bindings: false
Ruby bindings: false
           
  • 编译

make

  • 安装

make install

  • 查看

进入

/usr/local

查看,如下图所示表示成功。

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

3.1.3.3 安装LibXML2

  • 解压libxml2-2.9.10.tar.gz

tar -zxvf libxml2-2.9.10.tar.gz

  • 进入libxml2-2.9.10

cd libxml2-2.9.10

  • 运行configure程序,并且设置libxml安装的位置为/usr/local/libxml2-2.9.10

./configure --prefix=/usr/local/libxml2-2.9.10

  • 编译

make

注:如果编译报错“libxml.c:14:20: 致命错误:Python.h:没有那个文件或目录”,安装python-devel,执行

yum install python-devel

。安装完后重新编译。重新编译前执行

make clean

  • 安装

make install

  • 查看

进入

/usr/local

查看,如下图所示表示成功。

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

3.1.3.4 安装 JSON-C

  • 解压json-c-0.13.1.tar.gz

tar -zxvf json-c-0.13.1.tar.gz

  • 进入json-c-0.13.1

cd json-c-0.13.1

  • 运行configure程序,并且设置json-c安装的位置为/usr/local/json-c-0.13.1

./configure --prefix=/usr/local/json-c-0.13.1

  • 编译

make

注:如果报错“(CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/sh /usr/local/src/json-c-0.13.1/missing autoheader)”,安装automake,执行

yum install automake

。安装完成后,

make clean

后重新

make

如果出现set but not used [-Werror=unused-but-set-variable]问题的解决办法:

在makefile中将-Werror=unused-but-set-variable去除,如果在makefile中找不到,那么就应该在目录下的makefile.in中可以找到 -Weeor去掉即可

  • 安装

make install

  • 查看

进入

/usr/local

查看,如下图所示表示成功。

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

3.1.3.5 安装GDAL

  • 解压gdal-2.3.0.tar.gz

tar -zxvf gdal-2.3.0.tar.gz

注:如果报错

gzip: stdin: invalid compressed data--crc error

gzip: stdin: invalid compressed data--length error
tar: Child returned status 1
tar: Error is not recoverable: exiting now
           

可能文件不完整,重新下载资源。

  • 进入gdal-2.3.0

cd gdal-2.3.0

  • 运行configure程序,并且设置GDAL安装的位置为/usr/local/gdal-2.3.0

./configure --prefix=/usr/local/gdal-2.3.0

  • 编译

make

  • 安装

make install

  • 查看

进入

/usr/local

查看,如下图所示表示成功。

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

3.2 安装PostGIS

3.2.1 添加动态库路径

/etc/ld.so.conf 此文件记录了编译时使用的动态函数库的路径,也就是加载so库的路径。

默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,而通常通过源码包进行安装时,如果不

指定–prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加/usr/local/lib这个目录。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。

对于此种情况有2种解决办法:

(1)在用源码安装时,用–prefix指定安装路径为/usr/lib。这样的话也就不用配置PKG_CONFIG_PATH

(2)直接将路径/usr/local/lib路径加入到文件/etc/ld.so.conf文件的中。在文件/etc/ld.so.conf中末尾直接添加:/usr/local/lib

现在就使用第二种方法来为刚才安装的动态库添加路径,编辑/etc/lo.so.conf配置文件,

vim /etc/lo.so.conf

为其添加如下内容:

/usr/local/pgsql/lib
/usr/local/proj-5.2.0/lib
/usr/local/geos-3.8.0/lib
/usr/local/libxml2-2.9.10/lib
/usr/local/json-c-0.13.1/lib
/usr/local/gdal-2.3.0/lib
           

编辑内容如下

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

保存退出后,使用ldconfig命令将刚才指定的动态函数库加载到内存中:

ldconfig

3.2.2 编译和安装PostGIS

  • 设置保存安装包的目录

cd /usr/local/src

  • 下载资源包

wget http://download.osgeo.org/postgis/source/postgis-3.0.0.tar.gz

  • 解压

tar -zxvf postgis-3.0.0.tar.gz

  • 进入postgis-3.0.0文件夹

cd postgis-3.0.0

  • 运行configure程序

    运行configure程序,需要为configure程序指定以下参数:

    • –prefix=PREFIX —— PostGIS安装的位置
    • –with-pgconfig=FILE —— PostgreSQL提供了一个名为pg_config的文件,用于使PostGIS这样的插件能够定位到PostgreSQL的安装目录。
    • –with-gdalconfig=FILE —— GDAL提供了一个gdal-config文件,使PostGIS能定位到GDAL安装的目录。
    • –with-geosconfig=FILE —— GEOS提供了一个geos-config文件,使PostGIS能定位到GEOS安装的目录。
    • –with-xml2config=FILE —— XML2提供了一个xml2-config文件,使PostGIS能定位到XML2安装的目录。
    • –with-projdir=DIR —— 用于指定Proj的安装目录
    • –with-jsondir=DIR —— 用于指定JSON-C的安装目录
    现在就运行configure程序,并为其指定上面介绍的参数:

    ./configure --prefix=/usr/local/postgis-3.0.0 --with-pgconfig=/usr/local/pgsql/bin/pg_config --with-gdalconfig=/usr/local/gdal-2.3.0/bin/gdal-config --with-geosconfig=/usr/local/geos-3.8.0/bin/geos-config --with-projdir=/usr/local/proj-5.2.0 --with-xml2config=/usr/local/libxml2-2.9.10/bin/xml2-config --with-jsondir=/usr/local/json-c-0.13.1

  • 编译

make

  • 安装

make install

  • 查看

进入

/usr/local

查看,发现并没有出现postgis-3.0.0,原因暂时不明。进入数据库看能否正常添加postgis扩展.

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

连接geostar数据库(自行创建测试数据库),为其添加postgis扩展,成功。

3.2.3 数据库添加PostGIS扩展

进入数据后执行添加扩展命令

CREATE EXTENSION postgis

成功添加扩展表示安装成功。

查看版本

SELECT postgis_full_version();

postgresql12&postgis3安装文档1 环境2 PostgreSQL12.1的安装和配置3 PostGIS3.0安装

至此,postgis编译安装完成。

继续阅读