一、安装postgresql(无特殊说明,命令均为root权限命令,不是root用户请自行添加sudo)

1、下载postgresql

采用源码安装,可以到官网https://www.postgresql.org/ftp/source/选择合适版本进行下载安装,本实例中选择postgresql-9.3.2.tar.gz此版本进行安装


2、解压文件:

tar -zxvf postgresql-9.3.2.tar.gz


3、进入解压目录并配置参数

cd postgresql-9.3.2     //进入解压目录

sudo mkdir /opt/postgresql-9.3.2    //创建安装目录

./configure --prefix=/opt/postgresql-9.3.2    //配置安装参数

问题处理:

如果出现configure: error: readline library not found错误,说明系统中缺少readline库,这时输入:


rpm -qa | grep readline

如果提示:


readline-6.0-4.el6.x86_64

那么,你的电脑缺少readline-devel库,你只要安装一下readline-devel就行了:


yum -y install readline-devel

再次rpm -qa | grep readline

提示:


readline-6.0-4.el6.x86_64

readline-devel-6.0-4.el6.x86_64

说明readline-devel安装成功。


4、编译与安装:

make

make install

5、创建用户组和用户来管理postgresql数据库

groupadd postgres      //创建用户组:

useradd -g postgres postgres     //创建用户:

6、创建数据库库文件存储目录并给postgresql用户赋予权限:

cd /opt/postgresql-9.3.2   //进入数据库安装目录

mkdir data            //创建data目录

chown postgres.postgres  data    //给postgres 用户赋予权限

7、添加环境变量

#postgresql

export POSTGRESQL_HOME=/opt/postgresql-9.3.2

export PGDATA=/opt/postgresql-9.3.2/data

export PATH=$PATH:$POSTGRESQL_HOME/bin:$PGDATA


8、初始化数据库目录:

su postgres    //切换用户

sudo passwd postgres    //如果没有配置密码,先给postgresql配置密码

bin/initdb -D data         //在安装目录下初始化数据

9、启动数据库

bin/postmaster -D /opt/postgresql-9.3.2/data      //可以通过postmaster脚本启动:

10、进行配置文件

(1)目前位置,该数据库只能允许本地访问,如果运行其他用户访问的话还需继续进行如下配置:

vi data/postgresql.conf     //编辑配置文件

#原配置

#  listen_addresses = '127.0.0.1'

#  port = 5432

#修改后

#     listen_addresses = '*'

#  port = 5432

(2)允许远程主机连接

 vi data/pg_hba.conf    //编辑配置文件 天加如下配置host all all 0.0.0.0/0  password


# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only

local   all             all                                     trust

# IPv4 local connections:

host    all             all             0.0.0.0/0               password

host    all             all             127.0.0.1/32            trust

# IPv6 local connections:

#host    all             all             ::1/128                 trust

# Allow replication connections from localhost, by a user with the

# replication privilege.

#local   replication     postgres                                trust

#host    replication     postgres        127.0.0.1/32            trust

#host    replication     postgres        ::1/128                 trust

注意:

1.其中,"trust"和"password"为postgresql数据库登陆验证的方式,"trust"表示信任,即不需要输入密码(即使有密码),"password"表示需要输入密码。

2.host all all 127.0.0.1/31 trust表示本地连接数据库不需要输入密码(即使有密码,设为trust后就不需要密码)

3.host all all 0.0.0.0/0 所有主机连接数据库需要输入密码(如果有密码)

4.当然,这两个综合后表现的结果就是:对于本机链接表示信任(不需要输入密码),对于非本机链接需要输入密码


(3)打开日志(根据个人习惯与需求而定)

# - Where to Log -

log_destination = 'stderr'              # Valid values are combinations of

                                        # stderr, csvlog, syslog, and eventlog,

                                        # depending on platform.  csvlog

                                        # requires logging_collector to be on.

# This is used when logging to stderr:

logging_collector = on          # Enable capturing of stderr and csvlog

                                        # into log files. Required to be on for

                                        # csvlogs.

                                        # (change requires restart)

# These are only used if logging_collector is on:

log_directory = 'pg_log'                # directory where log files are written,

                                        # can be absolute or relative to PGDATA

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,

                                        # can include strftime() escapes

log_file_mode = 0600                    # creation mode for log files,

                                        # begin with 0 to use octal notation

log_rotation_size = 10MB                # Automatic rotation of logfiles will

                                        # happen after that much log output.

                                        # 0 disables.

11、修改防火墙,开放5432端口:

vim /etc/sysconfig/iptables             //打开防火墙配置表

-A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT    //添加端口配置

service iptables restart               //重启防火墙

12、添加开机自启

vim /etc/rc.d/rc.local                      //修改脚本文件rc.local

