如何在 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 创建新用户和数据库。我们还探讨了启用远程访问、保护连接和实施基本备份策略的程序。

相关推荐
徒 花2 小时前
Nginx
运维·nginx·云原生
ShiinaKaze2 小时前
Ubuntu 18.04 XRDP 黑屏
ubuntu·xrdp
小跌—2 小时前
Linux:多路转接
linux·网络
csdn_aspnet2 小时前
如何在 Mac、Ubuntu、CentOS、Windows 上安装 MySQL 客户端
linux·windows·mysql·macos·centos
程序猿追2 小时前
异腾910B NPU实战:vLLM模型深度测评与部署指南
运维·服务器·人工智能·机器学习·架构
铭哥的编程日记2 小时前
【Linux网络】传输层协议UDP
linux·网络·udp
qq_5470261792 小时前
Canal实时同步MySQL数据到Elasticsearch
数据库·mysql·elasticsearch
看我干嘛!3 小时前
GME 和MGRE综合实验
运维·服务器·网络
x_lrong3 小时前
Linux虚拟机配置jupyter环境并在宿主机访问
linux·运维·笔记·jupyter·虚拟机