DBOps

PostgreSQL 数据库操作指南

免费试用

立即开始增强您的 PostgreSQL。

A programmer on his computer working on Postgres database operations

数据库操作涵盖管理和操作数据库中数据的​​所有活动。在本文中,您将具体了解 PostgreSQL 数据库操作。

我们将探讨什么是 PostgreSQL、它的历史以及它的优势。我们还将指导您开始使用 PostgreSQL,涵盖在各种操作系统上的安装、基本和高级数据库操作等等。

让我们开始吧。

什么是 PostgreSQL?

PostgreSQL 是一款先进的开源对象关系型数据库管理系统 (RDBMS)。它的健壮性、可扩展性和灵活性备受推崇,使其成为各种应用程序(从小型项目到大型企业系统)的绝佳选择。与传统的关联数据库不同,PostgreSQL 支持高级数据类型和性能优化功能,提供关联和面向对象数据库世界的最佳功能。

PostgreSQL 的历史

PostgreSQL 的开发始于 1986 年,作为加州大学伯克利分校 POSTGRES 项目的一部分。它旨在通过支持数据类型、对象关系型模型和可扩展性来扩展现有的 Ingres 数据库的功能。

该项目在过去几年中不断发展,并且随着 SQL 语言支持的增加(SQL 代表结构化查询语言),它被更名为 PostgreSQL,以强调其 SQL 功能。PostgreSQL 继续由充满活力且活跃的社区开发和改进,使其成为目前最先进的开源数据库系统之一。

PostgreSQL 的优势

PostgreSQL 提供了无数优势,使其成为全球开发人员和组织的首选。其中一些优势包括

  • 灵活性:PostgreSQL 支持广泛的 数据类型,包括结构化、文档和自定义类型,允许灵活的数据建模。

  • 可扩展性:由于其强大的扩展框架,它可以轻松扩展自定义函数、数据类型、语言等等。

  • 可扩展性:PostgreSQL 旨在有效地处理大量数据和并发用户,使其适合高流量环境。

  • 复制:它支持几种复制技术,包括流复制和逻辑复制,以确保数据可用性和灾难恢复。

比较 PostgreSQL 与其他 DBMS

与 MySQL、MongoDB 和 MariaDB 等其他标准数据库管理系统相比,PostgreSQL 因其高级功能和多功能性而脱颖而出。它提供了对 SQL 标准的全面支持以及 ACID(原子性、一致性、隔离性、持久性)事务,对于复杂且高流量的数据库操作至关重要。

与针对文档存储进行优化的 NoSQL 数据库 MongoDB 不同,PostgreSQL 提供了广泛的功能来处理关系型和非关系型数据模型。与 MySQL 和 MariaDB 相比,PostgreSQL 提供了更多高级功能,例如表分区、复杂数据类型以及更全面的索引选项范围,使其成为处理复杂数据处理和分析任务的强大解决方案。

在以下部分,我们将更深入地探讨如何开始使用 PostgreSQL。

PostgreSQL 入门

在深入了解 PostgreSQL 世界之前,了解先决条件以及如何在各种操作系统上安装 PostgreSQL 至关重要。本节将指导您完成在机器上安装 PostgreSQL 的步骤,无论您使用的是 Windows、Mac 还是 Linux。

安装 PostgreSQL 的先决条件

  • 硬件要求:确保您的系统满足 PostgreSQL 的最低硬件要求(1 核心 CPU,2 个 vCore,1 GiB 内存)。虽然 PostgreSQL 非常高效,可以在适度的硬件上运行,但性能和存储需求会根据您的工作负载而有所不同。

  • 软件要求:您应该具有系统管理员权限才能安装新软件。此外,确保您的系统软件包管理器是最新的(这与 Linux 和 Mac 用户更加相关)。

  • 网络配置:如果您打算通过网络访问您的 PostgreSQL 服务器,请确保您的防火墙和网络设置允许在 PostgreSQL 的默认端口 (5432) 上进行必要的连接。

