

图1 PostgreSQL
PostgreSQL 是一个功能强大的开源对象关系型数据库系统,它使用和扩展了 SQL 语言,并结合了许多特性,能够安全地存储和扩展最复杂的数据工作负载。PostgreSQL 的起源可以追溯到 1986 年,作为加州大学伯克利分校的 POSTGRES 项目的一部分,并且在核心平台上拥有超过 35 年的活跃开发经验。
PostgreSQL 因其经过验证的架构、可靠性、数据完整性、强大的功能集、可扩展性以及开源社区对软件的持续贡献而赢得了良好的声誉,以始终如一地提供高性能和创新的解决方案。PostgreSQL 支持所有主要操作系统,自 2001 年以来一直符合 ACID 标准,并拥有强大的附加组件,如流行的 PostGIS 地理空间数据库扩展器。毫无疑问,PostgreSQL 已成为许多人和组织的开源关系数据库首选。
开始使用 PostgreSQL 从未如此简单——选择一个您想要构建的项目,让 PostgreSQL 安全且稳健地存储您的数据。
为什么选择 PostgreSQL?
PostgreSQL 拥有许多旨在帮助开发人员构建应用程序、管理员保护数据完整性和构建容错环境的功能,并帮助您管理数据,无论数据集大小。除了免费和开源之外,PostgreSQL 还具有高度的可扩展性。例如,您可以定义自己的数据类型,构建自定义函数,甚至无需重新编译数据库即可用不同的编程语言编写代码!
PostgreSQL 努力在与传统特性不矛盾或导致糟糕架构决策的地方符合 SQL 标准。许多 SQL 标准所需的特性都得到了支持,尽管有时语法或功能略有不同。随着时间的推移,可以预期会有更多的符合性。截至 2023 年 9 月的 16 版本,PostgreSQL 至少符合 SQL:2023 核心符合性的 177 个强制性特性中的 170 个。截至撰写本文时,还没有关系数据库完全符合此标准。
以下是 PostgreSQL 中发现的 various 特性的非详尽列表,每个主要版本都会添加更多:
PostgreSQL 文档中还有许多您可以发现的特性。此外,PostgreSQL 具有高度的可扩展性:许多特性,如索引,都定义了 API,因此您可以使用 PostgreSQL 扩展来解决您的挑战。
PostgreSQL 已被证明在它能够管理的数据量以及它可以容纳的并发用户数量方面具有高度的可扩展性。有许多生产环境中的 PostgreSQL 集群管理着许多 TB 的数据,以及管理着 PB 数据的专业系统。
[root@rocky10 ~]# mkdir -p /etc/systemd/network/
[root@rocky10 ~]# touch /etc/systemd/network/70-eth0.link
[root@rocky10 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:02:55:30 brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname enx000c29025530
inet 172.31.15.1/20 brd 172.31.15.255 scope global dynamic noprefixroute ens160
valid_lft 1776sec preferred_lft 1776sec
inet6 fe80::20c:29ff:fe02:5530/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@rocky10 ~]# cat > /etc/systemd/network/70-eth0.link << EOF
[Match]
MACAddress=00:0c:29:f8:60:8f
[Link]
Name=eth0
EOF
# 也可以执行下面命令
ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
ETHMAC=`ip addr show ${ETHNANME} | awk -F' ' '/ether/{print $2}'`
mkdir /etc/systemd/network/
touch /etc/systemd/network/70-eth0.link
cat > /etc/systemd/network/70-eth0.link << EOF
[Match]
MACAddress=${ETHMAC}
[Link]
Name=eth0
EOF[root@rocky10 ~]# mv /etc/NetworkManager/system-connections/ens160.nmconnection /etc/NetworkManager/system-connections/eth0.nmconnection
[root@rocky10 ~]# sed -i.bak 's/'ens160'/eth0/' /etc/NetworkManager/system-connections/eth0.nmconnection
# 也可以执行下面命令
mv /etc/NetworkManager/system-connections/${ETHNAME}.nmconnection /etc/NetworkManager/system-connections/eth0.nmconnection
sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/NetworkManager/system-connections/eth0.nmconnectionnet.ifnames=0 biosdevname=0执行以下命令:
sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0 biosdevname=0"@' /etc/default/grub然后更新 GRUB 配置:
grub2-mkconfig -o /boot/grub2/grub.cfg如果是 UEFI 引导系统,更新命令为:
# Rocky
grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
# Almalinux
grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
# CentOS
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
# openEuler
grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg
# AnolisOS
grub2-mkconfig -o /boot/efi/EFI/anolis/grub.cfg
# OpenCloudOS
grub2-mkconfig -o /boot/efi/EFI/opencloudos/grub.cfg
# Kylin Server
grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg
# UOS Server
grub2-mkconfig -o /boot/efi/EFI/uos/grub.cfg
# UEFI 引导系统可以直接执行下面命令:
EFI_DIR=`find /boot/efi/ -name "grub.cfg" | awk -F"/" '{print $5}'`
grub2-mkconfig -o /boot/efi/EFI/${EFI_DIR}/grub.cfgSUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<网卡MAC地址>", NAME="eth0"注意:创建Udev这个步骤只在AnolisOS 8上执行。
将 <网卡MAC地址> 替换为实际网卡的 MAC 地址。
[root@anolisos8 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:47:02:3f brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 172.31.15.25/20 brd 172.31.15.255 scope global dynamic noprefixroute ens33
valid_lft 1785sec preferred_lft 1785sec
inet6 fe80::20c:29ff:fe47:23f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@anolis8 ~]# cat >> /etc/udev/rules.d/10-network.rules << EOF
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:0c:29:c5:38:3b", NAME="eth0"
EOF
# 也可以执行下面命令
ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
ETHMAC=`ip addr show ${ETHNANME} | awk -F' ' '/ether/{print $2}'`
cat >> /etc/udev/rules.d/10-network.rules << EOF
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="${ETHMAC}", NAME="eth0"
EOFETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
mv /etc/sysconfig/network-scripts/ifcfg-${ETHNAME} /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/sysconfig/network-scripts/ifcfg-eth0# Ubuntu和Debian先启用root用户,并设置密码
raymond@ubuntu2404:~$ cat set_root_login.sh
#!/bin/bash
read -p "请输入密码: " PASSWORD
echo ${PASSWORD} |sudo -S sed -ri 's@#(PermitRootLogin )prohibit-password@\1yes@' /etc/ssh/sshd_config
sudo systemctl restart sshd
sudo -S passwd root <<-EOF
${PASSWORD}
${PASSWORD}
EOF
raymond@ubuntu2404:~$ bash set_root_login.sh
请输入密码: 123456
[sudo] password for raymond: New password: Retype new password: passwd: password updated successfullynet.ifnames=0 biosdevname=0执行以下命令:
sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@net.ifnames=0 biosdevname=0"@' /etc/default/grub然后更新 GRUB 配置:
grub-mkconfig -o /boot/grub/grub.cfg如果是 UEFI 引导系统,更新命令为:
# Ubuntu
grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg
# Debian
grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg
# UEFI 引导系统可以直接执行下面命令:
EFI_DIR=`find /boot/efi/ -name "grub.cfg" | awk -F"/" '{print $5}'`
grub-mkconfig -o /boot/efi/EFI/${EFI_DIR}/grub.cfg# Ubuntu Server 24.04 LTS
ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/netplan/50-cloud-init.yaml
# Ubuntu Server 22.04 LTS
ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
touch /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
cat > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<-EOF
network: {config: disabled}
EOF
sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/netplan/50-cloud-init.yaml
# Ubuntu Server 20.04 LTS
ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/netplan/00-installer-config.yaml
# Ubuntu Server 18.04 LTS
ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/netplan/01-netcfg.yaml
# Debian
ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/network/interfacesreboot重启后,网卡名称将变为 eth0。
1ETHNAME=`ip addr |awk -F"[ :]"'/^2/{print $3}'`
2
3# IP变量是ip地址,PREFIX变量是子网掩码位数;GATEWAY变量是网关地址;PRIMARY_DNS变量是主DNS,BACKUP_DNS变量是备用DNS,根据自己的需求修改。
4IP=172.31.0.10
5PREFIX=20
6GATEWAY=172.31.0.2
7PRIMARY_DNS=223.5.5.5
8BACKUP_DNS=180.76.76.76Rocky Linux 9/10、Almalinux 9/10、CentOS Stream 9/10、AnolisOS 23、OpenCloudOS 9:
1cat> /etc/NetworkManager/system-connections/${ETHNAME}.nmconnection <<-EOF
2[connection]
3id=${ETHNAME}
4type=ethernet
5interface-name=${ETHNAME}
6
7[ipv4]
8address1=${IP}/${PREFIX},${GATEWAY}
9dns=${PRIMARY_DNS};${BACKUP_DNS};
10method=manual
11EOFRocky Linux 8、Almalinux 8、CentOS 7、CentOS Stream 8、openEuler 22.03和24.03 LTS、AnolisOS 8、OpenCloudOS 8、Kylin Server v10/v11、UOS Server v20:
1cat> /etc/sysconfig/network-scripts/ifcfg-${ETHNAME}<<-EOF
2NAME=${ETHNAME}
3DEVICE=${ETHNAME}
4ONBOOT=yes
5BOOTPROTO=none
6TYPE=Ethernet
7IPADDR=${IP}
8PREFIX=${PREFIX}
9GATEWAY=${GATEWAY}
10DNS1=${PRIMARY_DNS}
11DNS2=${BACKUP_DNS}
12EOFUbuntu:
1# Ubuntu Server 18.04 LTS
2cat> /etc/netplan/01-netcfg.yaml <<-EOF
3network:
4 version: 2
5 renderer: networkd
6 ethernets:
7${ETHNAME}:
8 dhcp4: no
9 dhcp6: no
10 addresses: [${IP}/${PREFIX}]
11 gateway4: ${GATEWAY}
12 nameservers:
13 addresses: [${PRIMARY_DNS}, ${BACKUP_DNS}]
14
15# Ubuntu Server 20.04 LTS
16cat> /etc/netplan/00-installer-config.yaml <<-EOF
17network:
18 version: 2
19 renderer: networkd
20 ethernets:
21${ETHNAME}:
22 dhcp4: no
23 dhcp6: no
24 addresses: [${IP}/${PREFIX}]
25 gateway4: ${GATEWAY}
26 nameservers:
27 addresses: [${PRIMARY_DNS}, ${BACKUP_DNS}]
28EOF
29
30# Ubuntu Server 22.04/24.04 LTS
31cat> /etc/netplan/50-cloud-init.yaml <<-EOF
32network:
33 version: 2
34 renderer: networkd
35 ethernets:
36${ETHNAME}:
37 dhcp4: no
38 dhcp6: no
39 addresses: [${IP}/${PREFIX}]
40 routes:
41 - to: default
42 via: ${GATEWAY}
43 nameservers:
44 addresses: [${PRIMARY_DNS}, ${BACKUP_DNS}]
45EOFDebian:
1sed-ri-e"s/allow-hotplug/auto/g"-e"s/dhcp/static/g" /etc/network/interfaces
2sed-i'/static/a\address '${IP}'/'${PREFIX}'\ngateway '${GATEWAY}'\ndns-nameservers '${PRIMARY_DNS}' '${BACKUP_DNS}'\n' /etc/network/interfacesopenSUSE:
1cat> /etc/sysconfig/network/ifcfg-${ETHNAME}<<-EOF
2STARTMODE='auto'
3BOOTPROTO='static'
4IPADDR='${IP}/${PREFIX}'
5EOF
6touch /etc/sysconfig/network/routes
7cat> /etc/sysconfig/network/routes <<-EOF
8default ${GATEWAY} - -
9EOF
10sed-ri's/(NETCONFIG_DNS_STATIC_SERVERS=).*/\1"'${PRIMARY_DNS}' '${BACKUP_DNS}'"/g' /etc/sysconfig/network/configRocky:
1# 阿里云镜像站Rocky系统镜像源地址是:mirrors.aliyun.com/rockylinux,火山引擎镜像站Rocky系统镜像源地址是:mirrors.volces.com/rockylinux,后面地址是rockylinux,使用下面命令执行
2MIRROR=mirrors.aliyun.com
3sed-i.bak-e's|^mirrorlist=|#mirrorlist=|g'-e's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://'${MIRROR}'/rockylinux|g' /etc/yum.repos.d/[Rr]ocky*.repo
4
5# 搜狐镜像站Rocky系统镜像源地址是:mirrors.sohu.com/Rocky,后面地址是Rocky,使用下面命令执行
6MIRROR=mirrors.sohu.com
7sed-i.bak-e's|^mirrorlist=|#mirrorlist=|g'-e's|^#baseurl=http://'${OLD_MIRROR}'/$contentdir|baseurl=https://'${MIRROR}'/Rocky|g' /etc/yum.repos.d/[Rr]ocky*.repo
8
9# 其余镜像站Rocky系统镜像源地址后面地址都是rocky,使用下面命令执行
10MIRROR=mirrors.tencent.com
11sed-i.bak-e's|^mirrorlist=|#mirrorlist=|g'-e's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://'${MIRROR}'/rocky|g' /etc/yum.repos.d/[Rr]ocky*.repo
12
13dnf clean all && dnf makecacheAlmalinux:
1MIRROR=mirrors.tencent.com
2OLD_MIRROR=$(sed-rn'/^.*baseurl=/s@.*=http.*://(.*)/(.*)/\$releasever/.*/$@\1@p' /etc/yum.repos.d/almalinux*.repo |head-1)
3sed-i.bak-e's|^mirrorlist=|#mirrorlist=|g'-e's|^# baseurl=https://'${OLD_MIRROR}'|baseurl=https://'${MIRROR}'|g' /etc/yum.repos.d/almalinux*.repoCentOS Stream 9和10:
1cat update_mirror.pl
2#!/usr/bin/perl
3
4use strict;
5use warnings;
6use autodie;
7
8# 要修改镜像源,请去修改url变量!
9my $url='mirrors.aliyun.com';
10my $mirrors="https://$url/centos-stream";
11
12if(@ARGV <1){
13 die "Usage: $0...\n";
14}
15
16while(my $filename=shift @ARGV){
17 my $backup_filename=$filename.'.bak';
18rename$filename, $backup_filename;
19
20open my $input, "<", $backup_filename;
21open my $output, ">", $filename;
22
23while(<$input>){
24 s/^metalink/# metalink/;
25
26if(m/^name/){
27 my (undef, $repo, $arch)=split /-/;
28$repo=~ s/^\s+|\s+$//g;
29($arch= defined $arch ? lc($arch):'')=~ s/^\s+|\s+$//g;
30
31if($repo=~ /^Extras/){
32$_ .="baseurl=${mirrors}/SIGs/\$releasever-stream/extras".($arch eq 'source' ? "/${arch}/":"/\$basearch/")."extras-common\n";
33}else{
34$_ .="baseurl=${mirrors}/\$releasever-stream/$repo".($arch eq 'source' ? "/":"/\$basearch/").($arch ne '' ? "${arch}/tree/":"os")."\n";
35}
36}
37
38 print $output$_;
39}
40}
41
42rpm-q perl &> /dev/null ||{echo-e"\\033[01;31m "安装perl工具,请稍等..."\033[0m";yum -yinstall perl ;}
43
44perl ./update_mirror.pl /etc/yum.repos.d/centos*.repo
45
46dnf clean all && dnf makecacheCentOS Stream 8:
1MIRROR=mirrors.aliyun.com
2sed-i.bak-e's|^mirrorlist=|#mirrorlist=|g'-e's|^#baseurl=http://mirror.centos.org/$contentdir|baseurl=https://'${MIRROR}'/centos-vault|g' /etc/yum.repos.d/CentOS-*.repo
3
4dnf clean all && dnf makecacheCentOS 7:
1MIRROR=mirrors.aliyun.com
2OS_RELEASE_FULL_VERSION=`cat /etc/centos-release |sed-rn's/^(CentOS Linux release )(.*)( \(Core\))/\2/p'`
3sed-i.bak-e's|^mirrorlist=|#mirrorlist=|g'-e's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://'${MIRROR}'/centos-vault|g'-e"s/\$releasever/${OS_RELEASE_FULL_VERSION}/g" /etc/yum.repos.d/CentOS-*.repo
4
5yum clean all && yum makecacheUbuntu Server 24.04 LTS:
1MIRROR=mirrors.aliyun.com
2sed-ri"s@^(URIs: )(http.*://)(.*)(/ubuntu).?@\1https://${MIRROR}\4@g" /etc/apt/sources.list.d/ubuntu.sources
3
4apt updateUbuntu Server 18.04/20.04/22.04 LTS:
1MIRROR=mirrors.aliyun.com
2OLD_MIRROR=`sed-rn"s@^deb http(.*)://(.*)/ubuntu/? $(lsb_release -cs) main.*@\2@p" /etc/apt/sources.list`
3SECURITY_MIRROR=`sed-rn"s@^deb http(.*)://(.*)/ubuntu.* $(lsb_release -cs)-security main.*@\2@p" /etc/apt/sources.list`
4sed-i.bak-e's@http.*://'${OLD_MIRROR}'@https://'${MIRROR}'@g'-e's@http.*://'${SECURITY_MIRROR}'@https://'${MIRROR}'@g' /etc/apt/sources.list
5
6apt updateDebian:
1MIRROR=mirrors.aliyun.com
2OLD_MIRROR=`sed-rn"s@^deb http(.*)://(.*)/debian/? $(lsb_release -cs) main.*@\2@p" /etc/apt/sources.list`
3SECURITY_MIRROR=`sed-rn"s@^deb http(.*)://(.*)/debian-security $(lsb_release -cs)-security main.*@\2@p" /etc/apt/sources.list`
4sed-ri.bak-e's/'${OLD_MIRROR}'/'${MIRROR}'/g'-e's/'${SECURITY_MIRROR}'/'${MIRROR}'/g'-e's/^(deb cdrom.*)/#\1/g' /etc/apt/sources.list
5
6apt updateopenEuler:
1MIRROR=mirrors.aliyun.com
2OLD_MIRROR=$(awk -F'/''/^baseurl=/{print $3}' /etc/yum.repos.d/openEuler.repo |head-1)
3sed-i.bak-e's|^metalink=|#metalink=|g'-e's|http.*://'${OLD_MIRROR}'|https://'${MIRROR}'/openeuler|g' /etc/yum.repos.d/openEuler.repo
4
5dnf clean all && dnf makecacheAnolisOS:
1OLD_MIRROR=$(sed-rn'/^.*baseurl=/s@.*=http.*://(.*)/(.*)/\$releasever/.*/$@\1@p' /etc/yum.repos.d/AnolisOS*.repo |head-1)
2
3# 中国科学院软件研究所镜像站AnolisOS系统镜像源地址是:mirror.iscas.ac.cn/openanolis,后面地址是openanolis,使用下面命令执行
4MIRROR=mirror.iscas.ac.cn
5sed-i.bak-e's|http.*://'${OLD_MIRROR}'/anolis|https://'${MIRROR}'/openanolis|g' /etc/yum.repos.d/AnolisOS*.repo
6
7# 其余镜像站AnolisOS系统镜像源地址后面地址都是anolis,使用下面命令执行
8MIRROR=mirrors.aliyun.com
9sed-i.bak-e's|http.*://'${OLD_MIRROR}'/anolis|https://'${MIRROR}'/anolis|g' /etc/yum.repos.d/AnolisOS*.repo
10
11dnf clean all && dnf makecacheOpenCloudOS:
1MIRROR=mirrors.tencent.com
2OLD_MIRROR=$(awk -F'/''/^baseurl=/{print $3}' /etc/yum.repos.d/OpenCloudOS*.repo |head-1)
3sed-i.bak-e's|http.*://'${OLD_MIRROR}'|https://'${MIRROR}'|g' /etc/yum.repos.d/OpenCloudOS*.repo
4
5dnf clean all && dnf makecacheopenSUSE:
1MIRROR=mirrors.aliyun.com
2OLD_MIRROR=$(awk -F'/''/^baseurl=/{print $3}' /etc/zypp/repos.d/repo-*.repo |head-1)
3sed-i.bak's|http.*://'${OLD_MIRROR}'|https://'${MIRROR}'/opensuse|g' /etc/zypp/repos.d/repo-*.repo
4
5zypper clean &&zypper refresh1# Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、openSUSE、Kylin Server、UOS Server
2systemctl disable --now firewalld
3
4# CentOS 7还要执行下面命令
5systemctl disable --now NetworkManager
6
7# Ubuntu
8systemctl disable --now ufw
9
10# Debian默认没有安装防火墙,不用设置1# Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、Kylin Server、UOS Server
2setenforce 0
3sed-i's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
4
5# Ubuntu、Debian和openSUSE默认没有安装SELinux,不用设置1# openSUSE发行版默认不启用SELinux,而是使用AppArmor来提供强制访问控制(MAC)功能,需要禁用AppArmor。
2systemctl disable --now apparmor1timedatectl set-timezone Asia/Shanghai
2echo'Asia/Shanghai'>/etc/timezone
3
4# Ubuntu还要设置下面内容
5cat>> /etc/default/locale <<-EOF
6LC_TIME=en_DK.UTF-8
7EOF1cat> /etc/sysctl.conf <<EOF
2kernel.shmmax =68719476736
3kernel.shmall =4294967296
4kernel.shmmni =4096
5kernel.sem =5010064128000501001280
6fs.file-max =7672460
7net.ipv4.ip_local_port_range =900065000
8net.core.rmem_default =1048576
9net.core.rmem_max =4194304
10net.core.wmem_default =262144
11net.core.wmem_max =1048576
12EOF
13
14sysctl-p1cat> /etc/security/limits.conf <<EOF
2* - nofile 100000
3* - nproc 100000
4* - memlock 60000
5EOF在Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、Kylin Server、UOS Server上使用系统自带包安装PostgreSQL:
1[root@rocky10 ~]# yum list postgresql-server --showduplicates
2Last metadata expiration check: 0:01:09 ago on Mon 08 Sep 202512:24:57 PM CST.
3Available Packages
4postgresql-server.x86_64 16.8-1.el10_0 appstream
5postgresql-server.x86_64 16.10-1.el10_0 appstream
6
7[root@rocky10 ~]# yum -y install postgresql-server
8
9# 默认无法启动
10[root@rocky10 ~]# systemctl start postgresql
11Job for postgresql.service failed because the control process exited with error code.
12See "systemctl status postgresql.service" and "journalctl -xeu postgresql.service"for details.
13
14# 看日志提示做初始化
15[root@rocky10 ~]# tail -f /var/log/messages
16Sep 812:27:04 rocky10 systemd[1]: Finished man-db-cache-update.service.
17Sep 812:27:04 rocky10 systemd[1]: run-p1373-i1673.service: Deactivated successfully.
18Sep 812:27:27 rocky10 systemd[1]: Starting postgresql.service - PostgreSQL database server...
19Sep 812:27:27 rocky10 postgresql-check-db-dir[1426]: Directory "/var/lib/pgsql/data" is missing or empty. # 提示,目录“/var/lib/pgsql/data”缺失或为空。
20Sep 812:27:27 rocky10 postgresql-check-db-dir[1426]: Use "/usr/bin/postgresql-setup --initdb"# 提示,使用“/usr/bin/postgresql-setup --initdb”
21Sep 812:27:27 rocky10 postgresql-check-db-dir[1426]: to initialize the database cluster.
22Sep 812:27:27 rocky10 postgresql-check-db-dir[1426]: See /usr/share/doc/postgresql16/README.rpm-dist formore information.
23Sep 812:27:27 rocky10 systemd[1]: postgresql.service: Control process exited, code=exited, status=1/FAILURE
24Sep 812:27:27 rocky10 systemd[1]: postgresql.service: Failed with result 'exit-code'.
25Sep 812:27:27 rocky10 systemd[1]: Failed to start postgresql.service - PostgreSQL database server.
26
27# 可以看到数据目录是空的
28[root@rocky10 ~]# ls /var/lib/pgsql/data
29
30# 初始化数据库
31[root@rocky10 ~]# postgresql-setup --initdb
32 * Initializing database in'/var/lib/pgsql/data'
33 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
34
35# 现在数据目录有文件了
36[root@rocky10 ~]# ls /var/lib/pgsql/data
37base pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans PG_VERSION postgresql.auto.conf
38global pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_wal postgresql.conf
39log pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase pg_xact
40
41[root@rocky10 ~]# systemctl enable --now postgresql
42
43# 验证成功
44[root@rocky10 ~]# sudo -u postgres psql -c "SELECT version();"
45 version
46---------------------------------------------------------------------------------------------------------------
47 PostgreSQL 16.10 on x86_64-redhat-linux-gnu, compiled by gcc (GCC)14.2.1 20250110(Red Hat 14.2.1-7), 64-bit
48(1 row)
49
50[root@rocky10 ~]# su - postgres
51[postgres@rocky10 ~]$ psql
52psql (16.10)
53Type "help"for help.
54
55postgres=# help
56You are using psql, the command-line interface to PostgreSQL.
57Type: \copyright for distribution terms
58\h forhelp with SQL commands
59\? forhelp with psql commands
60\g or terminate with semicolon to execute query
61\q to quit
62postgres=# \q使用PostgreSQL官方资源库:
添加官方资源库,去“https://www.postgresql.org/download”网站下载,在“**Select your operating system family:(选择操作系统系列)**”为:Linux,选择“Select your Linux distribution:(选择你的Linux发行版)"为:Red Hat/Rocky/AlmaLinux,然后根据下面提示操作。

