PostgreSQL是一个开源的关系型数据库管理系统(RDBMS),它有多个版本和发布系列。
以下是一些常见的 PostgreSQL 版本:
- PostgreSQL 9.x 系列:这是较旧的稳定版本系列,包括9.0、9.1、9.2、9.3、9.4、9.5、9.6等版本。
- PostgreSQL 10.x 系列:这是较新的稳定版本系列,包括10.0、10.1、10.2、10.3、10.4等版本。
- PostgreSQL 11.x 系列:这是较新的稳定版本系列,包括11.0、11.1、11.2、11.3等版本。
- PostgreSQL 12.x 系列:这是较新的稳定版本系列,包括12.0、12.1、12.2等版本。
- PostgreSQL 13.x 系列:这是最新的稳定版本系列,包括13.0、13.1、13.2等版本。
此外,还有一些 PostgreSQL 的开发版本和测试版本,例如Alpha版本、Beta版本等,用于测试和开发新功能。
在CentOS 7上一键安装PostgreSQL 12.3,并从国内镜像源进行下载:
#!/bin/bash
# 设置国内镜像源
echo "设置国内镜像源..."
echo "exclude=postgresql*" >> /etc/yum.repos.d/CentOS-Base.repo
echo "[pgdg12]" > /etc/yum.repos.d/pgdg.repo
echo "name=PostgreSQL 12 for RHEL/CentOS 7 - x86_64" >> /etc/yum.repos.d/pgdg.repo
echo "baseurl=https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/yum/12/redhat/rhel-7-x86_64" >> /etc/yum.repos.d/pgdg.repo
echo "enabled=1" >> /etc/yum.repos.d/pgdg.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/pgdg.repo
# 安装 PostgreSQL 12.3
echo "安装 PostgreSQL 12.3..."
yum install -y postgresql12-server
# 初始化数据库
echo "初始化数据库..."
/usr/pgsql-12/bin/postgresql-12-setup initdb
# 启动 PostgreSQL
echo "启动 PostgreSQL 12.3..."
systemctl start postgresql-12
# 设置开机自启动
echo "设置开机自启动..."
systemctl enable postgresql-12
echo "PostgreSQL 12.3 安装完成!"
安装日志
[root@VM-4-9-centos ~]# chmod +x install_postgres.sh
[root@VM-4-9-centos ~]#
[root@VM-4-9-centos ~]#
[root@VM-4-9-centos ~]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Epel.repo docker-ce.repo docker.repo rancher-k3s-common.repo
[root@VM-4-9-centos ~]# sh install_postgres.sh
设置国内镜像源...
安装 PostgreSQL 12.3...
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
docker | 3.5 kB 00:00:00
docker-ce-stable | 3.5 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
os | 3.6 kB 00:00:00
pgdg12 | 3.6 kB 00:00:00
rancher-k3s-common-stable | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/9): epel/7/x86_64/group_gz | 99 kB 00:00:00
(2/9): epel/7/x86_64/updateinfo | 1.0 MB 00:00:00
(3/9): docker/primary_db | 111 kB 00:00:00
(4/9): pgdg12/group_gz | 245 B 00:00:00
(5/9): pgdg12/primary_db | 383 kB 00:00:00
(6/9): epel/7/x86_64/primary_db | 7.0 MB 00:00:00
(7/9): docker-ce-stable/7/x86_64/primary_db | 111 kB 00:00:00
(8/9): rancher-k3s-common-stable/primary_db | 4.4 kB 00:00:01
(9/9): updates/7/x86_64/primary_db | 22 MB 00:00:01
正在解决依赖关系
There are unfinished transactions remaining. You might consider running yum-complete-transaction, or "yum-complete-transaction --cleanup-only" and "yum history redo last", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help).
--> 正在检查事务
---> 软件包 postgresql12-server.x86_64.0.12.15-1PGDG.rhel7 将被 安装
--> 正在处理依赖关系 postgresql12-libs(x86-64) = 12.15-1PGDG.rhel7,它被软件包 postgresql12-server-12.15-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 postgresql12(x86-64) = 12.15-1PGDG.rhel7,它被软件包 postgresql12-server-12.15-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 libpq.so.5()(64bit),它被软件包 postgresql12-server-12.15-1PGDG.rhel7.x86_64 需要
--> 正在检查事务
---> 软件包 postgresql12.x86_64.0.12.15-1PGDG.rhel7 将被 安装
---> 软件包 postgresql12-libs.x86_64.0.12.15-1PGDG.rhel7 将被 安装
--> 解决依赖关系完成
依赖关系解决
================================================================================================================================================================================================
Package 架构 版本 源 大小
================================================================================================================================================================================================
正在安装:
postgresql12-server x86_64 12.15-1PGDG.rhel7 pgdg12 5.0 M
为依赖而安装:
postgresql12 x86_64 12.15-1PGDG.rhel7 pgdg12 1.6 M
postgresql12-libs x86_64 12.15-1PGDG.rhel7 pgdg12 377 k
事务概要
================================================================================================================================================================================================
安装 1 软件包 (+2 依赖软件包)
总下载量:7.0 M
安装大小:30 M
Downloading packages:
(1/3): postgresql12-libs-12.15-1PGDG.rhel7.x86_64.rpm | 377 kB 00:00:00
(2/3): postgresql12-12.15-1PGDG.rhel7.x86_64.rpm | 1.6 MB 00:00:00
(3/3): postgresql12-server-12.15-1PGDG.rhel7.x86_64.rpm | 5.0 MB 00:00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计 10 MB/s | 7.0 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : postgresql12-libs-12.15-1PGDG.rhel7.x86_64 1/3
正在安装 : postgresql12-12.15-1PGDG.rhel7.x86_64 2/3
正在安装 : postgresql12-server-12.15-1PGDG.rhel7.x86_64 3/3
验证中 : postgresql12-12.15-1PGDG.rhel7.x86_64 1/3
验证中 : postgresql12-server-12.15-1PGDG.rhel7.x86_64 2/3
验证中 : postgresql12-libs-12.15-1PGDG.rhel7.x86_64 3/3
已安装:
postgresql12-server.x86_64 0:12.15-1PGDG.rhel7
作为依赖被安装:
postgresql12.x86_64 0:12.15-1PGDG.rhel7 postgresql12-libs.x86_64 0:12.15-1PGDG.rhel7
完毕!
初始化数据库...
Initializing database ... OK
启动 PostgreSQL 12.3...
设置开机自启动...
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
PostgreSQL 12.3 安装完成!
[root@VM-4-9-centos ~]#
为postgresql设置密码
-
打开终端或命令提示符窗口,并以超级用户身份登录到 PostgreSQL 数据库服务器。可以使用以下命令登录:
sudo -u postgres psql
如果提示输入密码,请输入您当前操作系统用户的密码。
-
进入 PostgreSQL 数据库命令行提示符后,使用以下命令为特定的数据库用户设置密码。将
<username>
替换为您要设置密码的数据库用户名:ALTER USER
WITH PASSWORD 'your_password'; 例如,要为用户
myuser
设置密码为mypassword
,可以执行以下命令:ALTER USER myuser WITH PASSWORD 'mypassword';
-
设置密码后,可以使用以下命令退出 PostgreSQL 数据库命令行提示符:
\q
安装后文件位置
通过上述脚本安装的 PostgreSQL,在 CentOS 7 上的默认安装位置如下:
- 安装文件:
- PostgreSQL 二进制文件和可执行文件位于
/usr/pgsql-12/bin
目录下。 - PostgreSQL 库文件位于
/usr/pgsql-12/lib
目录下。 - PostgreSQL 插件文件位于
/usr/pgsql-12/share/extension
目录下。
- PostgreSQL 二进制文件和可执行文件位于
- 配置文件:
- 主要的 PostgreSQL 配置文件
postgresql.conf
位于/var/lib/pgsql/12/data
目录下。 pg_hba.conf
文件,用于配置客户端身份验证规则,也位于/var/lib/pgsql/12/data
目录下。
- 主要的 PostgreSQL 配置文件
请注意,/var/lib/pgsql/12/data
是默认的数据目录,其中包含数据库的数据文件和配置文件。您可以通过修改 postgresql.conf
文件来更改数据目录的位置。
[root@VM-4-9-centos ~]# tree -L 2 /usr/pgsql-12/
/usr/pgsql-12/
├── bin
│ ├── clusterdb
│ ├── createdb
│ ├── createuser
│ ├── dropdb
│ ├── dropuser
│ ├── initdb
│ ├── pg_archivecleanup
│ ├── pg_basebackup
│ ├── pgbench
│ ├── pg_checksums
│ ├── pg_config
│ ├── pg_controldata
│ ├── pg_ctl
│ ├── pg_dump
│ ├── pg_dumpall
│ ├── pg_isready
│ ├── pg_receivewal
│ ├── pg_resetwal
│ ├── pg_restore
│ ├── pg_rewind
│ ├── pg_test_fsync
│ ├── pg_test_timing
│ ├── pg_upgrade
│ ├── pg_waldump
│ ├── postgres
│ ├── postgresql-12-check-db-dir
│ ├── postgresql-12-setup
│ ├── postmaster -> postgres
│ ├── psql
│ ├── reindexdb
│ └── vacuumdb
├── lib
│ ├── ascii_and_mic.so
│ ├── bitcode
│ ├── cyrillic_and_mic.so
│ ├── dict_int.so
│ ├── dict_snowball.so
│ ├── dict_xsyn.so
│ ├── euc2004_sjis2004.so
│ ├── euc_cn_and_mic.so
│ ├── euc_jp_and_sjis.so
│ ├── euc_kr_and_mic.so
│ ├── euc_tw_and_big5.so
│ ├── latin2_and_win1250.so
│ ├── latin_and_mic.so
│ ├── libecpg_compat.so.3 -> libecpg_compat.so.3.12
│ ├── libecpg_compat.so.3.12
│ ├── libecpg.so -> libecpg.so.6.12
│ ├── libecpg.so.6 -> libecpg.so.6.12
│ ├── libecpg.so.6.12
│ ├── libpgfeutils.a
│ ├── libpgtypes.so.3 -> libpgtypes.so.3.12
│ ├── libpgtypes.so.3.12
│ ├── libpq.so.5 -> libpq.so.5.12
│ ├── libpq.so.5.12
│ ├── libpqwalreceiver.so
│ ├── pgoutput.so
│ ├── plpgsql.so
│ ├── utf8_and_ascii.so
│ ├── utf8_and_big5.so
│ ├── utf8_and_cyrillic.so
│ ├── utf8_and_euc2004.so
│ ├── utf8_and_euc_cn.so
│ ├── utf8_and_euc_jp.so
│ ├── utf8_and_euc_kr.so
│ ├── utf8_and_euc_tw.so
│ ├── utf8_and_gb18030.so
│ ├── utf8_and_gbk.so
│ ├── utf8_and_iso8859_1.so
│ ├── utf8_and_iso8859.so
│ ├── utf8_and_johab.so
│ ├── utf8_and_sjis2004.so
│ ├── utf8_and_sjis.so
│ ├── utf8_and_uhc.so
│ └── utf8_and_win.so
└── share
├── errcodes.txt
├── extension
├── information_schema.sql
├── locale
├── man
├── pg_hba.conf.sample
├── pg_ident.conf.sample
├── pg_service.conf.sample
├── postgres.bki
├── postgres.description
├── postgresql-12-libs.conf
├── postgresql.conf.sample
├── postgres.shdescription
├── psqlrc.sample
├── snowball_create.sql
├── sql_features.txt
├── system_views.sql
├── timezonesets
└── tsearch_data
以下是该目录结构的摘要:
bin
目录:包含 PostgreSQL 12 可执行文件,如initdb
、pg_dump
、pg_restore
、psql
等。lib
目录:包含 PostgreSQL 12 的库文件,如libecpg.so
、libpgtypes.so
、libpq.so
等。share
目录:包含 PostgreSQL 12 的共享文件,如extension
目录(包含扩展模块)、locale
目录(包含语言环境文件)、man
目录(包含手册页)、pg_hba.conf.sample
(身份验证规则示例文件)、postgresql.conf.sample
(配置文件示例)等。
安装 PostgreSQL 时,以下是一些主要文件和目录的功能和作用的详细解释:
bin
目录:initdb
:用于创建新的 PostgreSQL 数据库集群(数据目录)。pg_dump
:用于将数据库导出为 SQL 脚本或二进制备份文件。pg_restore
:用于将使用pg_dump
创建的备份文件恢复到数据库。psql
:PostgreSQL 的命令行客户端工具,用于与数据库进行交互、执行查询和管理数据库。- 其他命令:用于数据库集群管理、备份和恢复等。
lib
目录:libecpg.so
、libpgtypes.so
、libpq.so
:PostgreSQL 的库文件,提供了与客户端应用程序交互的接口。pgoutput.so
:用于逻辑复制的插件,允许将更改从一个 PostgreSQL 数据库传递到另一个。plpgsql.so
:用于支持 PL/pgSQL 语言的插件,PL/pgSQL 是 PostgreSQL 中的一种过程化编程语言。- 其他库文件:提供了其他特定功能和扩展的支持。
share
目录:extension
目录:包含 PostgreSQL 的扩展模块,可以通过加载这些模块来添加额外的功能和特性。locale
目录:包含用于国际化和本地化支持的语言环境文件,如翻译文件和排序规则。man
目录:包含 PostgreSQL 的手册页,可用于查看关于 PostgreSQL 的详细文档和帮助信息。pg_hba.conf.sample
:身份验证配置文件示例,用于定义客户端连接到数据库时的身份验证规则。postgresql.conf.sample
:配置文件示例,用于配置数据库服务器的各种参数和设置。
[root@VM-4-9-centos ~]# ls /var/lib/pgsql/12/
backups data initdb.log
[root@VM-4-9-centos ~]#
[root@VM-4-9-centos ~]#
[root@VM-4-9-centos ~]# ls /var/lib/pgsql/12/data
base global pg_commit_ts pg_hba.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_wal postgresql.auto.conf postmaster.opts
current_logfiles log pg_dynshmem pg_ident.conf pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION pg_xact postgresql.conf postmaster.pid
base
目录:该目录包含数据库的表空间。每个数据库都有一个子目录,其中存储了该数据库的表、索引和数据文件。global
目录:该目录存储了全局共享数据,包括系统表空间、数据库模板和其他全局对象。pg_commit_ts
目录:该目录包含与事务提交时间戳相关的信息,用于支持高级功能如并发控制和MVCC。pg_hba.conf
:这是 PostgreSQL 的身份验证配置文件,用于定义客户端连接到数据库时的身份验证规则。pg_logical
目录:如果您启用了逻辑复制功能,该目录将包含用于逻辑复制的相关文件。pg_notify
目录:该目录用于存储通过LISTEN
和NOTIFY
实现的数据库通知功能的相关信息。pg_replslot
目录:如果您启用了流复制功能,该目录将包含用于复制槽的相关文件。pg_serial
目录:如果您使用了SERIAL
数据类型,该目录将包含与序列相关的文件。pg_snapshots
目录:该目录用于存储并发事务的快照信息。pg_stat
目录:该目录包含统计信息,用于跟踪数据库服务器的活动和性能。pg_stat_tmp
目录:该目录用于存储临时统计信息。pg_subtrans
目录:该目录包含与子事务相关的信息,用于支持并发控制和MVCC。pg_tblspc
目录:该目录包含额外的表空间,如果您创建了其他表空间,其文件将存储在这个目录下。pg_twophase
目录:该目录包含两阶段提交事务的信息。pg_wal
目录:该目录存储事务日志(WAL)文件,用于支持数据库的持久性和恢复功能。postgresql.auto.conf
:这是一个自动生成的配置文件,记录了自动配置的设置和参数。postgresql.conf
:这是主要的 PostgreSQL 配置文件,用于手动配置数据库服务器的各种参数和设置。postmaster.opts
:这个文件保存了启动 PostgreSQL 数据库服务器时使用的命令行选项。PG_VERSION
:该文件中包含了当前 PostgreSQL 数据目录的版本号。pg_xact
目录:该目录包含与事务相关的信息,用于支持并发控制和MVCC。postmaster.pid
:这个文件包含了 PostgreSQL 数据库服务器的进程 ID。
这些文件和目录是 PostgreSQL 数据库的重要组成部分,它们存储了数据库的数据、配置和元数据信息,为数据库的运行和管理提供了必要的支持。
配置文件 postgresql.conf 详解
postgresql.conf
是 PostgreSQL 数据库的主要配置文件,它用于配置数据库服务器的各种参数和设置。以下是一些常见配置选项的详细解释:
- listen_addresses:指定 PostgreSQL 监听的 IP 地址或主机名。默认情况下,它设置为
localhost
,只允许本地连接。您可以将其设置为*
,以允许所有 IP 地址的连接,或指定特定的 IP 地址。 - port:指定 PostgreSQL 数据库服务器监听的端口号。默认端口是 5432。您可以根据需要更改该端口。
- max_connections:指定数据库服务器允许的最大并发连接数。默认值是 100。根据您的硬件资源和应用程序需求,您可以调整这个值。
- shared_buffers:指定数据库服务器用于缓存数据和索引的共享内存缓冲区大小。该值通常设置为系统内存的一小部分,以提高性能。默认值是 128MB。
- work_mem:指定每个数据库会话可以使用的内存量,用于排序和哈希操作等临时工作内存。默认值是 4MB。根据查询和工作负载的需求,您可以适当调整这个值。
- maintenance_work_mem:指定在执行维护操作(如 VACUUM、INDEX 创建等)时,允许的最大内存使用量。默认值是 64MB。根据数据库的大小和维护操作的复杂性,您可能需要调整这个值。
- effective_cache_size:指定 PostgreSQL 估计的系统缓存大小。该值用于查询优化器决策,以估计可用的磁盘缓存。默认值是 4GB。根据系统的实际内存和磁盘缓存容量,您可以调整这个值。
- log_destination:指定日志消息的输出目标。可以设置为
stderr
、csvlog
、syslog
或eventlog
。默认值是stderr
,即输出到标准错误流。 - logging_collector:指定是否启用日志收集器。如果设置为
on
,PostgreSQL 将使用独立的进程收集和记录日志消息。默认值是off
。 - log_directory:指定日志文件的存储目录。默认情况下,日志文件存储在 PostgreSQL 数据目录中的
pg_log
子目录下。 - log_filename:指定日志文件的名称模板。默认情况下,日志文件以
postgresql-%Y-%m-%d_%H%M%S.log
的格式命名。 - log_rotation_age:指定日志文件自动轮换的时间间隔。默认值是 1d,表示每天轮换一次日志文件。
- log_rotation_size:指定日志文件自动轮换的大小阈值。默认值是 10MB,表示当日志文件达到这个大小时,将进行轮换。
- autovacuum:指定是否启用自动化 VACUUM 和 ANALYZE 进程。默认值是
on
,表示启用自动化维护进程。 - max_wal_size:指定 WAL(Write-Ahead Log)日志文件的最大大小。默认值是 1GB。根据数据库的写入负载和恢复需求,您可以调整这个值。
这些只是 postgresql.conf
配置文件中的一些常见选项,还有其他许多选项可以根据您的特定需求进行配置。在修改配置文件之前,建议了解每个选项的含义和影响,并根据您的应用程序和硬件环境进行适当的调整。
评论区