如何在 Ubuntu 上安装 PostgreSQL

简介

PostgreSQL,通常简称为 Postgres,是一个开源的对象关系型数据库管理系统。它以其可靠性、功能健壮性以及对 SQL 标准的遵循而赢得了良好的声誉。其关键特性包括可靠的事务处理(ACID 兼容性)和无需读取锁的高并发性,使其成为复杂、数据驱动型应用的热门选择。

本快速入门指南将重点介绍在 Ubuntu 系统上启动并运行 PostgreSQL 服务器的基本步骤。我们将逐步讲解如何安装必要的软件包,使用默认的"角色"系统进行身份验证,以及创建一个新的角色和数据库。如需更深入地了解配置、安全和管理,请参阅完整的教程《如何在 Ubuntu 22.04 上安装和使用 PostgreSQL》。

通过 DigitalOcean Managed Database 简化 PostgreSQL 数据库的创建。只需几分钟即可创建一个 PostgreSQL 数据库,让 DigitalOcean 为您处理数据迁移、升级、维护和安全。
核心要点:

  • 您可以使用 apt 包管理器在 Ubuntu 上安装 PostgreSQL。sudo apt install postgresql postgresql-contrib 命令会安装数据库服务器和一些额外的实用工具。
  • PostgreSQL 使用"角色"系统进行身份验证。默认情况下,它设置为使用 ident 身份验证,这意味着它会将数据库角色与一个匹配的 Linux 系统用户账户关联起来。
  • 安装过程会创建一个默认的 postgres 用户账户。您可以通过运行 sudo -u postgres psql 以此管理用户身份访问 PostgreSQL 提示符。
  • 您可以在终端中使用辅助脚本 createusercreatedb 来添加新的角色和数据库。或者,您也可以在 psql shell 中使用 SQL 命令 CREATE ROLECREATE DATABASE,这在设置密码时是必需的。
  • 远程连接默认是禁用的。要启用它们,您必须更新 postgresql.conf 中的 listen_addresses 设置,在 pg_hba.conf 中为远程用户和 IP 添加基于主机的身份验证规则(使用像 scram-sha-256 这样的密码方法),并在防火墙中开放端口 5432
  • 有两种主要的备份策略。第一种是使用 pg_dump 工具进行逻辑备份,它会生成一个 SQL 命令文件来恢复数据库。第二种是使用物理备份和预写日志(WAL)以实现时间点恢复(PITR)的高级策略。

准备

  • 一台云服务器

如果没有,可以前往 雨云- 新一代云服务提供商 进行注册,新用户有五折优惠。

全产品线路优化:

  1. 香港CN2三网直连,延迟低至35ms;
  2. 美国(CMI+9929),延迟低至140ms;
  3. 日本东京三网直连,延迟低至60ms;

更有国内:浙江宁波、广东深圳、广东广州、湖北襄阳、江苏宿迁、重庆电信 地区服务器,价格平民,质量优质,CPU强劲。

拥有:云应用、云服务器、游戏云、显卡云、对象存储、裸金属物理机、域名服务、SSL证书、虚拟主机、雨盾CDN 产品!

新用户更有五折券优惠,支持一元试用!点击进行注册


前提条件

要学习本教程,您需要一台已按照我们的Ubuntu 初始服务器设置指南配置好的 Ubuntu 服务器。完成此前提条件教程后,您的服务器应该有一个具有 sudo 权限的非 root 用户和一个基本的防火墙。

步骤 1 --- 安装 PostgreSQL

要安装 PostgreSQL,首先刷新您服务器的本地包索引:

bash 复制代码
$ sudo apt update

然后,安装 postgres 包以及一个 -contrib 包,后者会添加一些额外的实用工具和功能:

bash 复制代码
$ sudo apt install postgresql postgresql-contrib

您可以通过运行以下命令来检查版本:

bash 复制代码
$ psql --version

确保服务已启动:

bash 复制代码
$ sudo systemctl start postgresql.service

步骤 2 --- 使用 PostgreSQL 角色和数据库

默认情况下,Postgres 使用一种称为"角色"的概念来处理身份验证和授权。在某些方面,这些角色类似于常规的 Unix 风格的用户和组。

