Linux环境通过YUM仓库源码安装PostgreSQL 数据库

Linux环境安装PostgreSQL 数据库是我们运维常见的操作,今天我们全流程分享一下:

二、安装postgresql数据库

1、确定你的 Linux 发行版

复制代码
cat /etc/os-release

对应命令,提升麒麟服务器用 yum 命令

2、源码编译安装-安装编译依赖

在编译前,需要安装必要的开发工具和库。

复制代码
sudo yum install -y gcc make readline-devel zlib-devel openssl-devel libxml2-devel libxslt-devel perl-ExtUtils-Embed wget

3、开始下载并解压PostgreSQL 15源码

复制代码
wget https://ftp.postgresql.org/pub/source/v15.13/postgresql-15.13.tar.bz2
tar -jxvf postgresql-15.13.tar.bz2
cd postgresql-15.13

4、配置、编译并安装

配置时指定安装路径,并确保适配aarch64架构

复制代码
./configure --prefix=/usr/local/pgsql15 --host=aarch64-linux-gnu --with-openssl --with-libxml --with-libxslt
make -j4 # 利用多核加速编译,数字4可按CPU核心数调整
sudo make install

5、创建专用用户并初始化数据库

为数据库服务创建独立的系统用户和专属的数据目录

复制代码
# 创建用户和目录
sudo useradd -m postgres
sudo mkdir -p /var/lib/pgsql/15/data
sudo chown -R postgres:postgres /var/lib/pgsql

# 切换用户初始化数据库
sudo -u postgres /usr/local/pgsql15/bin/initdb -D /var/lib/pgsql/15/data

6、配置systemd服务管理

为了方便地启动、停止服务,建议创建systemd服务文件

复制代码
sudo vim /etc/systemd/system/postgresql-15.service

将以下内容粘贴到文件中,注意核对路径(/usr/local/pgsql15)是否与你上一步 configure 时指定的 --prefix 一致:

复制代码
[Unit]
Description=PostgreSQL 15 database server
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGDATA=/var/lib/pgsql/15/data
ExecStart=/usr/local/pgsql15/bin/pg_ctl start -D ${PGDATA} -s -o "-p 5432"
ExecStop=/usr/local/pgsql15/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/local/pgsql15/bin/pg_ctl reload -D ${PGDATA} -s
TimeoutSec=300

[Install]
WantedBy=multi-user.target

保存退出后,刷新systemd并启动服务

复制代码
sudo systemctl daemon-reload
sudo systemctl start postgresql-15
sudo systemctl enable postgresql-15 # 设置开机自启

7、安装完成后验证

复制代码
sudo systemctl status postgresql-15
/usr/local/pgsql15/bin/psql --version

8、修改密码

复制代码
sudo -u postgres /usr/local/pgsql15/bin/psql -c "ALTER USER postgres WITH PASSWORD 'YourSecurePassword';"

9、配置远程访问

编辑配置文件 /var/lib/pgsql/15/data/postgresql.conf,修改或添加:

复制代码
listen_addresses = '*'

编辑客户端认证文件 /var/lib/pgsql/15/data/pg_hba.conf,在末尾添加一行(注意此配置允许所有IP连接,生产环境应限制)

复制代码
host    all             all             0.0.0.0/0               md5

重启服务使配置生效:

复制代码
sudo systemctl restart postgresql-15

10、配置防火墙

复制代码
sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --reload

二、安装postgis空间插件

1、 尝试YUM安装

在终端中运行以下命令,检查是否有可用的PostGIS包。如果提示找不到包,请直接跳到源码编译方案。

复制代码
sudo yum search postgis15 # 或尝试更通用的 search postgis
sudo yum install -y postgis15_15 # 包名可能类似于此,具体取决于仓库

1、安装编译依赖

PostGIS依赖GEOS、PROJ、GDAL等空间库。在Kylin V10上,你可以尝试用yum安装它们。如果某些库版本过低,可能仍需源码编译。

复制代码
sudo yum install -y gcc gcc-c++ make
sudo yum install -y geos geos-devel proj proj-devel gdal gdal-devel
sudo yum install -y libxml2-devel json-c-devel pcre2-devel

2、下载PostGIS源码

访问 PostGIS官网GitHub仓库,下载与PostgreSQL 15兼容的稳定版本(如PostGIS 3.4)。建议下载到/usr/local/src

复制代码
sudo wget https://download.osgeo.org/postgis/source/postgis-3.4.4.tar.gz -P /usr/local/src/
sudo tar -zxvf /usr/local/src/postgis-3.4.4.tar.gz -C /usr/local/src/
cd /usr/local/src/postgis-3.4.4

3、配置、编译与安装

关键是通过 --with-pgconfig 指定你之前安装的PostgreSQL 15的pg_config工具路径。

复制代码
./configure --with-pgconfig=/usr/local/pgsql15/bin/pg_config
make -j4
sudo make install

如果遇到依赖库路径问题,可能需要通过 --with-geosconfig、--with-projdir 等参数额外指定。

所有文件(包括 postgis.control)将自动安装到PostgreSQL 15的目录(如 /usr/local/pgsql15/share/extension/)。

4、错误汇总

1)缺失GEOS

./configure --with-pgconfig=/usr/local/pgsql15/bin/pg_config 执行上面的命令时报错: checking for xmlInitParser in -lxml2... yes checking for geos-config... no configure: error: could not find geos-config within the current path. You may need to try re-running configure with a --with-geosconfig parameter.

安装