在 Windows 上安装 PostgreSQL

  1. 下载安装程序:访问 PostgreSQL 官方网站下载 Windows 安装程序 以获取您要安装的版本。

  2. 运行安装程序:执行下载的文件。安装程序包含数据库服务器、pgAdmin(用于数据库管理的图形界面)、命令行工具和必要的驱动程序。

  3. 按照安装向导操作:向导将指导您完成安装。选择要安装的组件、安装文件夹和数据目录。

  4. 设置密码和端口:系统将提示您为默认 PostgreSQL 超级用户 (postgres) 设置密码,并选择端口(默认值为 5432)。

  5. 完成安装:按照其余提示完成安装。然后,您可以使用 pgAdmin 或命令行界面来管理您的 PostgreSQL 数据库。

在 Mac 上安装 PostgreSQL

1. Homebrew 安装:在 Mac 上安装 PostgreSQL 的最简单方法是使用 Homebrew,这是一个用于 macOS 的软件包管理器。打开终端并运行:

brew install postgresql

2. 启动 PostgreSQL:安装完成后,您可以使用以下命令启动 PostgreSQL:

brew services start postgresql

在 Linux 上安装 PostgreSQL

在 Linux 上的安装步骤可能因发行版而异。以下是 Ubuntu/Debian 和 Fedora/CentOS 的命令。

  • Ubuntu/Debian:

1. 更新您的软件包列表:

sudo apt-get update

2. 安装 PostgreSQL:

sudo apt-get install postgresql

3. 启动并启用 PostgreSQL 服务:

sudo systemctl start postgresql
sudo systemctl enable postgresql

  • Fedora/CentOS:

1. 安装 PostgreSQL:

#Fedora 
sudo dnf install postgresql-server
#CentOS
sudo yum install postgresql-server

2. 启动数据库服务并启用自动启动:

sudo systemctl start postgresql
sudo systemctl enable postgresql

接下来,我们将深入探讨 PostgreSQL 的基础知识,包括查询语法、数据类型和操作,帮助您开始数据库管理。

PostgreSQL 基础

本节将介绍 PostgreSQL 中查询语法、数据类型和运算符的基础概念。掌握这些基础知识,您可以高效地执行各种数据库操作。

查询语法

PostgreSQL 的查询语法基于 SQL(结构化查询语言),用于管理和操作数据库。以下是 PostgreSQL 查询的基本结构

SELECT column1, column2, ...
FROM tablename
WHERE condition
ORDER BY column;

  • SELECT 指定查询返回的列。

  • FROM 指示要从中检索数据的表。

  • WHERE 应用条件来筛选返回的行。

  • ORDER BY 根据一个或多个列对结果集进行排序。

示例:假设您有一个名为 employees 的表,包含 idnamedepartment 列。要检索“IT”部门中所有员工的姓名,您将使用以下查询

SELECT name
FROM employees
WHERE department = 'IT';

数据类型

PostgreSQL 支持各种数据类型,允许您存储各种形式的数据。以下是一些您会遇到的常见数据类型

  • 整数:用于存储整数。变体包括 smallintintegerbigint

  • 数字:用于存储带有可选小数位的精确数字数据。使用 numericdecimal

  • 实数和双精度:浮点数使用 realdouble precision 存储。

  • 字符:固定长度 (char) 和可变长度 (varchar) 字符串,以及用于更长文本的 text。

  • 布尔值:存储真值,即真或假。

  • 日期和时间:包括日期、时间、时间戳和间隔。

  • UUID:存储通用唯一标识符。

  • 数组:存储在单个列中的值集合。

  • JSON:存储 JSON 数据,允许高效的数据交换。

示例:如果您要定义一个用于用户信息的表,您可能会使用以下各种数据类型

CREATE TABLE customers (
     customer_id SERIAL PRIMARY KEY,
     name VARCHAR(100),
     email VARCHAR(150) UNIQUE,
     join_date DATE,
     is_active BOOLEAN
 );

运算符

运算符用于对存储在数据库中的数据执行操作。PostgreSQL 支持针对不同数据类型的各种运算符,包括

  • 算术运算符+, -, *, /, % 用于数字计算。

  • 比较运算符=, !=, <, >, <=, >= 用于比较值。

  • 逻辑运算符AND, OR, NOT 用于组合布尔表达式。

  • 字符串运算符|| 用于字符串连接。

  • 模式匹配LIKE, ILIKE(不区分大小写的 LIKE)和 SIMILAR TO 用于匹配字符串模式。