安装后,Postgres 被设置为使用 ident 身份验证,这意味着它将 Postgres 角色与一个匹配的 Unix/Linux 系统账户关联起来。如果 Postgres 中存在一个角色,那么同名的 Unix/Linux 用户名就能够以该角色登录。

安装过程创建了一个名为 postgres 的用户账户,它与默认的 Postgres 角色相关联。有几种方法可以利用这个账户来访问 Postgres。一种方法是在您的服务器上切换到 postgres 账户,运行以下命令:

bash 复制代码
$ sudo -i -u postgres

然后您可以通过运行以下命令来访问 Postgres 提示符:

bash 复制代码
$ psql

这将会将您登录到 PostgreSQL 提示符,从这里您可以立即与数据库管理系统进行交互。

要退出 PostgreSQL 提示符,请运行以下命令:

bash 复制代码
postgres=# \\q

这会带您回到 postgres 用户的 Linux 命令提示符。要返回到您的常规系统用户,请运行 exit 命令:

bash 复制代码
postgres@server:~$ exit

另一种连接到 Postgres 提示符的方法是直接使用 sudopostgres 账户运行 psql 命令:

bash 复制代码
$ sudo -u postgres psql

这会直接将您登录到 Postgres,而无需中间的 bash shell。

同样,您可以通过运行以下命令退出交互式 Postgres 会话:

bash 复制代码
postgres=# \\q

步骤 3 --- 创建一个新角色

如果您以 postgres 账户登录,可以通过运行以下命令来创建一个新角色:

bash 复制代码
postgres@server:~$ createuser --interactive

或者,如果您更喜欢在不切换账户的情况下为每个命令使用 sudo,请运行:

bash 复制代码
$ sudo -u postgres createuser --interactive

无论哪种方式,该脚本都会提示您一些选项,并根据您的回答执行正确的 Postgres 命令来创建符合您要求的用户。

bash 复制代码
Output
Enter name of role to add: sammy
Shall the new role be a superuser? (y/n) y

步骤 4 --- 创建一个新数据库

Postgres 身份验证系统默认的另一个假设是,对于任何用于登录的角色,该角色都会有一个同名的数据库可以访问。

这意味着,如果您在上一节中创建的用户名为 sammy ,那么该角色将默认尝试连接到也名为 "sammy" 的数据库。您可以使用 createdb 命令创建相应的数据库。

如果您以 postgres 账户登录,您可以输入类似以下的内容:

bash 复制代码
postgres@server:~$ createdb sammy

或者,如果您更喜欢在不切换账户的情况下为每个命令使用 sudo,您可以运行:

bash 复制代码
$ sudo -u postgres createdb sammy

步骤 5 --- 使用 SQL 方法创建新用户和数据库(可选)

createusercreatedb 这两个 shell 命令是非常方便的辅助工具。然而,为了获得更多的控制权,您可以直接在 PostgreSQL 中使用 SQL 命令来执行相同的操作。当需要从一开始就设置密码或授予特定权限时,这种方法通常更清晰。

  1. 首先,以管理员 postgres 用户身份连接:

    bash 复制代码
    $ sudo -u postgres psql

    进入 PostgreSQL 提示符后,您可以使用 CREATE ROLECREATE DATABASE 来设置您的新用户和数据库。

  2. 创建一个新角色(用户): createuser shell 命令是交互式的,而 CREATE ROLE 命令允许您在一个语句中定义所有内容。要创建一个名为 sammy 、可以登录(LOGIN)并有密码的用户,请运行:

    bash 复制代码
    postgres=# CREATE ROLE sammy WITH LOGIN PASSWORD 'your_strong_password';

    如果这个用户还需要创建数据库,您可以在创建时同时授予该权限:

    bash 复制代码
    postgres=# CREATE ROLE sammy WITH LOGIN PASSWORD 'your_strong_password' CREATEDB;

    这相当于在交互式辅助工具中对超级用户问题回答"yes",尽管 SUPERUSER 是一个更广泛且更危险的权限。如果用户只需要创建数据库,授予 CREATEDB 会更安全。

  3. 创建一个新数据库: 接下来,创建数据库。一个好的做法是将新数据库的所有权分配给您刚刚创建的新角色。

    bash 复制代码
    postgres=# CREATE DATABASE sammydb OWNER sammy;

    如果您已经连接到 sammy 数据库,并希望将该数据库上的所有权限授予 sammy 用户,您可以运行:

    bash 复制代码
    postgres=# GRANT ALL PRIVILEGES ON DATABASE sammydb TO sammy;
  4. 退出 postgres 会话: 现在您可以退出 postgres 用户的 psql 提示符了。

    bash 复制代码
    postgres=# \\q

