跳到正文

PostgreSQL

中级通用

PostgreSQL 是一种开源的关系型数据库管理系统,用表保存数据,并支持 SQL 查询和事务。它能让网站或 App 在多人同时使用时,可靠地保存和关联用户、订单等数据。

你可能会说:「我想做个多人使用的订单后台,数据要长期保存,还能按用户查询和统计。」

读之前建议先了解

动手看看

SQL查询应用加载订单PostgreSQL执行查询用户表订单表
1

刚注册的用户打开「我的订单」。应用发送 SQL 查询,希望同时拿到用户资料和关联订单。

要点

  1. 1

    把相关数据放进不同的表

    做订单后台时,我们可以分别保存用户、商品和订单,再用主键等字段关联它们。这样查询某个用户的订单时,不必把用户资料在每笔订单里重复存一遍。

  2. 2

    通过 SQL 读写和筛选数据

    你的后端可以向 PostgreSQL 发送 SQL,新增订单、修改状态,或筛选出本月未付款的订单。数据量变大后,常用查询还可以借助索引加速,但索引也会占用空间并增加写入开销。

  3. 3

    用事务处理成组的改动

    比如确认订单时,要同时记录付款和更新订单状态。我们可以把相关操作放进一个事务:如果其中一步失败,整组改动就能回滚,避免只完成一半。业务规则仍要由应用正确实现。

容易混淆的地方

PostgreSQL 是运行和管理数据的数据库系统;SQL 是你用来查询、修改数据的语言,不是另一款数据库。SQLite 也是关系型数据库,但通常直接读写本地数据库文件,适合嵌入应用;PostgreSQL 以服务方式运行,更适合多个应用实例或用户共同访问数据。

什么时候用

适合用

  • 做多人使用的 SaaS 后台,要长期保存客户、成员和订单,并按关联关系查询。
  • 开发预约 App,需要同时处理名额扣减和预约记录,避免只写入其中一项。
  • 做 AI 工具的账户与任务管理,按用户查询历史任务、状态和用量记录。

不适合用

  • 只做一个静态展示网站,没有账号和动态数据时,用静态文件托管就够了。
  • 只在单机脚本里保存少量本地记录,不打算部署数据库服务时,可以先用 SQLite。
  • 主要存放用户上传的视频和图片原文件时,用对象存储更合适,数据库只记录文件地址和元数据。

练一练

你在做一个多人预约系统:用户会同时抢同一时段,后台还要按用户和日期查询记录。哪种方案最贴合需求?

让 AI 帮你做

请为这个多人预约应用使用 PostgreSQL 设计用户、时段和预约表,说明主键、关联关系及防止重复预约的约束。预约创建和名额更新请放在事务中,并给出数据库迁移文件;先说明你对名额规则的假设。

接下来学什么