安装规划:
1. 版本选择:
根据postgis官方的说明,推荐的版本组合如下:
http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS
postgis 2.1 与pgsql 9.1/9.2/9.3是最佳的,最新的pgsql 9.4并不是最好的选择(虽然支持 实际使用中也正常)
postgis 2.1与geos组合:
3.3 可用,但不推荐
3.4/3.5 推荐
gdal 版本要求:1.8可用,但不推荐。推荐使用 1.9/1.10/1.11
postgresql 9.4
gdal 1.9
postgis 2.1.5
最佳组合如下:
pgsql 9.1/9.2/9.3
geos 3.4/3.5
gdal 1.9
故推荐的组合为 pgsql 9.3 + geos 3.5 + gdal 1.10
一、搭建postgresql
安装前准备
yum install readline-devel zlib-devel
useradd pgsql
下载源码并解压、编译安装
wget https://ftp.postgresql.org/pub/source/v9.4.1/postgresql-9.4.1.tar.bz2
tar -xjvf postgresql-9.4.1.tar.bz2
cd postgresql-9.4.1
./configure --prefix=/home/pgsql
make&&make install
建立好database cluster目标文件夹
mkdir -p /home/pgsql/data
环境变量设置:
[root@web1 data]# cat /etc/profile.d/pgsql.sh
#/bin/bash
PGDATA=/home/pgsql/data
PATH=$PATH:/home/pgsql/bin
LD_LIBRARY_PATH=/home/pgsql/lib
export PGDATA PATH LD_LIBRARY_PATH
让环境变量生效
source /etc/profile
初始化数据库(指定PGDATA后可以不用-D参数)
pg_ctl initdb 否则需要:
initdb -D /home/pgsql/data(上面的不行就用下面这种,data文件夹里需为空)
可以看到最后显示为:
Success. You can now start the database server using:
/home/pgsql/bin/postgres -D /home/pgsql/data
or
/home/pgsql/bin/pg_ctl -D /home/pgsql/data -l logfile start
启动数据库实例 ,开启服务(根据上面结果两种选一种)
mkdir /home/pgsql/log # 记录日志
/home/pgsql/bin/postgres -D /home/pgsql/data(需在pgsql用户下进行)
关闭数据库实例
pg_ctl stop
开启远程连接
修改:
cd /home/hadoop/pgsql/data
vim pg_hba.conf # hba = host based authentication
# IPv4 local connections:
host all all 0.0.0.0/0 trust
为了打开PostgreSql Server的外部访问,需要向文件末尾添加内容。例如:假如我们安装PostgreSql Server的服务器IP地址是192.168.10.254,我们希望该子网内(即IP为192.168.10.*)所有计算机都能连接这台PostgreSql Server,并且都需要用户名/密码登录,则可以添加如下行:
host all all 192.168.10.0/24 md5
这个例子中,“192.168.10.0/24”表示允许所有IP为“192.168.10.*”的计算机对服务器进行访问,“24”即IP的掩码有24个二进制的“1”,就是子网掩码的概念;例如,如果我们希望所有IP为“192.168.*.*”的计算机对服务器进行访问,则可以写为“192.168.10.0/16”。
第一个all表示允许访问所有数据库,第二个all表示允许所有用户名的用户登录;这两个域的设置可以参阅该文件前面长长的说明内容,本文不再赘述。
最后的md5表示用加密后的密码进行用户名/密码匹配的认证,这里的“用户名”是指数据库的用户,而不是操作系统的用户。常用的几种其他认证方式有ident(与操作系统的用户名做映射,采用操作系统的认证,数据库用户与操作系统用户之间的映射在pg_ident.conf文件中配置)、password(在网络传送明文密码认证,不安全)、trust(完全信任)、peer(取客户端操作系统的用户名,一般仅用来做本地连接)。
通常,采用数据库用户的用户名和密码进行认证,即md5。
继续修改:
vim postgresql.conf
listen_addresses = '*' # 修改该行为监听所有地址的请求
配置防火墙
su - root
vi /etc/sysconfig/iptables
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5432 -j ACCEPT
service iptables restart
或者直接关闭:
/etc/init.d/iptables status
chkconfig iptables off #永久关闭,重启生效
/etc/init.d/iptables stop #当前关闭
系统服务(用root权限):
复制postgresql安装目录下的linux文件到/etc/init.d/,进入postgresql 的安装目录(即刚刚使用tar命令解压的目录):
cd postgresql-9.4.1
cp contrib/start-scripts/linux /etc/init.d/postgresql
vim /etc/init.d/postgresql
修改如下:
# 修改prefix
prefix = /home/pgsql
# 修改PGDATA
PGDATA="/home/pgsql/data"
# 修改PGUSER
PGUSER=pgsql
# 修改PGLOG
PGLOG="$PGDATA/log/logfile"(可能没有这个文件,需要自己创建)
添加执行权限:
chmod +x /etc/init.d/postgresql
这样,还可以通过系统命令开启和关闭postgresql服务(需要root权限):
/etc/init.d/postgresql start
/etc/init.d/postgresql stop
综上,搭建完成。
测试(切换到PGUSER用户下),创建一个新数据库,并打开:
createdb test
psql test
\l # 查看所有数据库
\q # 退出
下面配置PgAdmin。
使用psql命令行界面设置postgres用户的密码:
psql test
test=#ALTER USER pgsql with password ‘pgsql‘;
ALTER ROLE
postgres=#\q
上面test=#表示目前进入PostgreSql Server的是超级用户,否则是test=\形式。
这样,PostgreSql Server具备了一个超级用户pgsql,其密码是pgsql。可以从远程用各种客户端工具连接这台服务器了。
二、开始postgis的安装:
postgis依赖gdal, 但yum源中的版本过低,不满足最低版本要求(1.8+),故从源码安装之:
wget ftp://ftp.remotesensing.org/gdal/gdal-1.9.2.tar.gz
tar -zvxf gdal-1.9.2.tar.gz
cd gdal-1.9.2
./configure --prefix=/home/user/gdal
make
make install
将gdal的库目录加入到系统库文件检索目录中:
echo /home/user/gdal/lib/ >> /etc/ld.so.conf
ldconfig
postgis依赖以下库:
geos 3.3+, 推荐使用3.4及以上版本, EPEL中的版本为3.3.2
yum install geos-devel proj*
wget http://download.osgeo.org/postgis/source/postgis-2.1.6.tar.gz
tar zxvf postgis-2.1.6.tar.gz
cd postgis-2.1.6
./configure --with-gdalconfig= /home/user/gdal/gdal-config
make&&make install
登录pgsql命令行,安装gis扩展:
psql test -U pgsql
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
出错:
ERROR: could not open extension control file "/usr/local/pgsql/share/extension/fuzzystrmatch.control": No such file or directory
这个扩展已经包含在pgsql源码中,但是默认并未完成,所以需要安装之,进入pgsql源码目录:
cd contrib/fuzzystrmatch/
make
make install
然后再在pgsql命令行下执行:CREATE EXTENSION fuzzystrmatch;
没有出现错误
CREATE EXTENSION postgis_tiger_geocoder;
没有出错,至此postgis安装完成
感谢朋友黄炜