由于您设置了密码,这个新用户可以使用 ident 以外的方法进行身份验证,这对于远程连接是必需的。

步骤 6 --- 使用新角色打开 Postgres 提示符

要使用基于 ident 的身份验证登录,您需要一个与您的 Postgres 角色和数据库同名的 Linux 用户。

如果您没有一个匹配的 Linux 用户,您可以使用 adduser 命令创建一个。您需要从具有 sudo 权限的非 root 账户(即未登录为 postgres 用户)来执行此操作:

bash 复制代码
$ sudo adduser sammy

一旦这个新账户可用,您可以切换用户并连接到数据库,方法如下:

bash 复制代码
$ sudo -i -u sammy
$ psql

或者,您可以内联执行:

bash 复制代码
$ sudo -u sammy psql

假设所有组件都已正确配置,此命令将自动将您登录。

如果您希望您的用户连接到不同的数据库,可以通过指定数据库名称来实现,如下所示:

bash 复制代码
$ psql -d postgres

登录后,您可以通过运行以下命令检查当前的连接信息:

bash 复制代码
sammy=# \\conninfo
bash 复制代码
Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

安全地启用远程访问

默认情况下,PostgreSQL 只监听来自本地机器(localhost)的连接。要允许其他计算机连接到您的数据库,您必须执行三个步骤:

  1. 配置 PostgreSQL 以监听其公共 IP 地址。
  2. 添加一个基于主机的身份验证(HBA)规则,以允许您的用户的远程连接。
  3. 在您服务器的防火墙中打开端口 5432

步骤 1: 编辑 postgresql.conf

首先,找到您的主 PostgreSQL 配置文件。在 Ubuntu 上,它通常位于 /etc/postgresql/17/main/postgresql.conf。版本号(例如 17)可能会有所不同。

bash 复制代码
$ sudo nano /etc/postgresql/17/main/postgresql.conf

在此文件中,找到 listen_addresses 这一行。默认情况下,它被设置为 localhost

bash 复制代码
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = 'localhost'    # what IP address(es) to listen on;

localhost 更改为 * 以监听所有可用的 IP 地址,或者为了更具体,可以设置为您服务器的公共 IP 地址。

bash 复制代码
listen_addresses = '*'

保存并关闭文件。

步骤 2: 编辑 pg_hba.conf

接下来,您必须配置"基于主机的身份验证"文件 pg_hba.conf,以告诉 PostgreSQL 如何 验证远程用户。

bash 复制代码
$ sudo nano /etc/postgresql/17/main/pg_hba.conf

在此文件的底部,添加新的一行以允许来自特定 IP 地址的用户连接。ident 方法不适用于远程 TCP/IP 连接。您必须使用基于密码的方法,如 scram-sha-256md5

bash 复制代码
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# Example for remote access:
host    sammydb         sammy           198.51.100.5/32         scram-sha-256

让我们来分解这行配置:

  • host: 指定使用 TCP/IP 套接字(网络连接)的连接。
  • sammydb: 数据库名称。
  • sammy: 角色(用户)名称。
  • 198.51.100.5/32: 远程机器的 IP 地址。/32 表示此规则仅适用于这一个 IP。使用 198.51.100.0/24 可以允许该子网中的所有 IP。切勿在生产环境中使用 0.0.0.0/0
  • scram-sha-256: 一种安全的、现代的基于密码的身份验证方法。这要求您的用户必须有密码 ,您可以使用 SQL 方法设置(CREATE ROLE ... PASSWORD ...ALTER ROLE sammy WITH PASSWORD 'new_password';)。

