Ubuntu16.0.4 Postgresql Postgis 源码编译安装 & SDE数据库创建

声 明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。

缘起

客户的机器不支持外网,明明简单的部署也变得复杂起来了,本文就是用来记录离线部署的一些探索过程,For Me And For You like me。

软件安装

Postgresql安装(源码安装方式)

参考资料:《Postgresql修炼之道 从小工到专家》
参考博文:传送门
参考官方帮助:传送门(认真阅读环境要求,安装步骤等信息)
参考博文:快速入门PostgreSQL应用开发与管理 - 1 如何搭建一套学习、开发PostgreSQL的环境

  1. 下载源码包:传送门

  2. 拷贝源码包postgresql-9.4.21.tar.gz到目标机器,并解压,然后删除压缩包文件

    # 拷贝源码包到/usr/local/src
    # cd到指定目录
    cd /usr/local/src
    # 解压源码包
    tar -zxvf postgresql-9.4.21.tar.gz
    
  3. 在A机器(可以连外网)上下载依赖包

    # 安装make
    apt -d install make
    # 安装gcc
    apt -d install gcc
    # 安装g++
    apt -d install g++
    # 安装readline
    apt -d install libreadline-dev
    # 安装zlib
    apt -d install zlib1g
    apt -d install zlib1g.dev
    

    这些包都被缓存在 /var/cache/apt/archives/ 目录,可以利用打包命令将其打包,命令如下:
    tar -czvf pg-packages.tar.gz *

  4. 拷贝下载好的依赖包拷贝到B机器(可以连内网)

    # 拷贝 pg-packages.tar.gz文件到/var/cache/apt/archives目录,当然了你也可以拷贝到其他目录
    # cd到/var/cache/apt/archives目录
    # 解压文件
    tar -zxvf  pg-packages.tar.gz
    # 删除压缩包文件
    rm -rf pg-packages.tar.gz
    # 安装目录下的所有deb包
    dpkg -i *.deb
    # 执行如下命令确认是否执行成功,输出0为执行成功
    echo $?
    
  5. 安装libxml包,这块参考下面PostGIS的安装依赖包的过程。安装完后在/etc/profile里配置环境变量XML2_CONFIG

  6. 在B机器上执行./configure检查

    # cd到postgresql-9.4.21目录
    cd postgresql-9.4.21
    # 执行 ./configure查看当前环境是否支持安装,如果想用sde,这块的参数是必须的
    ./configure --with-libxml \
    	XML2_CONFIG=/opt/libxml2-2.9.0/bin/xml2-config
    # 执行如下命令确认是否执行成功,输出0为执行成功
    echo $?
    
  7. 执行make编译
    在这里插入图片描述

  8. 执行make install安装
    在这里插入图片描述

  9. 添加用户postgres

    # 添加用户postgres
    adduser postgres
    # 创建目录 /usr/local/pgsql/data
    mkdir /usr/local/pgsql/data
    # 修改目录的所有者(这块建议使用root用户修改data目录的权限,chmod 777 /usr/local/pgsql/data)
    chown postgres /usr/local/pgsql/data
    # 使用root用户,修改data目录的权限
    chmod 700 -R /usr/local/pgsql/data
    # 切换到用户postgres
    su - postgres
    # 初始化数据库
    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
    # 启动数据库服务
    /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
    # 创建数据库test
    /usr/local/pgsql/bin/createdb test
    # 连接数据库
    /usr/local/pgsql/bin/psql test
    

    大功告成,O(∩_∩)O哈哈~
    在这里插入图片描述

  10. 安装Contrib目录下的工具

    # 进入到postgresql目录下的contrib目录
    cd contrib
    # 编译
    make
    # 安装
    make install
    
  11. 简单配置

    # 设置PostgreSQL可执行文件的路径:
    PATH=/usr/local/pgsql/bin:$PATH
    export PATH
    # 设置共享库的路径:
    LD_LIBRARY_PATH=/usr/local/pgsql/lib
    export LD_LIBRARY_PATH
    

    如果你想让以上配置对所有的用户生效,可以把下面的内容加到/etc/profile文件中
    注:初次定义环境变量不需要使用:$变量名连接,网上很多的教程都会在后面加一个:$LD_LIBRARY_PATH,这种其实是不对的。

    export PATH=/usr/local/pgsql/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/pgsql/lib
    export PGDATA=/usr/local/pgsql/data
    

    执行source /etc/profile生效环境变量,执行echo $变量名输出环境变量,看是否生效

    # 输入如下命令,测试是否环境变量生效
    echo $PGDATA
    

    避免重启之后环境变量失效,编辑~/.bashrc文件

    # 编辑文件
    vi ~/.bashrc
    # 按字母i或者a进入插入模式,插入如下内容
    source /etc/profile
    # 按Esc键,输入:wq三个字符保存退出
    