/opt/postgresql-9.3.2/bin/pg_ctl start &          //添加启动项

13、常用命令

psql       //进入数据库

pg_ctl stop -m fast     //pg_ctl工具关闭postgresql数据库

pg_ctl start      //pg_ctl工具启动postgresql数据库

CREATE USER testuser WITH PASSWORD '123456'   //创建数据库用户并设置密码

至此,postgresql数据库就安装完毕了,可以使用上面创建的用户进行远程登录了。

为了给大家提供更多参考,贴上我的远程登录截图:


image.png


image.png

二、安装postgis扩展

依然选择源码安装,其中依赖放入/opt目录下(与上面postgresql同一目录)


1、安装GEOS

cd /home

wget http://download.osgeo.org/geos/geos-3.5.0.tar.bz2

tar -jxvf geos-3.5.0.tar.bz2     

cd geos-3.5.0    

./configure --prefix=/opt/geos   

make  

make install  

2、安装PROJ

cd /home

wget http://download.osgeo.org/proj/proj-4.9.2.tar.gz 

tar -zxvf proj-4.9.2.tar.gz     

cd proj-4.9.2     

./configure --prefix=/opt/proj

make  

make install  

3、安装GDAL

cd /home

wget http://download.osgeo.org/gdal/2.1.1/gdal-2.1.1.tar.gz

tar -zxvf gdal-2.1.1.tar.gz 

cd gdal-2.1.1     

./configure --prefix=/opt/gdal --with-pg=/opt/postgresql-9.3.2/bin/pg_config

make  

make install  

4、安装LibXML2 json-c 等等

yum install -y libtool libxml2 libxml2-devel libxslt libxslt-devel json-c json-c-devel cmake gmp gmp-devel mpfr mpfr-devel boost-devel pcre-devel

5、安装postgis

起初选用的是postgis-2.3.9.tar.gz进行安装,后来由于与geos版本冲突,降至postgis-2.3.0.tar.gz,下面直接安装postgis-2.3.0.tar.gz


cd /home

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

tar -zxvf postgis-2.3.0.tar.gz

./configure --prefix=/opt/postgis  --with-gdalconfig=/opt/gdal/bin/gdal-config   --with-pgconfig=/opt/postgresql-9.3.2/bin/pg_config     --with-geosconfig=/opt/geos/bin/geos-config  --with-projdir=/opt/proj

make

make install

问题

在执行 ./configure 语句时,报错报错信息如下:

checking for library containing GDALAllRegister... no

configure: error: could not find GDAL

寻找资料查到

解决办法:将PostgreSQL的lib目录(/postgresql/lib)和GDAL的lib文件目录(/usr/local/lib)添加到系统的库文件目录中


echo '/opt/postgresql-9.3.2/lib' >> /etc/ld.so.conf

echo '/opt/gdal/lib' >> /etc/ld.so.conf

ldconfig

检查是否生效


[root@iZwz91test postgis]# ldconfig -p | grep libpq

        libpqwalreceiver.so (libc6,x86-64) => /opt/postgresql-9.3.2/lib/libpqwalreceiver.so

        libpq.so.5 (libc6,x86-64) => /opt/postgresql-9.3.2/lib/libpq.so.5

        libpq.so (libc6,x86-64) => /opt/postgresql-9.3.2/lib/libpq.so

[root@iZwz91test postgis]# ldconfig -p | grep gdal

        libgdal.so.20 (libc6,x86-64) => /opt/gdal/lib/libgdal.so.20

        libgdal.so (libc6,x86-64) => /opt/gdal/lib/libgdal.so

[root@iZwz91xrxrsmpvm8nkl1n6Z postgis]# 

但是执行完代码后,仍然报错,后来我将gdal路径添加到环境变量中


#gdal

export GDAL=/opt/gdal

export PATH=$PATH:$GDAL/bin

然后./configure 竟然神奇的通过了!

后续进行创建posigis扩展测试


[postgres@iZwz91test /]$ psql

psql (9.3.2)

Type "help" for help.


postgres=# create extension postgis;

ERROR:  could not load library "/opt/postgresql-9.3.2/lib/postgis-2.3.so": /opt/postgresql-9.3.2/lib/postgis-2.3.so: undefined symbol: GEOSClipByRect

postgres=# \q

配置依赖软连接


 vim /etc/ld.so.conf

/opt/postgresql-9.3.2/lib

/opt/gdal/lib

#添加代码

/opt/geos/lib

/opt/proj/lib

#刷新

ldconfig

继续进行创建posigis扩展测试最终创建成功了。



[postgres@iZwz91test /]$ psql

psql (9.3.2)

Type "help" for help.


postgres=# create extension postgis;

CREATE EXTENSION

postgres=# \q


原文连接:https://www.jianshu.com/p/a42f3d308993