警告: 切勿在脚本或文档中硬编码密码。上面的 'new_password' 是一个占位符------请始终使用强大、唯一的密码,并安全地管理它(例如,使用密码管理器或环境变量)。避免在版本控制或公共场所共享或存储明文密码。

步骤 3: 开放防火墙并重启服务

更新配置文件后,通过 UFW 允许 5432 端口的流量:

bash 复制代码
$ sudo ufw allow 5432/tcp

最后,重启 PostgreSQL 服务以应用所有更改:

bash 复制代码
$ sudo systemctl restart postgresql

现在,您可以从您的远程机器(例如 198.51.100.5)测试连接:

bash 复制代码
$ psql -h your_server_ip -U sammy -d sammydb

系统会提示您输入为 sammy 角色设置的密码。

备份与恢复

对于任何数据库来说,定期的备份策略都是不可或缺的。PostgreSQL 提供了两种主要的备份方法:逻辑备份和物理备份。

使用 pg_dump 进行逻辑备份

pg_dump 工具通过生成一个包含 SQL 命令的文件来创建"逻辑"备份。当运行这个文件时,它会重新创建数据库、表和数据。

  • 优点:灵活,人类可读(作为纯文本),可以恢复到不同的机器架构或 PostgreSQL 主版本上。非常适合单个数据库。
  • 缺点:对于非常大的数据库可能会很慢。

备份单个数据库: 自定义格式(-F c)是经过压缩的,并且是大多数用例推荐的格式。

bash 复制代码
$ pg_dump -U sammy -W -F c -f sammydb.dump sammydb
  • U sammy: 以 sammy 用户身份连接。
  • W: 提示输入用户密码。
  • F c: 以自定义(压缩)格式输出。
  • f sammydb.dump: 将输出写入名为 sammydb.dump 的文件。
  • sammydb: 要备份的数据库名称。

从自定义格式的转储中恢复: 您必须使用 pg_restore 工具。如果数据库 newdb 已经存在并且其中有表,则此命令将起作用。

  • 首先,创建一个新的空数据库:

    bash 复制代码
    $ createdb -U sammy newdb
  • 然后,将转储恢复到其中:

    bash 复制代码
    $ pg_restore -U sammy -W -d newdb sammydb.dump
  • d newdb: 恢复到名为 newdb 的数据库中。

物理备份与时间点恢复 (PITR)

物理备份是整个数据库集群数据文件的二进制级别副本。此方法与预写日志(WAL)结合使用,以实现时间点恢复(PITR)

PITR 允许您将数据库恢复到自上次基础备份以来的任何特定时刻(例如,恢复到用户意外删除一个主要表的前五分钟)。

这是一个高级策略,包含两个主要组成部分:

  1. 基础备份 :使用像 pg_basebackup 这样的工具对数据库进行完整的物理复制。
  2. WAL 归档:将数据库配置为持续将其事务日志(WAL 文件)复制到单独的存储位置。

要启用此功能,您必须编辑 postgresql.conf

bash 复制代码
wal_level = replica       # WAL 归档的最低级别
archive_mode = on         # 启用归档
archive_command = 'cp %p /path/to/wal/archive/%f'  # 复制 WAL 文件的命令

archive_command 是一个简单的示例;生产环境的设置使用更可靠的工具,如 wal-gpgBackRest 来管理此过程。

安全加固

除了前面讨论的安全远程访问设置外,生产数据库还需要几个额外的安全层。

强制使用 SSL/TLS 连接

如果您通过网络传输敏感数据,则必须加密连接。

  1. postgresql.conf启用 SSL :取消注释 ssl 行并将其设置为 on。您还必须提供证书和私钥文件的路径。

    bash 复制代码
    # - SSL -
    ssl = on
    ssl_cert_file = '/etc/ssl/certs/your_server_cert.pem'
    ssl_key_file = '/etc/ssl/private/your_server_key.key'

    对于测试,您可以生成自签名证书,但对于生产环境,应使用来自受信任机构的证书。

  2. pg_hba.conf 中强制使用 SSL :要要求 远程连接使用 SSL,请将 host 记录类型更改为 hostssl。使用 host 的连接可以使用 SSL,但不是强制性的。如果 hostssl 连接不使用 SSL,则会被拒绝。

    bash 复制代码
    # TYPE     DATABASE        USER            ADDRESS                 METHOD
    
    # 如果不使用 SSL 则拒绝
    hostssl    sammydb         sammy           198.51.100.5/32         scram-sha-256
    
    # 允许本地连接不使用 SSL(可选)
    host       all             all             127.0.0.1/32            scram-sha-256