示例:要查找 2024 年注册且活跃的用户,您可能会编写如下查询

SELECT name, email
FROM customers
WHERE join_date BETWEEN '2024-03-01' AND '2024-03-31';

通过了解 PostgreSQL 的查询语法、数据类型和运算符的基础知识,您可以开始探索更复杂的查询和操作。

基本 PostgreSQL 数据库操作

了解 PostgreSQL 中的基本数据库操作对于有效地管理和操作数据至关重要。这些操作包括在数据库中创建、读取、更新和删除数据,通常用首字母缩略词 CRUD 表示。

让我们探索这些操作,以及如何在 PostgreSQL 中使用我们的 ecommerce_db 进行实际操作。

创建、读取、更新、删除数据库操作

创建数据库

创建新数据库是使用 PostgreSQL 的第一步。创建数据库的命令很简单

CREATE DATABASE ecommerce_db;

选择数据库

要开始使用您创建的数据库,您通常需要使用 psql 命令行界面或 pgAdmin 等 GUI 工具连接到它。在 psql 中,您将使用

\c ecommerce_db

此命令将连接切换到 ecommerce_db 数据库。

删除数据库

当不再需要数据库时,您可以使用 DROP DATABASE 命令将其删除

DROP DATABASE ecommerce_db;

请谨慎使用此命令,因为它会永久删除数据库及其所有包含的数据。

创建表

我们已经看到在设置我们的 ecommerce_db 时创建表的示例。以下是带有 customers 表的提醒

CREATE TABLE customers (
    customer_id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(150) UNIQUE,
    join_date DATE
);

删除表

要从数据库中删除表,请使用 DROP TABLE 命令

DROP TABLE tablename;

例如,要删除 customers

DROP TABLE customers;

插入查询

使用 INSERT INTO 语句将数据插入表中。以下是如何添加新客户

 INSERT INTO customers (name, email, join_date)
 VALUES ('New Customer', '[email protected]', '2024-01-01');

选择查询

从表中检索数据是最常见的操作之一。要从 customers 表中选择所有列

SELECT * FROM customers;

要仅选择所有客户的姓名和电子邮件

SELECT name, email FROM customers;

筛选数据

WHERE 子句

WHERE 子句用于筛选满足指定条件的记录。例如,要查找 2024 年 3 月 15 日之后的所有订单

SELECT * FROM orders WHERE order_date > '2024-03-15';

LIMIT 子句

LIMIT 子句用于指定要返回的最大记录数。例如,要获取前五个产品

SELECT * FROM products LIMIT 5;

LIKE 子句

LIKE 子句用于模式匹配。例如,要查找姓名以“J”开头的客户

SELECT * FROM customers WHERE name LIKE 'J%';

ORDER BY

ORDER BY 子句按升序或降序对结果集进行排序。要按加入日期对客户进行排序

SELECT * FROM customers ORDER BY join_date DESC;

GROUP BY

GROUP BY 子句在 SQL 中将具有共同属性的行聚合为摘要行。例如,如果您有兴趣确定每个客户下了多少订单,您可以使用以下子句

SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id;

AND & OR

这些逻辑运算符用于组合多个条件。例如,要查找库存数量大于 5 且价格低于 800 美元的商品

SELECT * FROM products WHERE stock_quantity > 5 AND price < 800;

通过练习这些基本操作和子句,您将能够在 PostgreSQL 中执行各种数据操作任务,为更高级的数据库操作和优化铺平道路。

高级 PostgreSQL 数据库操作

随着您对 PostgreSQL 的基础知识越来越熟悉,您会发现其真正的威力在于其高级功能。这些功能允许进行复杂的查询、数据分析和数据库优化,对于管理大型、动态数据库至关重要。让我们深入探讨其中的一些高级操作。

连接多个表

连接表的目的是根据它们之间相关列的组合数据来自两个或多个表。这在关系数据库中至关重要,在关系数据库中,数据通常被规范化并分布在多个表中,以减少冗余并提高数据完整性。

用例和示例:假设您想列出所有订单以及客户和商品名称。这需要连接 purchasesclientsitems 表。

SELECT p.purchase_id, cl.name AS client_name, it.name AS item_name, p.purchase_date
FROM purchases AS p
INNER JOIN clients AS cl ON p.client_id = cl.client_id
INNER JOIN items AS it ON p.item_id = it.item_id;

