doc: https://www.postgresql.org/download/linux/redhat/
通过
# CentOS 8
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf -qy module disable postgresql
sudo dnf install -y postgresql17-server postgresql17-contrib
sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
sudo systemctl enable postgresql-17
sudo systemctl start postgresql-17
sudo -u postgres psql
\password postgres
# 输入并确认新密码
\q
sudo vi /var/lib/pgsql/17/data/postgresql.conf
# listen_addresses = '*'
sudo vi /var/lib/pgsql/17/data/pg_hba.conf
# host all all 0.0.0.0/0 md5
sudo systemctl restart postgresql-17
# 如果启用了防火墙(firewalld)
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload
# 验证安装
psql -U postgres -h localhost
# \l -- 看有哪些库
# \du -- 看有哪些角色/账号
# \z -- 在当前库看权限
# PostGIS packages are often in the EPEL repo. Install and enable it
sudo yum install -y epel-release
sudo yum search postgis
sudo yum install -y postgis36_17
# 注意:CentOS 8 的模块化机制会默认启用旧版 PostgreSQL 模块,若不手动禁用,会导致无法安装或使用官方新版 PostgreSQL。
# 建议先禁用系统自带 PostgreSQL 模块:
sudo dnf -y module disable postgresql
创建数据库和用户
-- 1. 建库
CREATE DATABASE appdb;
-- 2. 建账号(同时建角色)
CREATE USER manageuser WITH PASSWORD 'StrongP@ssw0rd!';
CREATE USER appuser WITH PASSWORD 'StrongP@ssw0rd!';
-- 3. 赋库级所有权限
GRANT ALL PRIVILEGES ON DATABASE appdb TO manageuser;
\c appdb
GRANT CONNECT ON DATABASE appdb TO appuser;
GRANT USAGE ON SCHEMA public TO appuser;
GRANT CREATE ON SCHEMA public TO appuser; -- 允许变更schema
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO appuser;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO appuser; -- 未来新建表也继承