1. PostgreSQL Mailing Lists 邮件订阅
网址:https://www.postgresql.org/list/
首先进入PostgreSQL的邮件订阅网站https://lists.postgresql.org/,点击“Mange Subscriptions”按钮,如果进入没有账号,点击“creat”关键字创建账号并关联到自己需要订阅的邮箱地址,然后登录账号,再次按照流程进入邮件订阅管理页面,选择自己需要的邮件进行订阅。
2. PostgreSQL 简单了解
2.1 架构基础
客户端/服务器模式。
服务器:管理数据库的文件,接收客户端连接并且根据客户端的指令对数据库文件进行操作。
客户端:用户操作使用的应用,多种多样,基本上由用户进行开发,向服务器发送操作指令。
2.2 PostgreSQL源码安装
2.2.1 安装centos-7
配置:1GB内存 1处理器/1核心数量 20GB硬盘
如果已经安装过PostgreSQL的其他版本,需要删除原有的PostgreSQL,操作流程如下:
# (1)查看原有PostgreSQL的状态
systemctl list-units | grep postgresql
service postgresql-<version> status
# (2)将原有的PostgreSQL服务停止
service postgresql-<version> stop
# (3)卸载所有的PostgreSQL(注意输入“y”即可)
yum remove postgresql*
# (4)验证PosgreSQL是否被删除
rpm -qa | grep postgresql
2.2.2 下载源码
# 使用yum安装wget,再使用wget来下载postgres的V15.7的源码
yum -y install wget
wget https://ftp.postgresql.org/pub/source/v15.7/postgresql-15.7.tar.gz --no-check-certificate
2.2.3 解压源码
tar -zxvf postgresql-15.7.tar.gz
cd postgresql-15.7
2.2.4 安装
总代码
./configure
make
su
make install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
2.2.4.1 配置
./configure
--prefix指定所有文件安装目录,不指定默认在/usr/local/pgsql中。如:./configure --prefix=/opt/pgsql/postgresql
在执行命令的过程中出现错误。
configure: error: readline library not found
------
configure: error: zlib library not found
表示这两个依赖未被发现,可以使用--without -readline
来解决,但是还是建议进行安装依赖,使用yum命令来进行安装。
依赖包说明如下:
序号 | 依赖包名称 | 说明 |
---|---|---|
1 | perl-ExtUtils-Embed | 这个包用于嵌入Perl代码到C程序中。在PostgreSQL中,它可能被用于某些与Perl相关的扩展或自定义脚本功能。 |
2 | readline-devel | 这是readline库的开发版本,提供了命令行编辑和历史记录的功能。对于PostgreSQL,它使得使用交互式命令行工具(如psql)更加方便。 |
3 | zlib-devel | 这是zlib压缩库的开发版本,用于数据压缩和解压缩。在PostgreSQL中,它用于优化数据存储和传输。 |
4 | pam-devel | 这是Pluggable Authentication Modules(PAM)的开发包,用于集成多种认证技术。在PostgreSQL中,PAM可以用于用户认证。 |
5 | libxml2-devel | 这是libxml2库的开发版本,它提供了XML的支持。在PostgreSQL中,它用于处理XML数据格式的功能。 |
6 | libxslt-devel | 这是libxslt库的开发版本,用于XSLT转换。在PostgreSQL中,可能用于转换XML数据。 |
7 | openldap-devel | 这是OpenLDAP的开发包,用于LDAP协议的支持。在PostgreSQL中,它可以用于集成LDAP-based的用户认证。 |
8 | python-devel | 这是Python语言的开发包,可能用于支持Python编写的数据库脚本或扩展。 |
9 | gcc-c++ | 这是GNU C++编译器,用于编译C++代码。它可能用于编译PostgreSQL中的某些C++编写的部分或扩展。 |
10 | openssl-devel | 这是OpenSSL库的开发版本,提供加密和SSL/TLS支持。在PostgreSQL中,它用于确保数据传输的安全性。 |
11 | cmake | 这是一个跨平台的安装(构建)系统,用于控制软件编译和测试的过程。在某些PostgreSQL的扩展或自定义安装中可能会用到。 |
yum install -y readline-devel
-------
yum install -y zlib-devel
安装完成之后再次执行./configure
命令。
表2-1 configure
选项表
选项 | 描述 |
---|---|
--prefix=prefix | 安装到prefix指向的目录;默认为 /usr/local/pgsql |
--bindir=dir | 安装应用程序到dir;默认为prefix/bin |
--with-docdir=dir | 安装文档到dir;默认为prefix/doc |
-with-pgport=port | 设置默认的服务器端网络链接勿复TCP端口号 |
--with-tcl | 为服务端提供Tcl存储过程支持 |
--with-perl | 为服务端提供Perl存储过程支持 |
--with-python | 为服务端提供Python存储过程支持 |
--enable-debug | 启用编译时的调试标志,生成包含调试信息的二进制文件,方便调试 |
--enable-cassert | 启用编译时的断言检查,有助于检测运行时错误 |
--enable-nls | 启用本机语言支持 (NLS),即以除英语以外的语言显示程序消息的能力。 |
--with-openssl | 使用OpenSSL库为PostgreSQL提供加密支持,包括SSL连接等功能 |
--with-libxml | 为PostgreSQL提供XML支持,包括XML解析和函数 |
--with-uuid=e2fs | 使用e2fsprogs的UUID库(或其他库,如ossp-uuid) |
--with-zlib | 使用zlib库进行数据压缩支持 |
--with-ldap | 添加LDAP身份验证支持 |
--with-ossp-uuid | 使用OSSP UUID库 |
--with-systemd | 配置PostgreSQL支持systemd服务管理器 |
--with-krb5 | 添加Kerberos身份验证支持 |
--with-geos | 为PostGIS地理信息系统扩展提供GEOS库支持 |
--with-bonjour | 添加Bonjour服务发现支持 |
--without-readline | 不使用Readline库支持交互式终端输入编辑功能 |
--with-includes=dir | 指定额外的头文件搜索路径 |
--with-libraries=dir | 指定额外的库文件搜索路径 |
--with-zstd | 使用 Zstandard 压缩支持进行构建。 |
--datadir=dir | 数据文件目录,默认为prefix/share/postgresql |
--sysconfdir=dir | 配置文件目录,默认为prefix/etc/postgresql |
--sharedir=dir | 共享文件目录,默认为prefix/share/postgresql |
--docdir=dir | 文档目录,不同于--with-docdir,用于HTML、man手册等文档 |
--enable-nls | 启用本地化支持,提供多语言翻译 |
--disable-rpath | 禁止在可执行文件中嵌入库路径 |
--enable-thread-safety | 启用线程安全构建(默认开启) |
--with-extra-version=version | 在PostgreSQL版本信息中添加附加版本字符串 |
--mandir=dir | 手册页目录。默认值为 * DATAROOTDIR*/man 。 |
--docdir=dir | 安装文档文件的根目录。默认值为 * DATAROOTDIR*/doc/postgresql 。 |
--htmldir=dir | HTML 格式文档的目录。默认值为 * DATAROOTDIR* 。 |
--without-icu | 在不使用 ICU 库支持的情况下构建,禁用 ICU 整理功能的使用 |
--without-readline | 防止使用 Readline 库(以及 libedit)。 |
--without-zlib | 防止使用 Zlib 库。 |
--disable-spinlocks | 即使 PostgreSQL 没有针对该平台的 CPU 自旋锁支持,也允许构建成功。 |
--disable-atomics | 禁用使用 CPU 原子操作。 |
--disable-thread-safety | 禁用客户端库的线程安全性。 |
这些选项可以根据实际需求配置PostgreSQL的功能和安装路径,但并非所有选项都在所有平台上都适用,具体的选项和支持情况需参照PostgreSQL官方文档或实际运行./configure --help
命令获取最新的和完整的配置选项列表。
2.2.4.2 编译
按官方文档要求,使用make命令时,其版本要在gmake v3.8以上,目前绝大多数Linux发行版本都满足要求,所以一般在Linux环境下不需要检测make版本,但如果是在其他非Linux的UNIX平台上,建议先检测make的版本,检测命令如下。
# 在其他UNIX平台上,可能存在非GNU的make,此时GNU的make的名称会是“gmake”。
osdba@osdba-laptop:~$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
在postgres的解压目录执行make
或者make all
命令,等待编译完成。
make / make all
2.2.4.3 安装
在postgres的解压目录执行make install
命令,等待安装完成。
make install
到此安装结束,在/usr/local/pgsql目录下可以查看安装的文件。
2.3 环境配置
2.3.1 创建postgres用户
对于新增的用户,建议是设置一个密码,并且可以适当的给予新用户root权限或者sudo权限。
# 新增用户postgres
adduser postgres
或
sudo useradd postgres
# 设置postgres的密码
sudo passwd postgres
# 系统将提示你输入密码,输入后按Enter键确认,再次输入以确认密码
# 若要赋予该用户sudo权限(可选,取决于你希望osdba用户是否具有管理员权限)
sudo usermod -aG wheel postgres # 对于使用wheel组的系统
sudo usermod -aG sudo postgres # 对于使用sudo组的系统
# 确认用户和组信息已生效
id postgres
2.3.2 创建数据目录
建立新用户之后可以数据库目录的创建。对于这个目录你也可以修改一下目录的权限,这是为了出于安全考虑。
mkdir /usr/local/pgsql/data
# 创建pg数据库数据存放目录
mkdir /usr/local/pgsql/data
# 给予权限
chown postgres /usr/local/pgsql/data
如果创建的文件夹postgres用户没有权限可以赋予权限。
2.3.3 配置环境变量
PostgreSQL安装完成后,需要设置可执行文件的路径:
export PATH=/usr/local/pgsql/bin:$PATH
然后设置共享库的路径:
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
设置数据库的数据目录的路径:
export PGDATA=/usr/local/pgsql/data
如果想让以上设置的配置对所有的用户生效,可以把以上内容添加到/etc/profile文件中,/etc/profile中的内容类似如下内容:
# 在root用户下
vi /etc/profile
# 追加内容
...
...
...
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
export PATH=/usr/local/pgsql/bin:$PATH
export PGDATA=/usr/local/pgsql/data
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
对某个指定用户生效也可以,如对新增的postgres用户的环境变量进行新增操作。
cd /home/postgres/
ls -la
可以看见一个.bash_profile的文件,编辑这个文件
vi .bash_profile
将环境变量写入其中。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export PGHOME=/usr/local/pgsql
export PGDATA=$PGHOME/data
export PATH=$PATH:$HOME/bin:$PGHOME/bin
写入完成之后,执行下面命令让环境变量生效。
source .bash_profile
2.4 安装contrib目录工具
contrib下有一些工具比较实用,一般用户都会安装这些工具,其安装的方法也与Linux下的编译过程相同,安装命令如下:
# 进入解压后的源码目录下的、contrib
cd postgresql-16.3/contrib
make
sudo make install
2.5 数据库配置
2.5.1 数据初始化
切换到postgres用户,执行initdb命令初始化数据库。
# 切换用户
su - postgres
# 如果配置好了环境变量
initdb
# 如果没有配置好
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
可以查看/usr/local/pgsql/data目录,看是否初始化成功。
2.5.2 数据启动/停止
启动数据库的命令为:
pg_ctl start -D $PGDATA
停止数据库的命令如下:
pg_ctl stop -D $PGDATA [-m SHUTDOWN-MODE]
其中 -m 用于指定数据库的停止方法,有以下3种模式:
- smart:等所有连接中止后,关闭数据库。如果客户端连接不终止,则无法关闭数据库。
- fast:快速关闭数据库,断开客户端的连接,让已有的事务回滚,然后正常关闭数据库。相当于Oracle数据库关闭时的immediate模式。
- immediate:立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要进行恢复。相当于Oracle数据库关闭时的abort模式。
较常用的关闭数据库的方法是fast模式,因为如果采用smart模式,有用户连接到数据库时,系统会一直等待,而无法关闭数据库。PostgreSQL9.5之前的版本默认是smart模式,通常要使用命令“pg_ctl stop -m fast”来关闭数据库,在PostgreSQL9.5以上的版本中可以直接用“pg_ctl stop”命令来关闭数据库。
2.5.3 数据库密码设置
PostgreSQL的默认用户名通常是postgres
,但并没有默认密码。在首次安装PostgreSQL时,系统不会自动生成一个默认密码,而是需要你在安装后手动设置。
很多Linux发行版中,安装完成后,作为超级用户(如root
)可以通过以下步骤为postgres
用户设置密码:
sudo -u postgres psql -d postgres
# 进入psql命令行后,可以执行以下命令设置密码
ALTER USER osdba WITH PASSWORD 'your_password';
\q
在设置完密码后,强烈建议对默认用户进行如下操作:
- 更改默认用户的密码,以增加安全性。
- 根据实际需要创建新的数据库用户,并赋予合适的权限,而非直接使用
postgres
用户进行日常操作。 - 对数据库实例采取必要的安全措施,比如禁用不需要的协议,启用SSL连接,以及合理配置防火墙规则,限制对PostgreSQL服务的访问仅限于授权的IP地址或网络。
总之,在安装PostgreSQL并完成初步配置后,确实应当更改默认用户的密码,并根据实际情况进行更细致的安全配置。
以下是一些 psql
常见的命令行参数及其描述:
命令(参数) | 描述 |
---|---|
-h HOSTNAME 或 --host=HOSTNAME |
指定要连接到的数据库服务器主机名或IP地址。默认情况下,psql 会尝试连接到本地主机。 |
-p PORT 或 --port=PORT |
指定数据库服务器监听的端口号,默认为 5432。 |
-U USERNAME 或 --username=USERNAME |
指定要使用的数据库用户名。默认情况下,psql 会尝试使用当前操作系统的用户名。 |
-d DATABASE 或 --dbname=DATABASE |
指定要连接的数据库名称。如果不指定,将连接到用户的默认数据库。 |
-w 或 --no-password |
不提示输入密码。如果服务器需要密码认证且环境变量 PGPASSWORD 未设置,则连接尝试可能会失败。 |
-W 或 --password |
强制 psql 提示输入密码,无论服务器是否需要密码认证。 |
-c COMMAND 或 --command=COMMAND |
执行单条SQL命令后退出。例如:psql -c "SELECT * FROM mytable;" |
-f FILE 或 --file=FILE |
执行指定文件中的SQL命令集后退出。 |
-l 或 --list |
列出服务器上所有可用的数据库。 |
-v VARNAME=value 或 --set=VARNAME=value |
设置一个变量,可以在SQL脚本中引用。 |
\? 或 \\? |
在 psql 交互模式中查看帮助,列出元命令列表。 |
-E 或 --echo-queries |
显示发送到服务器的SQL命令。 |
-a 或 --single-transaction |
在执行SQL脚本时,以单个事务的方式执行所有命令。 |
请注意,\?
和 -E
是在 psql
交互式会话中使用的元命令,而不是命令行参数。不过,这里为了完整性也一并列出。在实际使用中,可以根据需要组合使用这些参数。
2.6 远程连接服务
进入/usr/local/pgsql/data目录,编辑其中的postgresql.conf文件。
cd /usr/local/pgsql/data
vi postgresql.conf
样式:
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
在修改pg_hba.conf文件,让数据库可以远程访问。
vi pg_hba.conf
样式:
# IPv4 local connections:
host all all 0.0.0.0/0 trust
host all all 127.0.0.1/32 trust
启动postgres服务。
service postgresql start
2.7 数据库日志配置
数据库日志相关参数还是在 postgresql.conf ,下面来看看与日志相关的几个参数:日志的收集一般是需要打开的,所以需要进行如下设置:
logging_collector = on
log_directory = 'log' # directory where log files are written,
# can be absolute or relative to PGDATA
日志切换和是否覆盖一般可以使用如下几种不同的方案。
方案一:每天生成一个新的日志文件
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = off
log_rotation_age = 1d
log_rotation_size = 0
方案二:每当日志写满一定的大小(如10MB),则切换一个日志
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = off
log_rotation_age = 0
log_rotation_size = 10M
方案三:只保留最近7天的日志,进行循环覆盖
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
log_filename
中的 %
符号及其后面的字母组合是用来格式化日志文件名中的日期和时间部分的。下面是常用的时间日期格式符号以及它们对应的含义:
符号 | 含义 |
---|---|
%Y |
四位数的年份 |
%m |
两位数的月份(01-12) |
%d |
两位数的日期(01-31) |
%H |
两位数的小时(00-23) |
%M |
两位数的分钟(00-59) |
%S |
两位数的秒(00-59) |
%a |
缩写的星期几名字(Sun-Sat) |
内存参数的设置
PostgreSQL安装完毕后,可以修改以下主要内存参数。
- shared_buffers:共享内存的大小,主要用于共享数据块。
- work_mem:单个SQL执行时,以及排序、Hash Join时使用的内存,SQL运行完毕后,该内存就会被释放。
- shared_buffers的默认值为32MB,如果你的机器上有足够的内存,可以把这个参数设置得大一些,如可以设置为物理内存大小的四分之一,这样数据库就可以缓存更多数据块,当读取数据时,就可以从共享内存中进行读取,而不需要再从文件上去读。而work_mem设置大一些,会使排序操作效率更高。
2.8 本地连接测试
切换到postgres用户,执行psql命令,也可以使用pg_ctl status来判断。
# 切换到postgres用户
su postgres
# 重启数据库
pg_ctl restart
# 查看数据库运行的状态
pg_ctl status
# 进入数据库
psql
# 展示
psql (15.7)
Type "help" for help.
postgres=# List of databases
postgres-# \l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
-----------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
mydb | postgres | UTF8 | libc | zh_CN.UTF-8 | zh_CN.UTF-8 | | |
postgres | postgres | UTF8 | libc | zh_CN.UTF-8 | zh_CN.UTF-8 | | |
template0 | postgres | UTF8 | libc | zh_CN.UTF-8 | zh_CN.UTF-8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | libc | zh_CN.UTF-8 | zh_CN.UTF-8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
(4 rows)
2.9 远程连接测试
使用datagrip工具进行连接。
2.10 设置开启自启
PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下。linux文件即为linux系统上的启动脚本。需切换为root用户。
su root
cd /soft/pg/postgresql-16.3/contrib/start-scripts
ls
# 展示如下
freebsd linux macos
切换为root用户,修改linux文件属性,添加X属性
chmod a+x linux
复制linux文件到/etc/init.d目录下,更名为postgresql
cp linux /etc/init.d/postgresql
修改/etc/init.d/postgresql文件的两个变量
vi /etc/init.d/postgresql
cat /etc/init.d/postgresql
# 展示如下
...
## EDIT FROM HERE
# Installation prefix
#prefix=/usr/local/pgsql
prefix=/opt/pgsql/postgresql
# Data directory
#PGDATA="/usr/local/pgsql/data"
PGDATA="/opt/pgsql/postgresql/data"
...
设置postgresql服务开机自启动
chkconfig --add postgresql
chkconfig
# 展示如下
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
postgresql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
2.11 设置防火墙
安装依赖包。切换到root用户。
yum -y install firewalld
设置防火墙。
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld
添加postgresql服务到防火墙,并加载。
firewall-cmd --permanent --zone=public --add-service=postgresql
# 展示
success
firewall-cmd --reload
# 展示
success
查看端口是否开放。
/sbin/iptables -L -n
# 展示
Chain IN_public_allow (1 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW,UNTRACKED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5432 ctstate NEW,UNTRACKED
2.12 启动数据库服务
启动PostgreSQL服务。
service postgresql start
# 展示
Starting PostgreSQL: ok
查看PostgreSQL服务,确认是否启动成功。
ps -ef | grep postgres
# 展示
root 20099 9787 0 14:55 pts/0 00:00:00 su - postgres
postgres 20100 20099 0 14:55 pts/0 00:00:00 -bash
postgres 20424 1 0 15:13 ? 00:00:00 /opt/pgsql/postgresql/bin/postmaster -D /opt/pgsql/postgresql/data
postgres 20426 20424 0 15:13 ? 00:00:00 postgres: checkpointer
postgres 20427 20424 0 15:13 ? 00:00:00 postgres: background writer
postgres 20428 20424 0 15:13 ? 00:00:00 postgres: walwriter
postgres 20429 20424 0 15:13 ? 00:00:00 postgres: autovacuum launcher
postgres 20430 20424 0 15:13 ? 00:00:00 postgres: stats collector
postgres 20431 20424 0 15:13 ? 00:00:00 postgres: logical replication launcher
# 查看端口
netstat -ltnup | grep post
#展示
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 20424/postmaster
tcp6 0 0 :::5432 :::* LISTEN 20424/postmaster
netstat可能提示命令不存在,可以使用yum安装依稀
yum -y install net-tools
标签:PostgreSQL,postgres,--,数据库,V15,pgsql,postgresql
From: https://www.cnblogs.com/zreo2home/p/18353377