Postgresql配置

  1. 修改监听的IP和端口

    # 修改配置文件postgresql.conf,如果找不到可以使用命令:find / -name postgresql.conf 查找
    vi  /etc/postgresql/10/main/ postgresql.conf
    # 将 #listen_addresses = ‘localhost’ 的注释去掉并改为 listen_addresses = ‘*’
    # 修改max_connections按需求更改,默认最大支持100个连接。修改之后保存并退出。
    
  2. 修改配置pg_hba.conf文件

    # 1.修改配置文件 pg_hba.conf,如果找不到可以使用命令:find / -name pg_hba.conf 查找
    vi /etc/postgresql/10/main/ pg_hba.conf 
    # 在最后一行添加,然后保存并退出(按Esc+:wq!)
    host    all             all             0.0.0.0/0            trust
    
  3. 日志文件配置

    # 开启日志收集
    logging_collector = on
    # 日志的记录一般使用默认值就可以了
    log_directory = 'pg_log'
    # 记录查询时间超过1000毫秒的sql语句
    log_min_duration_statement = 1000
    

    在这里插入图片描述

  4. 开机启动配置
    参考《Linux下PostgreSQL开机启动配置方法》
    参考官方帮助:https://www.postgresql.org/docs/9.4/server-start.html

    # 编辑/etc/rc.local文件,按i进入插入模式
    vi /etc/rc.local
    # 插入如下内容,引号里的路径替换成你安装对应的路径
    su postgres -c '/opt/pgsql-9.4.5/bin/pg-ctl start -D /opt/pgsql-9.4.5/data -m fast'
    

常用命令

位于pg的安装目录下的bin文件夹下有个pg_ctl的文件,在Postgres用户下执行which pg_ctl命令,如果找不到pg_ctl命令的路径的话,可以使用ln -s /opt/pgsql-9.4.5/bin/pg_ctl /usr/local/bin/pg_ctl 创建pg_ctl的软链接文件。

下面是pg_ctl的使用方法,实际使用的过程中可以执行pg_ctl --help查看详细的帮助。

pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload [-s] [-D datadir]
pg_ctl status [-D datadir]
pg_ctl kill [signal_name] [process_id]
pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w] [-o options]
pg_ctl unregister [-N servicename]

PostGIS安装(源码安装)

PostgreSQL和Postgis的对应关系表
在这里插入图片描述
参考博文:传送门(非常感谢这位同学^_^)
参考官方帮助:传送门
像PostgreSQL、make、gcc等上面安装了我就不赘述了,这块主要说一下需要安装的其它依赖包,这块以源码编译安装为例,当然了你如果觉得麻烦,也可以像我上面那样,用apt的方式下缓存好,然后拷贝过来一dpkg的方式安装。