最小权限原则

切勿为您的应用程序使用 postgres 超级用户角色。此角色可以绕过所有权限并删除整个数据库集群。

相反,应为每个应用程序或用户创建特定的角色,仅授予他们所需的权限。

示例: 为分析应用程序创建一个只读用户。

  1. 创建角色。此角色不能登录。

    bash 复制代码
    postgres=# CREATE ROLE analytics_user;
  2. 授予其对数据库的 CONNECT 访问权限。

    bash 复制代码
    postgres=# GRANT CONNECT ON DATABASE sammydb TO analytics_user;
  3. 授予其对模式(例如 public 模式)的 USAGE 权限。

    bash 复制代码
    postgres=# GRANT USAGE ON SCHEMA public TO analytics_user;
  4. 授予其对特定表的 SELECT 权限。

    bash 复制代码
    postgres=# GRANT SELECT ON my_table, another_table TO analytics_user;

审计

您可以通过在 postgresql.conf 中设置参数来记录数据库活动。这对于跟踪更改或调查问题很有用。

参数 描述
log_statement ddl 记录所有数据定义语言(DDL)命令,如 CREATEALTERDROP
log_statement mod 记录所有 DDL 以及 数据操作语言(DML)命令,如 INSERTUPDATEDELETE
log_connections on 记录所有成功的连接尝试。
log_disconnections on 记录每个会话的结束,显示其持续时间。

要进行更详细的审计,请考虑使用 pgaudit 扩展,它提供了对会话和对象级别活动的细粒度日志记录。

常见设置陷阱

虽然安装过程很简单,但新用户经常会遇到与 PostgreSQL 独特的身份验证模型相关的问题。以下是最常见的陷阱及其解决方案。

陷阱 1: FATAL: Peer authentication failed for user "sammy" (用户 "sammy" 的对等身份验证失败)

这是最常见的错误。当您尝试以某个用户(例如 psql -U sammy)连接,但您当前的 Linux 用户名与请求的 PostgreSQL 角色不匹配时,就会发生此错误。

  • 原因: 默认情况下,PostgreSQL 设置为使用 ident 身份验证,在 pg_hba.conf 文件中别名为 peer。此方法要求您的操作系统用户名与 PostgreSQL 角色名称匹配才能进行本地连接。
  • 解决方案: 不要以您的普通用户身份连接。相反,使用 sudo 以匹配的操作系统用户身份运行命令。
    1. 首先,确保名为 sammy 的 PostgreSQL 角色存在(步骤 3)。
    2. 其次,确保名为 sammy 的 Linux 用户存在(步骤 5)。
    3. 最后,使用 sudo -u sammy psql 进行连接。此命令会自动登录,因为操作系统用户"sammy"与 Postgres 角色"sammy"匹配。

陷阱 2: FATAL: role "sammy" does not exist (角色 "sammy" 不存在)

这是一个更简单的问题。这意味着您正在尝试使用一个尚未在 PostgreSQL 中创建的角色登录。

  • 原因: 您可能已经创建了 Linux 用户 adduser sammy,但忘记了创建相应的 PostgreSQL 角色 createuser sammy
  • 解决方案: 以默认的 postgres 用户身份登录,并如步骤 3 所示创建角色。

陷阱 3: 防火墙阻止连接

如果您已启用防火墙(如前提条件中所建议),它可能会阻止连接。

  • 原因: UFW(Uncomplicated Firewall)已激活,但未配置为允许 PostgreSQL 流量。

  • 解决方案: 这仅影响远程连接。通过默认 Unix 套接字的本地连接不会被 UFW 阻止。如果您打算启用远程访问,则必须明确允许 PostgreSQL 默认端口 5432 上的流量。

    bash 复制代码
    $ sudo ufw allow 5432/tcp

    仅在您有意且安全地启用远程访问时才运行此命令。

