国产系统安装postgresql+postgis

最近因为工作需要,在多个国产操作系统服务器上安装了postgresql11.5+postgis3.0.5(鲲鹏、统信uos,中标麒麟,银河麒麟),在整个过程中遇到了不少问题。

一路走来,虽说踩了各种奇奇怪怪的坑,但也的确学到了不少东西,在此总结记录一下安装过程和遇到的各种问题,给各位伙伴提供力所能及的帮助,也提供一些解决问题的思路。

全文尽可能多使用离线安装的方式(原谅我有些地方偷懒了,选择了在线安装)。

一、postgresql11.5安装

#进入到软件包存储目录

cd /home/

#解压安装包

tar -xjf postgresql-11.5.tar.bz2

#进入安装包所在目录

cd postgresql-11.5/

#开始安装配置

./configure

##以下为控制台输出结果

checking build system type... x86_64-pc-linux-gnu

checking host system type... x86_64-pc-linux-gnu

checking which template to use... linux

checking whether NLS is wanted... no

checking for default port number... 5432

checking for block size... 8kB

checking for segment size... 1GB

checking for WAL block size... 8kB

checking for gcc... no

checking for cc... no

configure: error: in `/home/postgre11.5/postgresql-11.5':

configure: error: no acceptable C compiler found in $PATH

See `config.log' for more details

#提示$PATH中找不到可接受的C编译器

可能是系统自带的gcc版本太低或者系统没有安装gcc。

如果有外网环境,可以直接在线安装

yum install gcc

#继续编译postgresql

./configure

#提示找不到readline库

configure: error: readline library not found

If you have readline already installed, see config.log for details on the

failure.  It is possible the compiler isn't looking in the proper directory.

Use --without-readline to disable readline support.

#需要安装readline

yum install readline-devel -y

可能会提示glibc32-2.20-7.2.x86_64 和 glibc-2.17-292.el7.ns7.02.i686冲突,导致readline无法安装(麒麟系统问题)

更新yum(过程会比较长,耐心等待)

yum update(麒麟系统才会遇到的问题)

继续编译postgresql

./configure

提示缺少zlib

configure: error: zlib library not found

If you have zlib already installed, see config.log for details on the

failure.  It is possible the compiler isn't looking in the proper directory.

use --without-zlib to disable zlib support.

#安装zlib

yum install zlib-devel

继续编译postgresql(过程会比较长,耐心等待)

./configure

make

提示编译成功

开始安装

make install

postgresql被成功安装,并且根据输出信息可能看到postgresql被默认安装在/usr/local/pgsql目录下

#设置数据存储目录

mkdir -p /usr/local/pgsql/pgdata

#添加用户,并给权限改为postgres

useradd postgres

chown -R postgres:postgres /usr/local/pgsql/

#编辑环境变量文件

vim /etc/profile

#环境变量配置

export PATH=/usr/local/pgsql/bin:$PATH

LD_LIBRARY_PATH=/usr/local/pgsql/lib

export LD_LIBRARY_PATH

#重载配置让环境变量设置生效

source /etc/profile

#切换到postgres用户,并初始化数据库

su - postgres

initdb -D  /usr/local/pgsql/pgdata

根据提示我们可以用以下命令启动服务

pg_ctl -D /usr/local/pgsql/pgdata -l logfile start


#设置数据库密码

切换到postgres用户:

su postgres

启动psql:

psql

执行修改密码的sql语句:

ALTER USER postgres WITH PASSWORD 'postgres';


设置远程连接

#需要修改PostgreSQL的连接参数,允许远程连接。

1、修改/usr/local/pgsql/pgdata/postgresql.conf

将#listen_addresses = 'localhost'修改成:listen_addresses = '*'

将#port = 5432修改成:port = 5432

2、修改/usr/local/pgsql/pgdata/pg_hba.conf

添加下列行

host    all all   0.0.0.0/0   md5

postgresql.conf和pg_hba.conf文件是在做初始化数据库的时候自动生成的文件,如果不知道这两个配置文件在哪里,也可以使用以下命令查找文件位置。

find / -name postgresql.conf

find / -name pg_hba.conf

全局检索命令,使用find / -name *(*号表示文件全名)


数据库的启动,停止和重启

systemctl start postgresql

systemctl stop postgresql

systemctl restart postgresql

也可以用以下方法启动数据库。

su postgres

pg_ctl -D /usr/local/pgsql/pgdata -l logfile start

pg_ctl -D /usr/local/pgsql/pgdata -l logfile stop

pg_ctl -D /usr/local/pgsql/pgdata -l logfile restart


#设置开机自启动,并将postgresql添加系统服务

postgresql的自启动文件为postgresql/contrib/start-scripts编译目录下的linux文件

cp postgresql/contrib/start-scripts/linux /etc/rc.d/init.d/

将文件重命名为postgresql

mv /etc/rc.d/init.d/linux /etc/rc.d/init.d/postgresql

设置postgresql的安装目录和数据目录

# Installation prefix(数据库安装目录)

prefix=/usr/local/pgsql

# Data directory(数据库文件存储目录)

PGDATA="/usr/local/pgsql/pgdata"

加执行权限

chmod +x /etc/rc.d/init.d/postgresql

添加到服务

chkconfig --add postgresql



二、postgis3.0.5安装

1、安装libxml2-2.9.9

tar -xzvf libxml2-2.9.9.tar.gz

cd libxml2-2.9.9

./configure

make

make install


2、安装 geos-3.8.0

tar -xjf geos-3.8.0.tar.bz2