个人心得:下载的依赖包有时可能会编译失败,编译安装的过程需要有足够的耐心。利用百度、谷歌查询相关问题,如果安装的包版本太低编译不过去,可以考虑换个新一点的安装包,遇到实在解决不了的问题可以去StackOverflow等论坛进行提问。


  1. Proj4 安装,要求安装版本 >=4.6.0

    # 这块我下载的是proj-4.9.2.tar.gz,并拷贝到B机器的/usr/local/src目录
    # 进入/usr/local/src目录
    cd /usr/local/src
    # 解压
    tar -zxvf proj-4.9.2.tar.gz
    # 进入解压好的目录
    cd proj-4.9.2/
    # 检查,可以配置安装路径 --prefix=/opt/proj-4.9.2
    ./congigure
    # 编译
    make
    # 安装
    make install
    
  2. Geos安装,要求安装版本>=3.3

     tar -jxvf geos-3.5.1.tar.bz2
     cd geos-3.5.1/
     ./configure --prefix=/opt/geos-3.5.1
     make
     make install
    
  3. LibXML2安装,要求安装版本>=2.5.x

    tar -zxvf libxml2-2.9.0.tar.gz
    cd libxml2-2.9.0/
    ./configure --prefix=/opt/libxml2-2.9.0
    make
    make install	
    

    备注:这块编译会报错:cannot remove ‘libtoolT’:No such file or directory
    解决方法:编辑configure文件vim configure,在vim的一般模式下输入/+RM "$cfgfile"进行搜索匹配,按i进入插入模式,将$RM "$cfgfile"替换成$RM -f "$cfgfile",然后按Esc回到一般模式,输入:wq保存退出。

  4. GDAL安装,要求安装版本>=1.8

    tar -zxvf gdal-2.4.0.tar.gz
    cd gdal-2.4.0/
    ./configure --prefix=/opt/gdal-2.4.0
    make
    make install		
    
  5. JSON-C安装,要求安装版本>=0.9

    tar -zxvf json-c-json-c-0.13.1-20180305.tar.gz
    cd json-c-json-c-0.13.1-20180305/
    ./configure --prefix=/opt/json-c-0.13.1
    make
    make install
    
  6. PostGIS 安装

    tar xvfz postgis-2.4.8dev.tar.gz
    cd postgis-2.4.8dev
    # 需要指定依赖包的位置,直接./configure可能会有问题
    ./configure --prefix=/opt/postgis-2.2.8 \
    		--with-pgconfig=/usr/local/pgsql/bin/pg_config \
    		--with-gdalconfig=/opt/gdal-2.4.0/bin/gdal-config \
    		--with-geosconfig=/opt/geos-3.5.1/bin/geos-config \
    		--with-xml2config=/opt/libxml2-2.9.0/bin/xml2-config \
    		--with-projdir=/opt/proj-4.9.2 \
    		--with-jsondir=/opt/json-c-0.13.1
    make
    make install
    

    可能会遇到如下错误:

    `autoheader' is missing on your system
    recipe for target ‘config.h.in’ failed
    

    遇到此错误只需touch config.h.in即可解决。

  7. 创建PostGIS的扩展
    shell:

    sudo -u postgres psql -d gis -c 'CREATE EXTENSION postgis;'
    sudo -u postgres psql -d gis -c 'CREATE EXTENSION postgis_topology;'
    

    psql:
    在这里插入图片描述


闭坑指南

  1. ERROR: could not load library "/usr/local/pgsql/lib/postgis-2.2.so": libgeos_c.so.1: cannot open shared object file: No such file or directory
    原因:
    在这里插入图片描述
    解决方案:参考博文

    # 参考上面json-c的路径,拷贝到了缺失的文件到目录/lib/x86_64-linux-gnu/
    cp /opt/geos-3.5.1/lib/libgeos_c.so.1 /lib/x86_64-linux-gnu/
    cp /opt/proj-4.9.2/lib/libproj.so.9 /lib/x86_64-linux-gnu/
    
  2. lwin_geojson.c:22:40: fatal error: json-c/json_object_private.h: No such file or directory
    解决方案:

    cd /usr/include
    sudo mkdir json
    sudo cp /usr/local/include/json-c/* /usr/include/json/
    
  3. ERROR: could not load library "/usr/local/pgsql/lib/rtpostgis-2.2.so": libgdal.so.20: cannot open shared object file: No such file or directory
    在这里插入图片描述
    解决方案:

    cp /opt/gdal-2.4.0/lib/libgdal.so.20 /lib/x86_64-linux-gnu/
    

创建ArcSDE数据库

  1. 确认当前ArcGIS支持的Postgresql和PostGIS版本,ArcGIS 支持的PostgreSQL版本
  2. 拷贝C:\Program Files (x86)\ArcGIS\Desktop10.4\DatabaseSupport\PostgreSQL\9.4\Linux64目录下的so文件到PKGLIBDIR变量所指向的目录中(执行pg_config命令获取)
    在这里插入图片描述
  3. 使用GP工具Create Enterprise Geodatabase创建企业级地理数据库(具体参数略)
发布了96 篇原创文章 · 获赞 95 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/yh0503/article/details/88526633