主要设置差异:PostgreSQL vs. MySQL

虽然两者都是关系型数据库,但它们在 Ubuntu 上的初始设置和身份验证模型有显著不同。

特性 PostgreSQL (在 Ubuntu 上) MySQL (在 Ubuntu 上)
默认用户 创建一个 postgres 角色。 创建一个 root 用户。
初始认证 使用 ident (或 peer) 认证。要求匹配操作系统用户 (sudo -u postgres psql)。默认不设置密码。 root 用户使用 auth_socket 插件。需要 sudo mysql 登录。使用 mysql_secure_installation 脚本设置 root 密码。
Shell 辅助工具 提供 createusercreatedb 包装脚本以方便使用。 没有直接的 shell 等价物。mysql_secure_installation 脚本用于安全设置,而非用户管理。
用户概念 使用**"角色"**。一个角色可以是用户、组或两者兼具。 使用**"用户"**。权限授予用户 (user@host)。
配置文件 配置是分开的:postgresql.conf (用于服务器设置) 和 pg_hba.conf (用于认证规则)。 配置集中在 my.cnf (或 /etc/mysql/mysql.conf.d/mysqld.cnf)。
远程访问 默认关闭。需要编辑两个 文件 (postgresql.conf, pg_hba.conf) 并设置用户密码。 默认关闭 (bind-address = 127.0.0.1)。需要编辑一个 文件 (mysqld.cnf) 并运行 GRANT 命令来创建远程用户。

主要结论是,PostgreSQL 的设置与本地 Unix 用户和权限紧密相关,这使得它在本地非常安全,但需要更多步骤才能实现远程网络访问。而 MySQL 的模型从一开始就更集中于其 root 用户和密码认证。

常见问题解答

1. 如何检查 PostgreSQL 是否在 Ubuntu 上运行?

您可以使用 systemctl 命令检查 PostgreSQL 服务的状态。

打开您的终端并运行以下命令:

bash 复制代码
$ sudo systemctl status postgresql.service

如果服务处于活动状态,输出将以绿色显示 active (running)。如果它不活动或失败,它将提供其状态的详细信息。

bash 复制代码
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-10-22 14:30:00 IST; 5min ago
   Main PID: 12345 (postgres)
      Tasks: 6 (limit: 4617)
     Memory: 150.0M
     CGroup: /system.slice/postgresql.service
             ├─12345 /usr/lib/postgresql/17/bin/postgres -D /var/lib/postgresql/17/main -c config_file=/etc/postgresql/17/main/postgresql.conf
...

2. 如何连接到 PostgreSQL shell?

您可以使用 psql 命令行工具进行连接。默认情况下,PostgreSQL 使用 ident 认证,这意味着它会将数据库角色与匹配的系统用户账户关联起来。

最简单的连接方式是首先切换到 postgres Linux 用户账户,该账户在安装过程中创建,并拥有对数据库的超级用户访问权限。

  1. 切换到 postgres 用户:

    bash 复制代码
    $ sudo -i -u postgres
  2. 打开 PostgreSQL shell:

    bash 复制代码
    $ psql

您将被登录并看到 postgres=# 提示符。要退出 shell,请输入 \\q 并按 Enter。

3. 如何安全地启用远程连接?

