安装规划:
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
yum仓库的geos和gdal版本太旧,所以应该从源码安装geos 3.5和gdal 1.10
计划使用EPEL安装附加的软件包:
rpm -ivh http://mirrors.zju.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
2. 数据目录位于 /data/pgdata
3. pgsql服务器进程账号名称为postgres
先按正常的顺序安装postgresql
安装必要的依赖库
yum install gd gd-devel libtool* autoconf* readline*
1. 建立系统用户postgres, 它将作为pgsql服务器进程和默认的超级用户
useradd postgres
tar -xf postgresql-9.4.0.tar.gz
cd postgresql-9.4.0
./configure
make
make install
默认安装到/usr/local/pgsql目录中
将其库目录加入到系统库文件检索路径中:
echo /usr/local/pgsql/lib >> /etc/ld.so.conf
ldconfig
向/root/.bashrc文件中加入以下内容;
export PATH="$PATH:/usr/local/pgsql/bin"
再执行 source ~/.bashrc
以便方便使用pgsql的命令
安装系统服务,源码包中已经包含服务启动脚本
cp contrib/start-scripts/linux /etc/init.d/postgres
chmod +x /etc/init.d/postgres
chkconfig --add postgres
然后修改 /etc/init.d/postgres文件,将PGDATA变量修改为/data/pgdata
即我们规划的数据目录
初始化数据库目录:
mkdir -p /data/pgdata
chown -R postgres:postgres /data/pgdata
初始化数据库:
必须使用postgres用户执行:
su postgres
/usr/local/pgsql/bin/initdb -D /data/pgdata/
exit
初始化完成后,就可以启动服务
service postgres start
验证:
netstat -ntpl
postgresql默认监听在5432端口
psql -U postgres
到此,postgresql安装完成
二、开始postgis的安装:
postgis依赖gdal, 但yum源中的版本过低,不满足最低版本要求(1.8+),故从源码安装之:
tar -xf gdal-1.9.0.tar.gz
cd gdal-1.9.0
./configure
make
make install
将gdal的库目录加入到系统库文件检索目录中:
echo /usr/local/lib >> /etc/ld.so.conf
ldconfig
postgis依赖以下库:
geos 3.3+, 推荐使用3.4及以上版本, EPEL中的版本为3.3.2
yum install geos-devel proj*
tar -xf postgis-2.1.5.tar.gz
cd cd postgis-2.1.5
./configure
make
make install
登录pgsql命令行,安装gis扩展:
psql test -U postgres
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安装完成
测试功能:
CREATE TABLE mytable (
id SERIAL PRIMARY KEY,
geom GEOMETRY(Point, 26910),
name VARCHAR(128)
);
CREATE INDEX mytable_gix
ON mytable
USING GIST (geom);
INSERT INTO mytable (geom) VALUES (
ST_GeomFromText('POINT(0 0)', 26910)
);
SELECT id, name
FROM mytable
WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(0 0)', 26910),
1000
);