复制代码
# 搜索可用的GEOS包
sudo yum search geos
# 安装GEOS库及其开发包(包名可能类似 geos, geos-devel)
sudo yum install -y geos geos-devel

2)缺失PROJ

checking where the gettext function comes from... libc checking for PROJ... no checking proj_api.h usability... no checking proj_api.h presence... no checking for proj_api.h... no checking proj.h usability... no checking proj.h presence... no checking for proj.h... no configure: error: could not find proj.h or proj_api.h - you may need to specify the directory of a PROJ installation using --with-projdir

源码安装

复制代码
sudo yum install -y gcc gcc-c++ make cmake

# 进入源码目录,下载PROJ (以9.3.0为例,这是较新的稳定版)
cd /usr/local/src
sudo wget https://download.osgeo.org/proj/proj-9.3.0.tar.gz
sudo tar -zxvf proj-9.3.0.tar.gz
cd proj-9.3.0
# 编译安装到系统默认路径 (/usr/local)
./configure
make -j4
sudo make install

更新连接
sudo ldconfig

重新:参数说明:--with-projdir=/usr/local 指定了PROJ的安装前缀。如果PROJ安装在其他目录,请相应修改此路径。
cd /usr/local/src/postgis-3.4.4
./configure --with-pgconfig=/usr/local/pgsql15/bin/pg_config --with-projdir=/usr/local

注意:PostGIS 3.x 通常要求 PROJ 版本在 6.1 以上。

3)./configure 命令报错

pwd /usr/local/src/proj-9.3.0 [root@Desktop-9740 proj-9.3.0]# ./configure bash: ./configure

确保已安装 CMake:

复制代码
# 检查是否已安装
cmake --version
# 如果未安装,则安装它
sudo yum install -y cmake

#创建并进入一个独立的构建目录
mkdir build && cd build

#运行 CMake 生成构建配置:这步会检查你的系统环境并生成 Makefile。
cmake ..

#生成 Makefile 后,流程就和之前一样了。
# 编译,-j4 表示用4个CPU核心并行加速,数字可按你CPU核心数调整
make -j4
# 安装到系统
sudo make install

#更新动态库缓存
sudo ldconfig

#重新配置 PostGIS
cd /usr/local/src/postgis-3.4.4

#如果 PROJ 安装到默认的 /usr/local,配置命令如下
./configure --with-pgconfig=/usr/local/pgsql15/bin/pg_config --with-projdir=/usr/local

:4)还可能类似错误,解决方案同上

5、安装后配置与验证

可以通过navicat客户端或者在服务器上执行

复制代码
-- 连接到你的数据库,例如名为 gisdb
psql -U postgres -d gisdb
-- 在数据库内执行
CREATE EXTENSION postgis;
-- 可选,启用其他功能
CREATE EXTENSION postgis_raster;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION postgis_sfcgal;
SELECT postgis_full_version(); -- 验证安装,显示详细版本信息

三、创建非管理员用户

1、以管理员身份连接至PostgreSQL

使用你安装的psql客户端,以超级用户(通常是postgres)身份登录。

复制代码
/usr/local/pgsql15/bin/psql -U postgres -h localhost -p 5432

如果设置了环境变量,直接运行 psql -U postgres 也可。

2、创建新用户并设置密码

复制代码
CREATE USER readonly_user WITH PASSWORD 'Password123!';
-- 可添加选项: NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;

这创建了一个只有登录权限的普通用户。

3、授予新用户连接至目标数据库的权限

虽然创建了用户,但默认无权连接任何数据库。你需要显式授权:

复制代码
GRANT CONNECT ON DATABASE test_db TO readonly_user;

4、切换到目标数据库并设置模式权限

连接到test_db数据库,为新用户设置具体的模式(schema)权限

复制代码
-- 切换到 test_db 数据库
\c test_db

-- 收回 public 模式上的所有默认权限(安全最佳实践)
REVOKE ALL ON SCHEMA public FROM PUBLIC;

-- 授予新用户对 public 模式的使用权
GRANT USAGE ON SCHEMA public TO readonly_user;

5、授予对新用户查询(SELECT)权限

现在,授予新用户对public模式中所有现有表和未来表的查询权限:

复制代码
-- 授予对现有所有表的 SELECT 权限
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;

-- 确保将来新建的表也能自动获得 SELECT 权限(关键步骤)
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;

注意:如果你需要查询其他模式(如postgis)下的表,也需要对该模式执行GRANT USAGE和GRANT SELECT操作。

到此 pg数据库及空间插件安装完成。

相关推荐
IT布道5 小时前
MongoDB性能调优之--关闭THP
数据库·mongodb
程序猿_极客5 小时前
MySQL 从入门到实战:DQL 查询语言详解(附案例 + 练习)
数据库·mysql·mysql入门
无奈笑天下7 小时前
银河麒麟桌面OS使用分区编辑器将/backup分区删除并扩容至根分区参考教程
linux·数据库·经验分享·编辑器
tzhou6445213 小时前
MySQL备份与恢复
数据库·mysql·adb
一过菜只因13 小时前
MySql Jdbc
android·数据库·mysql
思成不止于此14 小时前
MySQL 查询实战(三):排序与综合练习
数据库·笔记·学习·mysql
茅坑的小石头14 小时前
数据库表设计,概念模型、逻辑模型、物理模型的区别,目标、主要内容、所处阶段、面向人群,数据库无关性
数据库
tebukaopu14814 小时前
mysql数据备份还原
数据库·mysql
zyxqyy&∞14 小时前
mysql代码小练-2
数据库·mysql