在您探索高级数据库操作和性能优化时,了解如何在分布式时间序列数据库环境中实现最佳查询性能至关重要。 了解更多 关于利用 PostgreSQL 来确保分布式系统中高效查询执行的策略。

分组和集合操作

分组和集合操作允许对行集进行聚合计算和操作。

GROUP BY

GROUP BY 将具有相同属性的行分组在一起,以便可以对每个组应用聚合函数。

示例:要查找每个商品的订单总数

SELECT product_id, COUNT(*) AS total_orders
FROM orders
GROUP BY product_id;

HAVING

HAVING 用于根据聚合条件筛选组,类似于 WHERE 筛选行。

示例:要查找订单量超过 5 的商品

SELECT product_id, COUNT(*) AS total_orders
FROM orders
GROUP BY product_id
HAVING COUNT(*) > 5;

UNION

UNION 组合两个或多个 SELECT 语句的结果集(仅包含不同的值)。

示例:如果您有两个来自不同年份的商品表,并且想要一个组合列表

SELECT name FROM products_2023
UNION
SELECT name FROM products_2024;

INTERSECT

INTERSECT 返回两个 SELECT 语句的结果集的交集。

示例:要查找同时出现在 2023 年和 2024 年列表中的商品

SELECT name FROM products_2023
INTERSECT
SELECT name FROM products_2024;

EXCEPT

EXCEPT 返回两个 SELECT 语句的结果集之间的差值。

示例:查找存在于 2023 年列表中但不存在于 2024 年列表中的产品。

SELECT name FROM products_2023
EXCEPT
SELECT name FROM products_2024;

视图

视图是一个虚拟表,基于 SQL 语句的结果集。它提供了一种将复杂查询打包成更简洁形式的方法。

用例:创建您经常查询的汇总表,例如畅销产品列表。

创建视图

CREATE VIEW top_selling_products AS
SELECT product_id, SUM(quantity) AS total_sold
FROM orders
GROUP BY product_id
ORDER BY total_sold DESC
LIMIT 10;

从视图中选择

SELECT * FROM top_selling_products;

删除视图

DROP VIEW top_selling_products;

本文为想要深入了解 PostgreSQL 中视图和物化视图的复杂性 并了解它们对查询性能影响的读者提供了深入的探索。它还讨论了这些概念如何影响 TimescaleDB 的持续聚合的开发。

子查询

子查询是嵌套在另一个查询中的查询,它提供了一种分步骤执行操作的方法。

用例:查找下过 5 次以上订单的客户。

ANY

SELECT name, email
 FROM clients
 WHERE client_id = ANY (SELECT client_id FROM orders GROUP BY client_id HAVING COUNT(order_id) > 5);

ALL

SELECT name, email
FROM clients
WHERE client_id <> ALL (SELECT client_id FROM orders WHERE order_date < '2024-01-01');

EXISTS

SELECT name, email
FROM clients c
WHERE EXISTS (SELECT 1 FROM orders o WHERE c.client_id = c.client_id AND o.order_date > '2024-01-01');

触发器

触发器是数据库对象,当发生某些事件时会自动执行或触发。

用例:在下订单时自动更新产品的库存数量。

CREATE TRIGGER update_stock_after_order
AFTER INSERT ON orders
FOR EACH ROW
EXECUTE FUNCTION update_stock();

除了讨论的这些高级操作外,PostgreSQL 的灵活性使其能够担任独特的角色,例如向量数据库。这种能力对于涉及机器学习模型和相似性搜索的任务非常有用。了解更多 关于在 PostgreSQL 中使用 pgvector 创建、存储和查询 OpenAI 嵌入的信息

PostgreSQL 之旅的下一步

您与 PostgreSQL 操作的旅程不会就此结束。通过本指南建立的基础,您可以做好准备,应对更复杂的数据库项目和挑战。

继续尝试、学习和提升您的数据库技能。数据世界触手可及,等待您探索和创新。查询愉快!

进一步阅读

我们建议对探索如何 扩展 PostgreSQL 以解决数据库操作中的特定问题(如数据保留管理和时间序列数据处理)感兴趣的读者阅读这篇博文。