图2 PostgreSQL添加资源库
在"https://www.postgresql.org/download/linux/redhat"页面,选择“**Select Version:(选择版本)**”为:17,选择“Select platform:(选择平台)"为:Red Hat Enterprise,Rocky,AlmaLinux or Oracle Version 10,选择“Select architecture:(选择架构)”为:x86_64,然后根据下面提示操作。

图3 PostgreSQL添加资源库
1# 安装存储库RPM
2sudo dnf install-y https://download.postgresql.org/pub/repos/yum/reporpms/EL-10-x86_64/pgdg-redhat-repo-latest.noarch.rpm
3
4# 禁用内置的postgresql
5sudo dnf -qy module disable postgresql
6
7# 替换国内镜像源
8[root@rocky10 ~]# sed -i.bak 's|download.postgresql.org/pub|mirrors.nju.edu.cn/postgresql|g' /etc/yum.repos.d/pgdg-redhat-all.repo
9
10[root@rocky10 ~]# yum list postgresql*-server --showduplicates
11Last metadata expiration check: 0:23:29 ago on Mon 08 Sep 2025 01:58:12 PM CST.
12Available Packages
13postgresql-server.x86_64 16.8-1.el10_0 appstream
14postgresql-server.x86_64 16.10-1.el10_0 appstream
15postgresql13-server.x86_64 13.21-2PGDG.rhel10 pgdg13
16postgresql13-server.x86_64 13.22-1PGDG.rhel10 pgdg13
17postgresql14-server.x86_64 14.18-2PGDG.rhel10 pgdg14
18postgresql14-server.x86_64 14.19-1PGDG.rhel10 pgdg14
19postgresql15-server.x86_64 15.13-2PGDG.rhel10 pgdg15
20postgresql15-server.x86_64 15.14-1PGDG.rhel10 pgdg15
21postgresql16-server.x86_64 16.9-3PGDG.rhel10 pgdg16
22postgresql16-server.x86_64 16.10-1PGDG.rhel10 pgdg16
23postgresql17-server.x86_64 17.5-3PGDG.rhel10 pgdg17
24postgresql17-server.x86_64 17.6-1PGDG.rhel10 pgdg17
25
26# 安装PostgreSQL
27dnf install-y postgresql17-server
28
29# 初始化数据库
30[root@rocky10 ~]# postgresql-17-setup initdb
31Initializing database ... OK
32
33# 启动服务
34systemctl enable--now postgresql-17
35
36# 验证成功
37[root@rocky10 ~]# sudo -u postgres psql -c "SELECT version();"
38 version
39----------------------------------------------------------------------------------------------------------
40 PostgreSQL 17.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC)14.2.1 20250110(Red Hat 14.2.1-7), 64-bit
41(1 row)
42
43[root@rocky10 ~]# su - postgres
44[postgres@rocky10 ~]$ psql
45psql (17.6)
46Type "help"for help.
47
48postgres=# help
49You are using psql, the command-line interface to PostgreSQL.
50Type: \copyright for distribution terms
51\h forhelp with SQL commands
52\? forhelp with psql commands
53\g or terminate with semicolon to execute query
54\q to quit
55postgres=# \q在Ubuntu和Debian上使用系统自带包安装PostgreSQL:
1root@ubuntu2404:~# apt update
2
3root@ubuntu2404:~# apt-cache madison postgresql
4postgresql |16+257build1.1 | https://mirrors.aliyun.com/ubuntu noble-updates/main amd64 Packages
5postgresql |16+257build1 | https://mirrors.aliyun.com/ubuntu noble/main amd64 Packages
6
7root@ubuntu2404:~# apt install -y postgresql
8
9root@ubuntu2404:~# systemctl enable --now postgresql
10
11root@ubuntu2404:~# sudo -u postgres psql -c "SELECT version();"
12 version
13--------------------------------------------------------------------------------------------------------------------------------------
14 PostgreSQL 16.9(Ubuntu 16.9-0ubuntu0.24.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04)13.3.0, 64-bit
15
16root@ubuntu2404:~# su - postgres
17postgres@ubuntu2404:~$ psql
18psql (16.9(Ubuntu 16.9-0ubuntu0.24.04.1))
19Type "help"for help.
20
21postgres=# help
22You are using psql, the command-line interface to PostgreSQL.
23Type: \copyright for distribution terms
24\h forhelp with SQL commands
25\? forhelp with psql commands
26\g or terminate with semicolon to execute query
27\q to quit
28postgres=# \q使用PostgreSQL官方资源库:
添加官方资源库,去“https://www.postgresql.org/download”网站下载,在“**Select your operating system family:(选择操作系统系列)**”为:Linux,选择“Select your Linux distribution:(选择你的Linux发行版)"为:Ubuntu,然后根据下面提示操作。

