一、介绍
PostgreSQL 是一个功能强大的开源关系型数据库系统,基于 C 语言实现,采用 PostgreSQL 许可证,这是一种自由软件许可证,允许用户自由使用、修改和分发源代码,同时支持商业用途而不设强制限制。这使得 PostgreSQL 成为广受欢迎的开源数据库解决方案。PostgreSQL 支持跨版本升级,过程通常平稳。尽管国内市场 MySQL 仍占主导地位,但许多国产数据库(如华为的 GaussDB 和腾讯的 Tbase)及云服务提供商都广泛支持 PostgreSQL。此外,pgloader
等数据迁移工具可以帮助用户高效地将数据从 MySQL、SQL Server 和 Oracle 迁移到 PostgreSQL。
官方资源
- PostgreSQL 官方网站:PostgreSQL
- 国内社区:PostgreSQL 国内社区
二、安装
操作系统:centos7,数据库版本:15.8
2.1 下载并执行安装
打开官方地址 PostgreSQL: Linux downloads (Red Hat family):根据服务器版本选择:
按照上图Copy, paste and run the relevant parts of the setup script:
里的命令执行:下载PpstgreSQL的rpm包
# 下载PostgreSQL
sudo yum install -y https://download.sql>postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装PostgreSQL
sudo yum install -y sql>postgresql15-server
# 初始化数据库
sudo /usr/pgsql-15/bin/sql>postgresql-15-setup initdb
# 设置开机启动PostgreSQL
sudo systemctl enable sql>postgresql-15
# 启动PostgreSQL
sudo systemctl start sql>postgresql-15
如果报错:
错误:软件包:sql>postgresql15-15.8-1PGDG.rhel7.x86_64 (pgdg15)需要:libzstd >= 1.4.0
错误:软件包:sql>postgresql15-15.8-1PGDG.rhel7.x86_64 (pgdg15)需要:libzstd.so.1()(64bit)
错误:软件包:sql>postgresql15-server-15.8-1PGDG.rhel7.x86_64 (pgdg15)需要:libzstd.so.1()(64bit)
解决方案:
wget https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/l/libzstd-1.5.5-1.el7.x86_64.rpm
wget https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/l/llvm5.0-5.0.1-7.el7.x86_64.rpm
wget https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/l/llvm5.0-devel-5.0.1-7.el7.x86_64.rpm
wget https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/l/llvm5.0-libs-5.0.1-7.el7.x86_64.rpm
执行:
yum install -y ./libzstd-1.5.5-1.el7.x86_64.rpm
yum install -y centos-release-scl-rh llvm5*
2.2 登录验证
PostgreSQ默认创建一个无密码用户:postgres
sql"># 以超级用户身份登录L数据库
sudo -u postgres psql
# 查看有哪些库
\l
# 退出PostgreSQL
\q
# 修改密码,如果需要数据库连接工具连接,必须设置密码
ALTER USER postgres WITH PASSWORD '新密码';
三、配置
配置目录: /var/lib/pgsql/15/data
,配置的核心文件都属于postgres用户,修改时需要切换为postgres用户
主要操作sql>postgresql.conf和pg_hba.conf
3.1 远程连接配置
sql>postgresqlconf_98">配置sql>postgresql.conf
sql>postgresql.conf是PostgreSQL的主要配置文件,它包含了许多数据库服务器的全局设置选项。通过修改这个文件,您可以配置数据库服务器的各种参数,如监听地址、端口号、最大连接数、日志记录等。这个文件的修改通常需要重启数据库服务器才能生效。
修改/var/lib/pgsql/12/data/sql>postgresql.conf配置文件,默认情况下,PostgreSQL只允许localhost连接,直接配置为*即可
配置pg_hba.conf
pg_hba.conf是PostgreSQL的身份验证配置文件,它定义了哪些客户端可以连接到数据库服务器以及如何进行身份验证。通过修改这个文件,您可以控制访问数据库的权限,配置不同用户的身份验证方法,以及定义访问控制规则。修改pg_hba.conf文件后,通常需要重新加载配置或重启数据库服务器才能使更改生效。
修改/var/lib/pgsql/12/data/pg_hba.conf配置文件,支持远程用户访问
模板参数说明:
- type:local代表本地连接,host代表可以指定连接的ADDRESS
- database:数据库名,如果写all,代表所有库都可以连接
- user:连接的用户,可以写all,代表所有用户
- address:代表那些IP地址可以连接
- method:加密方式,一般直接md5
重启PostgreSQL
修改完上面的两个配置文件,都需要重启下:
systemctl restart sql>postgresql-15
navicat连接测试
3.2 数据库的日志配置
# 代表日志是开启的。
logging_collector = on
# 日志存放的路径,默认放到当前目录下的log里
log_directory = 'log'
# 日志的文件名,默认是sql>postgresql为前缀,%a表示把星期作为后缀
log_filename = 'sql>postgresql-%a.log'
# 日志文件会被覆盖
log_truncate_on_rotation = on
# 一天一个日志文件
log_rotation_age = 1d
# 日志文件,没有大小限制
log_rotation_size = 0
3.3 设置wal_level级别(选用)
此参数是为了Flink 能够捕捉数据更改并将其同步到 MySQL
wal_level
参数控制 PostgreSQL 生成的 WAL 信息的详细程度。设置为 logical
时,PostgreSQL 会记录足够的信息来支持逻辑复制,否则PostgreSQL 无法提供所需的变更数据流
修改sql>postgresql.conf,增加wal_level = logical
,然后执行systemctl restart sql>postgresql-15
重启PostgreSQL
wal_level
的设置会影响 PostgreSQL 的日志记录级别,具体分为三种:
- minimal:记录最基本的 WAL 信息,仅用于崩溃恢复,无法支持逻辑复制
- replica:记录额外的 WAL 信息,支持物理复制,但仍不足以进行逻辑复制
- logical:记录全部 WAL 信息,包括逻辑复制所需的数据变更,适用于 Flink 和其他逻辑复制工具
3.4 创建用户并授权
-
创建用户:
sql">CREATE USER newuser WITH PASSWORD 'password';
-
授予数据库全部权限:
sql">GRANT ALL PRIVILEGES ON DATABASE mydatabase TO newuser;
-
授予表、序列和函数权限(在连接到
mydatabase
后):sql">\c mydatabase GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO newuser; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO newuser; GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO newuser;
-
确保权限应用到新对象:
sql">ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO newuser; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO newuser; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO newuser;