postgersql+postgis

安装规划:

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安装完成

感谢朋友黄炜

你可能感兴趣的:(sql,Gis,postgre)