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
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系统的启动脚本
由于这个文件权限没有设置为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
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
2.2.6 查看服务
ps -ef | grep postgres
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
查看,如下图所示表示成功。
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
查看,如下图所示表示成功。
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
查看,如下图所示表示成功。
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
查看,如下图所示表示成功。
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
查看,如下图所示表示成功。
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
编辑内容如下
保存退出后,使用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扩展.
连接geostar数据库(自行创建测试数据库),为其添加postgis扩展,成功。
3.2.3 数据库添加PostGIS扩展
进入数据后执行添加扩展命令
CREATE EXTENSION postgis
成功添加扩展表示安装成功。
查看版本
SELECT postgis_full_version();
至此,postgis编译安装完成。