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数据库及空间插件安装完成。