图4 PostgreSQL添加资源库
在"https://www.postgresql.org/download/linux/ubuntu"页面,根据下面提示操作。

图5 PostgreSQL添加资源库
1# 导入存储库签名密钥:
2sudoaptinstallcurl ca-certificates
3sudoinstall-d /usr/share/postgresql-common/pgdg
4sudocurl-o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
5
6# 创建存储库配置文件:
7. /etc/os-release
8sudosh-c"echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
9
10# 替换国内镜像源
11root@ubuntu2404:~# sed -i。bak 's|apt.postgresql.org/pub|mirrors.aliyun.com/postgresql|g' /etc/apt/sources.list.d/pgdg.list
12
13# 更新包列表:
14sudoapt update
15
16root@ubuntu2404:~# apt-cache madison postgresql
17postgresql |17+281.pgdg24.04+1 | https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 Packages
18postgresql |16+257build1.1 | https://mirrors.aliyun.com/ubuntu noble-updates/main amd64 Packages
19postgresql |16+257build1 | https://mirrors.aliyun.com/ubuntu noble/main amd64 Packages
20
21# 安装最新版本的PostgreSQL:
22# 如果你想要一个特定的版本,请使用“postgresql-17”或类似的版本,而不是“postgresql”
23sudoapt-yinstall postgresql-17
24
25root@ubuntu2404:~# systemctl enable --now postgresql
26
27root@ubuntu2404:~# sudo -u postgres psql -c "SELECT version();"
28 version
29-----------------------------------------------------------------------------------------------------------------------------------
30 PostgreSQL 17.4(Ubuntu 17.4-1.pgdg24.04+2) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04)13.3.0, 64-bit
31(1 row)
32
33root@ubuntu2404:~# su - postgres
34postgres@ubuntu2404:~$ psql
35psql (17.4(Ubuntu 17.4-1.pgdg24.04+2))
36Type "help"for help.
37
38postgres=# help
39You are using psql, the command-line interface to PostgreSQL.
40Type: \copyright for distribution terms
41\h forhelp with SQL commands
42\? forhelp with psql commands
43\g or terminate with semicolon to execute query
44\q to quit
45postgres=# \q在openSUSE上使用系统自带包安装PostgreSQL:
1opensuse15:~ # zypper search "postgresql*-server"
2Loading repository data...
3Reading installed packages...
4
5S | Name | Summary | Type
6--+---------------------+-----------------------------------------------------------+--------
7| postgresql-server | The Programs Needed to Create and Run a PostgreSQL Server | package
8| postgresql10-server | The Programs Needed to Create and Run a PostgreSQL Server | package
9| postgresql12-server | The Programs Needed to Create and Run a PostgreSQL Server | package
10| postgresql13-server | The Programs Needed to Create and Run a PostgreSQL Server | package
11| postgresql14-server | The Programs Needed to Create and Run a PostgreSQL Server | package
12| postgresql15-server | The Programs Needed to Create and Run a PostgreSQL Server | package
13| postgresql16-server | The Programs Needed to Create and Run a PostgreSQL Server | package
14| postgresql17-server | The Programs Needed to Create and Run a PostgreSQL Server | package
15
16opensuse15:~ # zypper install -y postgresql17-server
17
18opensuse15:~ # systemctl enable --now postgresql
19
20opensuse15:~ # sudo -u postgres psql -c "SELECT version();"
21 version
22--------------------------------------------------------------------------------------
23 PostgreSQL 17.6 on x86_64-suse-linux-gnu, compiled by gcc (SUSE Linux)7.5.0, 64-bit
24(1 row)
25
26opensuse15:~ # su - postgres
27postgres@opensuse15:~> psql
28psql (17.6)
29Type "help"for help.
30
31postgres=# help
32You are using psql, the command-line interface to PostgreSQL.
33Type: \copyright for distribution terms
34\h forhelp with SQL commands
35\? forhelp with psql commands
36\g or terminate with semicolon to execute query
37\q to quit
38postgres=# \q原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。