启用远程连接需要两个主要的配置更改:更新服务器的监听地址和为远程用户设置身份验证规则。

  1. 更新 postgresql.conf 首先,找到您的配置文件。它通常位于 /etc/postgresql/<VERSION>/main/postgresql.conf。使用文本编辑器打开此文件:

    bash 复制代码
    $ sudo nano /etc/postgresql/17/main/postgresql.conf

    在文件中,找到 listen_addresses 这一行。默认情况下,它设置为 localhost。要允许来自所有 IP 地址的连接,请将其更改为 '*'

    复制代码
    #------------------------------------------------------------------------------
    # CONNECTIONS AND AUTHENTICATION
    #------------------------------------------------------------------------------
    
    # - Connection Settings -
    
    listen_addresses = '*'        # what IP address(es) to listen on;

    保存并关闭文件。

  2. 更新 pg_hba.conf 接下来,编辑位于同一目录下的"基于主机的身份验证"文件 pg_hba.conf

    bash 复制代码
    $ sudo nano /etc/postgresql/17/main/pg_hba.conf

    在文件底部添加新的一行,以允许特定用户从特定 IP 地址或范围连接。使用安全的密码方法,如 scram-sha-256(对于旧版本,使用 md5)。

    复制代码
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # Allow user 'sammy' to connect from '203.0.113.10' using a password
    host    all             sammy           203.0.113.10/32         scram-sha-256
  3. 设置用户密码: 如果您的数据库用户(如 sammy)没有密码,远程身份验证将失败。连接到 psql 并设置一个密码:

    bash 复制代码
    postgres=# ALTER USER sammy WITH PASSWORD 'your_secure_password';
  4. 允许通过防火墙的流量: 确保您的防火墙允许在 PostgreSQL 默认端口 5432 上的流量。

    bash 复制代码
    $ sudo ufw allow 5432/tcp
  5. 重启服务: 最后,通过重启 PostgreSQL 应用所有更改:

    bash 复制代码
    $ sudo systemctl restart postgresql

4. Ubuntu 上 PostgreSQL 的默认端口是什么?

PostgreSQL 的默认 TCP 端口是 5432

这是服务器"监听"新客户端连接的标准端口。如果服务器上激活了防火墙,您必须打开此端口以允许连接,无论是来自本地机器(对于某些配置)还是来自远程客户端。

5. 如何完全卸载 PostgreSQL?

要完全移除 PostgreSQL,包括其软件包、配置文件和数据,您必须首先卸载软件包,然后手动删除目录。

警告: 此过程不可逆,将永久删除您的所有数据库。在继续之前,请备份您需要保存的任何数据。

  1. 停止 PostgreSQL 服务:

    bash 复制代码
    $ sudo systemctl stop postgresql
  2. 卸载软件包: 使用 apt purge 来移除 PostgreSQL 软件包及其系统范围的配置文件。

    bash 复制代码
    $ sudo apt purge postgresql postgresql-contrib postgresql-17

    如果需要,请将 postgresql-17 替换为您的特定版本。

  3. 移除数据和配置目录: purge 命令不会移除数据库集群数据或主配置目录。您必须手动删除这些:

    bash 复制代码
    $ sudo rm -rf /etc/postgresql/
    $ sudo rm -rf /var/lib/postgresql/

完成这些步骤后,PostgreSQL 将从您的系统中完全移除。

结论

本指南演示了在 Ubuntu 服务器上安装和配置 PostgreSQL 的基本步骤。我们涵盖了软件包安装、使用 ident 身份验证和角色,以及使用 shell 命令和直接 SQL 创建新用户和数据库。我们还探讨了启用远程访问、保护连接和实施基本备份策略的程序。

相关推荐
会飞的土拨鼠呀9 分钟前
Ubuntu系统缺少 iptables 工具
linux·运维·ubuntu
前端玖耀里10 分钟前
详细介绍Linux命令dig和nslookup
linux·运维·服务器
呱呱巨基10 分钟前
Linux 第一个系统程序 进度条
linux·c++·笔记·学习
星期五不见面18 分钟前
jetson naon super使用 sudo /opt/nvidia/jetson-io/jetson-io.py 界面闪退
linux·运维·服务器
fengxin_rou22 分钟前
Redis从零到精通第二篇:redis常见的命令
数据库·redis·缓存
Coder个人博客24 分钟前
Linux6.19-ARM64 mm hugetlbpage子模块深入分析
linux·安全·车载系统·系统架构·系统安全·鸿蒙系统·安全架构
多多*24 分钟前
Mysql数据库相关 事务 MVCC与锁的爱恨情仇 锁的层次架构 InnoDB锁分析
java·数据库·windows·sql·oracle·面试·哈希算法
大数据在线24 分钟前
技术的终极善意:抹平集中式和分布式边界
数据库·信创·pingcap·国产数据库·平凯数据库
FreeBuf_29 分钟前
AutoPentestX:面向 Linux 系统的自动化渗透测试工具包
linux·运维·自动化
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.32 分钟前
Nginx 平滑升级与回滚超详细指南
运维·nginx