收集云服务器优惠信息
记录云服务器使用心得

Ubuntu 24.04 LTS安装和使用PostgreSQL 18详细过程步骤

PostgreSQL(简称Postgres)是一个开源、功能强大、先进、高性能且稳定的关系文档数据库系统,它扩展了SQL语言,并包含一系列用于安全数据存储和管理的功能。

PostgreSQL高效、可靠且可扩展,能够处理大量复杂的数据,并建立企业级和容错环境,同时确保高数据完整性。此外,它还具有高度可扩展性,具备高级索引、全文搜索等功能,并提供API,以便用户可以开发自己的解决方案来处理数据存储方面的挑战。

在本文中,小编将详细介绍在Ubuntu 24.04 LTS服务器上安装PostgreSQL 18 (已于2025年9月25日发布),并学习有效使用它的基本方法。

Ubuntu 24.04安装PostgreSQL

PostgreSQL默认随所有Ubuntu版本一同预装。不过,Ubuntu所包含的是PostgreSQL的特定 “快照版本”,该版本在该Ubuntu发行版的整个生命周期内都保持不变。

如果你希望使用更新的PostgreSQL版本,可以借助以下自动化的仓库配置脚本,它会自动设置官方的PostgreSQL Apt仓库:

sudo apt install -y postgresql-common ca-certificates
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

现在更新软件包列表并安装PostgreSQL (当前最新版本为PostgreSQL 18 ):

sudo apt update
sudo apt install postgresql-18 postgresql-contrib-18

Ubuntu安装PostgreSQL 18

安装pgAdmin 4以进行PostgreSQL管理

如果你更喜欢使用图形界面来管理PostgreSQL数据库,那么可以安装pgAdmin 4,这是官方的PostgreSQL管理工具,允许你通过基于Web的仪表板管理数据库、用户、查询等。

Ubuntu 24.04系统上,默认存储库中没有pgAdmin 4,因此将使用官方的pgAdmin存储库,命令如下:

sudo apt install -y curl ca-certificates gnupg
curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'

添加pgAdmin存储库后,即可按照如下所示方式安装pgAdmin 4:

# 同时安装到桌面和网页模式
sudo apt install pgadmin4

# 仅安装于桌面模式
sudo apt install pgadmin4-desktop

# 仅安装于网页模式
sudo apt install pgadmin4-web

# 如果安装了pgadmin4-web,请配置Web服务器:
sudo /usr/pgadmin4/bin/setup-web.sh

安装完成后,PostgreSQL服务应该会自动启动,可以通过运行以下命令确认其状态:

sudo systemctl status postgresql

要启用PostgreSQL在启动时自动启动(如果尚未启用的话):

sudo systemctl enable postgresql

运行此命令后,可以在浏览器中打开pgAdmin :

http://127.0.0.1/pgadmin4

pgAdmin PostgreSQL管理工具

关于PostgreSQL角色和数据库

PostgreSQL中,客户端身份验证由配置文件/etc/postgresql/18/main/pg_hba.conf控制(版本号可能因安装而异)。

默认的认证方式对数据库管理员而言是"peer",这意味着它会获取客户端的操作系统用户名,并检查该用户名是否与请求的数据库用户名匹配,以允许本地连接访问。

在安装过程中,会创建了一个名为“postgres”的系统用户帐户,但没有设置密码,该帐户也是默认的数据库管理员用户名。

sudo nano /etc/postgresql/18/main/pg_hba.conf

1、了解PostgreSQL角色

PostgreSQL中,数据库访问权限管理是通过角色来实现的。角色可以被视为单个数据库用户,也可以被视为一组数据库用户,具体取决于角色的设置方式。

默认角色也是postgres。重要的是,据库角色在概念上与操作系统用户完全无关,但在实际应用中它们可能存在关联(尤其是出于认证目的)。角色可以:

  • 拥有数据库对象(表、视图、函数等)
  • 将这些对象的权限分配给其他角色
  • 将角色成员资格授予另一个角色(角色继承)

2、为PostgreSQL角色启用加密密码

要配置角色以使用加密密码而不是peer身份验证,则需要修改pg_hba.conf文件。将认证方式从peer更改为scram-sha-256(现代安全方法),或改为md5以使用密码认证。

sudo nano /etc/postgresql/18/main/pg_hba.conf

找出类似以下的行:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     peer

改为:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer
local   all             all                                     scram-sha-256