cd geos-3.8.0

./configure

make

make install


3、安装 proj-6.2.1

./configure

#提示sqlite3版本太低

#因为测试服务器有网络环境,所以此处直接在线安装

yum install sqlite-devel

tar -xzvf proj-6.2.1.tar.gz

cd proj-6.2.1

./configure

make

make install


4、安装gdal-3.3.3

tar -xzvf gdal-3.3.3.tar.gz

cd gdal-3.3.3

./configure()

make

make install

提示缺少jasper,导致无法安装gdal


5、安装jasper

tar -xzvf jasper-1.900.1.uuid.tar.gz

cd jasper-1.900.1.uuid

./configure --enable-shared 

make

make install

我安装此依赖的时候都是默认安装,最开始没有加上生产动态链接库的参数,可以看到/usr/local/lib目录下没有生成动态链接文件,从而导致gdal无法成功被安装。

有兴趣的伙伴可以点这里,了解一下其原理。

简单来讲, linux中,静态库的命名规则通常为lib*.a        动态库的命名通常是*.so


5、安装ogr-fdw-1.0.6

tar -xzf pgsql-ogr-fdw-1.0.6.tar.gz

cd /home/pgsql-ogr-fdw-1.0.6

make clean

make && make install


6、安装SFCGAL (可选)

6.1.安装cmake

unzip CMake-3.21.1.zip

cd CMake-3.21.1

make

make install


6.2.安装sfcgal 依赖 boost,cgal2.6.3.

#安装boost

yum -y install boost-devel

#安装cgal

tar -zxvf cgal-releases-CGAL-4.13.tar.gz

cd cgal-releases-CGAL-4.13

mkdir build && cd build

cmake ..

make

make install

#6.3可能出现缺少GMP和MPFR的情况,导致cgal无法被安装

cd  /home/postgis/cgal-releases-CGAL-4.13/build

cmake ..

make

make install

安装GMP用以编译cgal

tar xvf gmp-6.2.1.tar

cd gmp-6.2.1

./configure

make && make install

安装MPFR用以编译cgal

tar -xzvf mpfr-4.1.0.tar.gz

cd mpfr-4.1.0

./configure

make && make install


7、安装fuzzystrmatch

cd /home/postgresql-11.5/contrib/fuzzystrmatch

make && make install


8、安装 postgis

./configure

make

make install


9、新建GIS扩展

CREATE EXTENSION postgis;

CREATE EXTENSION postgis_topology;

CREATE EXTENSION ogr_fdw;

CREATE EXTENSION postgis_raster;

CREATE EXTENSION postgis_sfcgal;

CREATE EXTENSION fuzzystrmatch;

CREATE EXTENSION address_standardizer;

CREATE EXTENSION address_standardizer_data_us;

CREATE EXTENSION postgis_tiger_geocoder;

注意:根据自身的业务需求,可选择性安装部分扩展。以上扩展不是必须全部安装的。


三、记录在创建GIS扩展时,可能会遇到的问题

问题1:找不到相关链接库文件1

#进入到缺少文件的目录下

cd /usr/local/pgsql/lib/

#查看缺少哪些依赖

ldd postgis-3.so

可以看到 libgeos_c.so.1和libproj.so.12是not found。

[root@linkgis lib]# find / -name libproj.so.12

/usr/local/lib/libproj.so.12

[root@linkgis lib]# find / -name libgeos_c.so.1

/usr/local/lib/libgeos_c.so.1

[root@linkgis lib]# cp /usr/local/lib/libproj.so.12 /usr/local/pgsql/lib/

[root@linkgis lib]# cp /usr/local/lib/libgeos_c.so.1 /usr/local/pgsql/lib/


问题 2: PostGIS二进制文件是使用与安装的版本不兼容的GEOS版本构建的,版本冲突导致无法创建扩展。

ERROR: could not load library "/usr/local/pgsql/lib/postgis-3.so": /usr/local/pgsql/lib/postgis-3.so: undefined symbol: GEOSCoordSeq_getXY

#根据提示进入相关目录

cd /usr/local/pgsql/lib/

#通过ldd命令,查看数据库正在使用哪个libgeos_c.so.1文件

ldd postgis-3.so

因为上面已经提示了geos的版本不兼容,所以找到服务器上已存在的libgeos_c.so.1文件,并删除所有的libgeos_c.so.1(这个文件是编译安装geos时自动生成的,无需担心无法恢复)。

查找服务器上是否还存在libgeos_c.so.1文件,如果还存在该文件,继续删除,直至找不到该文件为止。然后再用ldd postgis-3.so命令查看postgis引用文件已为not found。至此,已经完全删除了与postgis版本不兼容的文件。

ldd postgis-3.so

注:如果用我目录里面指定的版本不会出现这种问题。

./configure

make

make install

#使用命令查找安装geos后生成的libgeos_c.so.1文件,并将新生成的文件拷贝到相应目录下

find / -name libgeos_c.so.1

cp /usr/local/lib/libgeos_c.so.1 /usr/local/pgsql/lib/






今天安装aarch64架构服务器又遇到了一个新的坑

现象:创建postgis扩展的时候,一直提示缺这个文件,但是我安装postgis的时候提示读到这个版本了。并且我也把缺失的文件拷贝到了我对应的目录下。但是问题一直没得到解决。

最后求助华为工程师,最可以看一下华为工程师的解决思路。

帮我从新参照链接安装了geos和gdal,并且设置了环境变量,还给了相关目录更高的权限。解决了我的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容