1、前言
前面2篇文章本来想源码安装postgresql和postgis;结果遇到了很多问题,并且新创环境不让用postgresql。后来发现X86CPU可以直接安装打包好的rpm包,决定更换安装路线,采用polardb+postgis的路线;
几个常用的命令:
1、ll 查看目录及其所属用户和拥有的权限
2chmod 750 /home/postgresql_data 赋权限
2、polardb安装
我用的polardb安装包名:PolarDB-11.9.20.0-20240504113509.el7.x86_64.rpm
1、创建postgres用户用户组
useradd postgres
2、修改postgres用户密码方法一:
echo "密码" | passwd --stdin postgres
3、装polardb包
yum install PolarDB-11.9.20.0-20240504113509.el7.x86_64.rpm
Yum install openssl-libs
初始化数据库(在用户postgres下执行 ,创建目录/home/postgres/db1, 定位到/u01/polardb_pg/bin;
运行命令前确定/home/postgres/db1目录所有者设置为postgres用户,并给700权限,命令如下:
sudo chown -R postgres:postgres /home/postgres/db1
chmod 700 /home/postgres/db1)
./initdb -D /home/postgres/db1 -E UTF8 --locale=C --data-checksums -U postgres
如果提示缺少lib库文件 找到文件复制到/usr/lib64/目录中,再执行上述命令。
如果执行命令出现下列问题:
/initdb: relocation error: /u01/polardb_pg/bin/../lib/../lib/libgssapi_krb5.so.2: symbol krb5_ser_context_init version krb5_3_MIT not defined in file libkrb5.so.3 with link time reference
则运行命令:ldd /u01/polardb_pg/bin/initdb | grep krb5
看库指向的是不是系统中的,如果指向的

如上图第一行,则将usr/lib64中对应文件复制到他写的目录中
4、启动polardb(在用户postgres下执行 先定位到/u01/polardb_pg/bin)
./pg_ctl -D /home/postgres/db1 start如果执行上述命令会有权限问题,先进入/u01目录,执行
chown -R postgres:postgres polardb_pg 将整个文件夹及其子文件赋权限给postgres用户5、查看数据库版本
进入命令行(先定位到/u01/polardb_pg/bin 在用户postgres下执行)
./psqlpostgres=# select version();
version
PostgreSQL 11.9 (POLARDB 11.9)审批
或者
./psql --version
psql (PostgreSQL) 11.9
6、更改数据库postgres密码:
ALTER USER postgres WITH PASSWORD 'PolarDb-pg11.9’;
3、postgis安装
postgis安装遇到很多问题,大部分是缺少库导致;我用的库参考:Linux 上 postgresql 14 安装 postgis (包含所有依赖包)_libboost-serialization-mt.so rpm-CSDN博客
和这个差不多,当时同事给的是有67个rpm包,但是装完少几个库,我又自己加了3个,不然报下图错误,(libboost_system-mt.so.1.53.0、 libboost_thread-mt.so.1.53.0、libboost_date_time-mt.so.1.53.0);少的库我阿里云镜像站中下载到了:centos-7-os-x86_64-Packages安装包下载_开源镜像站-阿里云 (aliyun.com)



1、把70个rpm包拷贝到麒麟系统中,cd到其目录中
rpm -ivh *.rpm --nodeps --force
./psql
\c 数据库 切换数据库
create extension postgis;执行添加空间扩展命令。
2、添加2个软链接
ln -s /usr/pgsql-11/share/extension/postgis* /u01/polardb_pg/share/extension/
ln -s /usr/pgsql-11/lib/postgis* /u01/polardb_pg/lib/
3、当时遇到了很多问题,总体解决方案是少库的找到对应的库放到/usr/lib64目录中,最后遇到一个问题如下图:

方法我进行了如下操作(不知道哪个步骤有用):
Yum重新装下curl、openssl、openssh然后重启polardb:
./pg_ctl -D /home/postgres/db1 -l /home/postgres/pg.log restart再执行:create extension postgis;
这次又遇到我安装了上述包还是报老错误:解决思路如下:
strace -f -e openat,stat /u01/polardb_pg/bin/postgres -D /u01/polardb_pg/datakfq 2>&1 | grep libssl.so.1.1
通过strace跟踪 PostgreSQL 加载库的过程,确认实际使用的libssl,显示libssl.so.1.1来自非/usr/lib64/路径。
启动时直接携带LD_PRELOAD,确保环境变量生效:
LD_PRELOAD=/usr/lib64/libssl.so.1.1:/usr/lib64/libcrypto.so.1.1 ./pg_ctl -D /home/postgres/dbi -l /home/postgres/pg_log start
再执行就成功了。
4、执行sql文件,导入表
我把windows中的pg表导出sql,navicat中右键数据库的public-->转储SQL文件 -->数据和结构
然后在麒麟系统中,定位到/u01/polardb_pg/bin 切换postgres用户:
su postgres
./psql -U postgres -h 127.0.0.1 -d zs_building_new -f /path/to/yourfile.sql
4、数据库相关的操作
一些命令;
进入某个数据库:psql -d 数据库名称 -U 用户名
\c 库名 从一个数据库中转到另一个数据库中
\d 查看数据库列表:
\dt 查看表
di 查看索引
\d 表名 查看某个表的状况:
\l 查看系统中现存的数据库
注意在执行sql的时候结尾要加分号;
select * from public.building;
5、扩展包缺失问题
今天在将postgis中的数据库还原到polardb中时候,遇到下列报错:
psql:/data/kfq/tdt_backup.sql:101: ERROR: extension "address_standardizer" does not exist
psql:/data/kfq/tdt_backup.sql:109: ERROR: could not open extension control file "/u01/polardb_pg/share/extension/address_standardizer_data_us.control": No such file or directory
psql:/data/kfq/tdt_backup.sql:118: ERROR: extension "address_standardizer_data_us" does not exist
这是安装的postgis没有address_standardizer和address_standardizer_data_us两个扩展库造。
查了一顿发现要再安装一个postgis30_11-utils.rpm。
于是在https://download.postgresql.org/pub/repos/yum/13/redhat/rhel-7-x86_64/找到postgis30_13-utils-3.0.5-1.rhel7.x86_64.rpm,以为我的postgis是3.0.5,polardb是11,没有11了用13也可以。拷贝到服务器上直接安装
rpm -ivh postgis30_13-utils-3.0.5-1.rhel7.x86_64.rpm
然后将/usr/pgsql-11/share/extension/中address_standardizer*相关的文件全部拷贝到/u01/polardb_pg/share.extension/目录中;/usr/pgsql-11/lib/中的address_standardizer-3.so拷贝到/u01/polardb_pg/lib目录中;
然后再数据库中执行
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us
完成了