这样既能保留postgres用户的peer身份验证,又能要求其他用户使用密码认证。

配置带有加密密码的PostgreSQL角色

然后重启PostgreSQL服务以使更改生效:

sudo systemctl restart postgresql

在Ubuntu上使用PostgreSQL

一切设置完毕后,这时可以使用以下命令访问postgres系统帐户,其中-i标志告诉sudo以登录shell的形式运行目标用户的密码数据库条目所指定的shell:

sudo -i -u postgres
psql    # to launch the postgres shell program

要直接访问postgres shell,而无需先访问postgres用户帐户,请运行以下命令:

sudo -u postgres psql

你可以通过输入\q或按Ctrl+D来退出postgres shell:

\q

登录PostgreSQL系统帐户

1、创建PostgreSQL数据库角色

使用以下命令创建新的用户角色:

CREATE ROLE ecscoupon;

要创建具有LOGIN属性的角色(具有LOGIN属性的角色可以视为与数据库用户相同):

CREATE ROLE ecscoupon LOGIN;

或者使用CREATE USER命令,该命令默认包含登录功能:

CREATE USER ecscoupon;

2、创建带密码的角色

角色还可以设置密码,如果你将客户端身份验证方法配置为需要加密密码,则此操作至关重要:

CREATE ROLE ecscoupon WITH LOGIN PASSWORD 'secure_password_here';

或者使用CREATE USER语法:

CREATE USER ecscoupon WITH PASSWORD 'secure_password_here';

3、创建具有额外权限的角色

你可以创建具有超级用户权限的角色(请谨慎使用):

CREATE ROLE admin WITH LOGIN PASSWORD 'admin_password' SUPERUSER;

或者创建一个可以创建数据库的角色:

CREATE ROLE developer WITH LOGIN PASSWORD 'dev_password' CREATEDB;

4、列出现有的PostgreSQL数据库角色

要列出现有用户角色,请使用以下任一命令:

\du    -- 显示实际用户及其详细信息

或者:

SELECT rolname FROM pg_roles;

查看更多详细信息,输入以下命令:

\du+

5、修改PostgreSQL数据库角色

更改角色密码,请输入以下命令:

ALTER ROLE ecscoupon WITH PASSWORD 'new_password';

向现有角色授予超级用户权限:

ALTER ROLE ecscoupon WITH SUPERUSER;

撤销超级用户权限:

ALTER ROLE ecscoupon WITH NOSUPERUSER;

6、删除PostgreSQL数据库角色

要删除现有用户角色,请使用DROP ROLE命令:

DROP ROLE ecscoupon;

注意:你不能删除拥有数据库对象的角色,必须先重新分配这些对象的所有权或删除这些对象。

7、创建PostgreSQL数据库

创建具有特定名称(例如ecscoupon用户)的角色后,就可以创建一个由该角色管理的数据库:

CREATE DATABASE ecscoupon;

创建由特定角色拥有的数据库:

CREATE DATABASE ecscoupon OWNER ecscoupon;

要创建具有特定编码的数据库:

CREATE DATABASE ecscoupon ENCODING 'UTF8' LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' OWNER ecscoupon;

8、授予角色权限

创建数据库后,授予该角色所有权限:

GRANT ALL PRIVILEGES ON DATABASE ecscoupon TO ecscoupon;

现在要管理数据库ecscoupon,请以ecscoupon角色访问postgres shell

psql -U ecscoupon -d ecscoupon

如果系统提示输入密码,请输入你为该角色设置的密码。

9、创建PostgreSQL表

例如这里将创建一个名为authors的测试表,其中存储ecscoupon.com有关作者的信息

CREATE TABLE authors (
    code      SERIAL PRIMARY KEY,
    name      VARCHAR(40) NOT NULL,
    city      VARCHAR(40) NOT NULL,
    joined_on DATE NOT NULL
);

注意:这里使用SERIAL作为主键,它会自动生成连续的数字,这比手动分配编号更实用。

10、将数据插入PostgreSQL表

创建表格后,向其中填充一些数据:

INSERT INTO authors (name, city, joined_on) VALUES 
    ('Ravi Saive', 'Mumbai', '2022-08-15'),
    ('Aaron Kili', 'Nairobi', '2024-03-20'),
    ('Matei Cezar', 'Bucharest', '2025-06-10');

11、从PostgreSQL表中查询数据

要查看表中存储的数据,请运行SELECT命令:

SELECT * FROM authors;

针对特定列:

SELECT name, city FROM authors;

带过滤功能:

SELECT * FROM authors WHERE city = 'Mumbai';

顺序方式:

SELECT * FROM authors ORDER BY joined_on DESC;

12、更新PostgreSQL表中的数据

修改现有数据:

UPDATE authors SET city = 'Delhi' WHERE name = 'Ravi Saive';

13、从PostgreSQL表中删除数据

要删除特定行:

DELETE FROM authors WHERE name = 'Ravi Saive';

14、列出PostgreSQL数据库表

你可以使用以下命令列出当前数据库中的所有表:

\dt

更多详细信息:

\dt+

查看表结构:

\d authors

15、修改PostgreSQL表结构

向现有表中添加新列:

ALTER TABLE authors ADD COLUMN email VARCHAR(100);

删除列:

ALTER TABLE authors DROP COLUMN email;

重命名列:

ALTER TABLE authors RENAME COLUMN code TO author_id;

16、删除/丢弃PostgreSQL表

要删除当前数据库中的表:

DROP TABLE authors;

级联删除(移除依赖对象):

DROP TABLE authors CASCADE;

17、列出所有PostgreSQL数据库

要列出所有数据库,请使用以下任一命令:

SELECT datname FROM pg_database;

或者,需要更详细的描述:

\list

或者简写为:

\l

18、删除/丢弃PostgreSQL数据库

如果要删除数据库:

DROP DATABASE ecscoupon;

警告:此操作将永久删除数据库中的所有数据。

19、切换到另一个PostgreSQL数据库

可以轻松地在不同的数据库之间切换:

\connect database_name

或者简写为:

\c database_name

配置PostgreSQL以进行远程访问

默认情况下,PostgreSQL只接受来自localhost的连接。要允许远程连接,需要编辑postgresql.conf文件:

sudo nano /etc/postgresql/18/main/postgresql.conf

找出这行:

#listen_addresses = 'localhost'

改为:

listen_addresses = '*'

接下来,编辑pg_hba.conf文件:

sudo nano /etc/postgresql/18/main/pg_hba.conf

添加一行代码以允许来自你的网络连接(将192.168.1.0/24替换为你的网络):

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             192.168.1.0/24          scram-sha-256

或者允许来自任何IP地址的请求(安全性较低):

host    all             all             0.0.0.0/0               scram-sha-256

允许PostgreSQL通过防火墙:

sudo ufw allow 5432/tcp

最后,重启PostgreSQL:

sudo systemctl restart postgresql

PostgreSQL基本性能调优

为了在Ubuntu 24.04上获得更好的性能,请考虑调整postgresql.conf设置

sudo nano /etc/postgresql/18/main/postgresql.conf

建议更改(根据服务器内存进行调整):

shared_buffers = 256MB              # 大概内存的25%
effective_cache_size = 1GB          # 大概内存的50-75%
maintenance_work_mem = 64MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 4MB

更改完成后,请重启PostgreSQL:

sudo systemctl restart postgresql

备份和恢复PostgreSQL数据库

备份单个数据库:

pg_dump -U postgres tecmint > tecmint_backup.sql

备份所有数据库:

pg_dumpall -U postgres > all_databases_backup.sql

恢复数据库:

psql -U postgres tecmint < tecmint_backup.sql

实用PostgreSQL命令参考

以下是常用PostgreSQL命令,可供参考:

命令 描述
\l或者\list 列出所有数据库
\c dbname 连接到数据库
\dt 列出所有表格
\d tablename 描述表格结构
\du 列出所有角色/用户
\dn 列出所有模式
\df 列出所有函数
\dv 列出所有视图
\timing 切换查询时序
\x 切换展开显示
\i filename 从文件中执行命令
\q 退出psql
\h SQL命令帮助
\? psql命令帮助

小结

以上主要介绍Ubuntu 24.04 LTS安装和使用PostgreSQL数据库管理系统,主要涵盖了安装、用户管理、数据库操作、远程访问配置、性能调优以及备份策略等内容,内容仅供参考。
赞(0)
网站声明:本文内容由趣云笔记原创,部分资源收集于网络,如有侵权请联系企鹅:2472781824删除。
文章名称:《Ubuntu 24.04 LTS安装和使用PostgreSQL 18详细过程步骤》
文章链接:https://www.ecscoupon.com/18180.html
本站资源仅供个人学习交流,未经允许不得转载,更不允许用于商业用途。如需转载,请注明来源,感谢理解!