前面分享了“信创环境GIS-初识信创环境"
以下是我在信创环境下安装 postgres+postgis的过程记录,可供参考。
系统为银河麒麟桌面操作系统 V10,通过“cat /proc/verion”命令查看,可以得到该系统linux内核版本信息为“Linux version 5.4.18-52-generic”,gcc版本信息为“Ubuntu 9.3.0-10kylin2”。
更新软件包列表和已安装软件的版本
sudo apt updatesudo apt upgrade
安装postgresql(初次安装后,默认生成一个名为 postgres 的数据库和一个名为 postgres 的数据库用户。这里需要注意的是,同时还生成了一个名为 postgres 的 Linux 系统用户。我们以后在操作 PostgreSQL 的时候都应该在这个新创建的 postgres 用户中进行。)
sudo apt install postgresql -y
安装成功输出
成功。您现在可以用下面的命令开启数据库服务器:pg_ctlcluster 12 main startVer Cluster Port Status Owner Data directory Log file12 main 5432 down postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
给生成的postgres用户设置密码,方便后续操作
passwd postgres
启动PostgreSQL监视器,验证是否安装成功
sudo -u postgres psql
输出以下信息证明安装成功
psql (12.9 (Ubuntu 12.9-0kylin0.20.04.1k1))输入 "help" 来获取帮助信息.postgres=#
由于默认数据存储目录挂载的硬盘磁盘空间比较小,所以将数据目录修改为挂载磁盘空间较大的目录下。
新建迁移目标文件夹
mkdir /media/data/pgdata
修改权限
sudo chown -R postgres:postgres /media/data/pgdatasudo chmod 755 -R /media/data/pgdata
停止服务
systemctl stop postgresql
查看服务状态
systemctl status postgresql
复制现有数据文件(-a将文件和文件夹权限保留在新位置,并且–v将显示详细输出)
sudo rsync -av /var/lib/postgresql/12 /media/data/pgdata
通过重命名目录备份原数据,直到确认成功后可删除
sudo mv /var/lib/postgresql /var/lib/postgresql_bak
更改Postgresql配置文件上的数据文件夹位置、修改数据库监听
sudo vi /etc/postgresql/12/main/postgresql.conf
在postgresql.conf文件下修改数据文件夹位置
找到:data_directory = '/var/lib/postgresql/12/main'
改为:data_directory = '/media/data/pgdata/12/main'
修改数据库监听
找到:#listen_addresses = 'localhost'
改为:listen_addresses = '*'
如需修改端口
找到:port = 5432
改为:port = 5431(目标端口)
修改数据库安全策略
sudo vi /etc/postgresql/12/main/pg_hba.conf
在最下方追加以下内容:
host all all 0.0.0.0/0 md5
启动服务
systemctl start postgresql
启动PostgreSQL监视器,验证目录迁移后是否可成功启动
sudo -u postgres psql
输出以下信息证明操作成功
psql (12.9 (Ubuntu 12.9-0kylin0.20.04.1k1))输入 "help" 来获取帮助信息.postgres=#
验证服务器上的当前数据位置设置
postgres=# SHOW data_directory;
输出目录信息
data_directory ----------------------------/media/data/pgdata/12/main(1 行记录)postgres=#
为数据库用户postgres设置密码
postgres=# password postgres;
允许5432端口通过防火墙,具体需要确认用的什么防火墙规则,我这里ufw未启用,用的是iptables
sudo iptables -I INPUT -p tcp --dport 5432 -j ACCEPTsudo iptables-save
确认安装成功删除 var/lib/postgresql_bak/
sudo rm -r /var/lib/postgresql_bak/
安装PostGIS
sudo apt install postgis
查看是否安装并匹配成功
sudo -u postgres psql -c "SELECT * FROM pg_available_extensions WHERE name = 'postgis';"
启动PostgreSQL监视器,进入默认数据库 postgres
sudo -u postgres psql
创建数据库postgis_test
CREATE DATABASE postgis_test;
切换到新创建数据库 postgis_test
c postgis_test
安装PostGIS扩展
CREATE EXTENSION IF NOT EXISTS postgis;
查看是否安装成功
SELECT postgis_full_version();
启动服务
systemctl start postgresql
停止服务
systemctl stop postgresql
重启服务
systemctl restart postgresql
查看服务状态
systemctl status postgresql
卸载postgresql、postgis
sudo systemctl stop postgresqlsudo apt-get --purge remove postgresql* sudo apt-get --purge remove postgis*
强制卸载
sudo dpkg --remove --force-remove-reinstreq postgresql-12
删除PostgreSQL配置文件或数据目录
sudo rm -r /etc/postgresql/ sudo rm -r /var/lib/postgresql/sudo rm -r /var/log/postgresql/
查找所有目录下包含“postgres”的文件夹
sudo find / -type d -name '*postgres*' 2>/dev/null
删除postgres用户和组
sudo userdel -r postgres sudo groupdel postgres
执行 sudo -u postgres psql 报错:
psql: 错误: 无法联接到服务器: 没有那个文件或目录 服务器是否在本地运行并且在 Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432"上准备接受联接?
一般为服务未正常启动,查看日志以确定具体报错内容
tail /var/log/postgresql/postgresql-12-main.log
我的报错:
2024-03-19 23:36:11.623 CST [12142] 致命错误: 私钥文件"/etc/ssl/private/ssl-cert-snakeoil.key"具有由所在组或全局范围访问的权限2024-03-19 23:36:11.623 CST [12142] 详细信息: 如果文件被数据库用户所拥有,它必须具有权限 u=rw (0600) 或者更低;如果被 root 所拥有,它必顼具有权限 u=rw,g=r (0640) 或者更低。2024-03-19 23:36:11.623 CST [12142] 日志: 数据库系统已关闭pg_ctl: 无法启动服务器进程
解决方法 设置权限
sudo chown postgres:postgres /etc/ssl/private/ssl-cert-snakeoil.keysudo chmod 600 /etc/ssl/private/ssl-cert-snakeoil.key
重启数据库
systemctl restart postgresql
更多信息公众号 GISERSAY