源本科技 | 码上会

PostgreSQL 加载数据库

2026/03/14
12
0

学习目标

  • 掌握在 PostgreSQL 中创建新数据库的标准流程

  • 学会使用 pg_restore 命令行工具备份文件还原数据库

  • 熟悉 DVD Rental 示例数据库的实体关系模型(ER Model)与表结构

  • 能够独立验证数据库加载结果并浏览元数据


前置准备

在开始加载数据库之前,请确保您的开发环境已满足以下两个必要条件:

  1. PostgreSQL 服务已安装并运行:确认数据库服务器已在本地或远程主机上正常启动。

  2. 拥有示例数据库备份文件:本教程将使用经典的 "DVD Rental"(DVD 租赁)示例数据库。该数据库模拟了一家 DVD 租赁店的业务场景,是学习 PostgreSQL 的最佳实践素材之一。

https://github.com/imkumaraju/dvdrenat-sample-databse

示例数据库

DVD Rental 数据库包含了一个完整的零售业务模型,其内部对象结构如下:

  • 15 张数据表:涵盖演员、电影、库存、租赁、支付等核心业务实体

  • 1 个触发器:用于自动化业务逻辑

  • 8 个存储函数:封装复杂计算逻辑

  • 1 个域(Domain):定义自定义数据约束

  • 7 个视图:提供简化的数据查询接口

  • 13 个序列:用于主键自增生成

核心数据表说明

该数据库的 15 张表及其功能描述如下:

表名

功能描述

actor

存储演员信息,包括名和姓

film

存储电影详细信息,如标题、发行年份、时长、评级等

film_actor

维护电影与演员之间的多对多关系

category

存储电影分类数据(如动作片、喜剧片)

film_category

维护电影与分类之间的关联关系

store

存储门店信息,包括经理员工和地址

inventory

存储库存详情,记录具体碟片的存放位置

rental

记录具体的租赁交易流水

payment

存储客户的支付记录

staff

存储员工个人信息及工作详情

customer

存储客户注册信息

address

统一存储员工和客户的地址信息

city

存储城市名称列表

country

存储国家名称列表

language

(隐含) 存储电影语言信息(通常包含在完整模型中)


创建目标数据库

首先,我们需要在 PostgreSQL 服务器中创建一个空的数据库容器来接收数据。

  1. 打开终端(Linux/macOS)或命令提示符(Windows),输入 psql 命令进入 SQL 交互 shell。

  2. 系统会提示您输入连接信息,通常默认配置如下:

Server [localhost]: localhost
Database [postgres]: postgres
Port [5432]: 5432
Username [postgres]: postgres
Password for user postgres: [输入您的密码]
  1. 成功登录后,使用 CREATE DATABASE 语句创建名为 dvdrental 的新数据库:

CREATE DATABASE dvdrental;

注意:可以使用 Navicat 命令列界面创建

执行成功后,您将收到 CREATE DATABASE 的确认消息。此时请勿退出 shell,或者记下连接参数以便下一步使用。


加载数据

PostgreSQL 提供了强大的命令行工具 pg_restore,专门用于从归档文件格式(如 custom, directory, tar 格式)还原数据库。

操作路径

  1. 定位备份文件:假设您已将下载的 dvdrental.tar 文件保存在 C:\users\sample_database\ 目录下(Windows 示例)。

  2. 进入 bin 目录:打开新的命令提示符窗口,导航至 PostgreSQL 安装目录下的 bin 文件夹。

    • Windows 典型路径:C:\Program Files\PostgreSQL\14\bin

    • Linux/macOS 通常已将 pg_restore 加入环境变量,可直接使用。

执行还原命令

使用以下命令格式将数据导入刚才创建的 dvdrental 数据库:

pg_restore -U postgres -d dvdrental C:\users\sample_database\dvdrental.tar

注意:由于我们 PostgreSQL 是部署在容器中的,需要配合 Docker 容器相关命令操作

  • 上传案例数据库到 Linux

  • 复制案例数据库到容器

docker cp ./dvdrental.tar postgres:/
  • 执行还原命令

docker exec -it postgres pg_restore -U postgres -d dvdrental /dvdrental.tar

参数解析:

  • -U postgres:指定使用 postgres 超级用户身份进行连接。

  • -d dvdrental:指定目标数据库名称为 dvdrental

  • C:\...\dvdrental.tar:备份文件的绝对路径。

执行命令后,系统会提示您输入 postgres 用户的密码。

输入正确密码后,工具将开始读取归档文件并重建表结构、插入数据、创建函数和视图。

注意:如果备份文件是在不同版本的 PostgreSQL 上创建的,可能会看到一些关于版本不匹配的警告,通常可以忽略,除非出现严重错误。


验证数据库加载结果

数据加载完成后,必须验证对象是否已正确导入。

连接到新数据库

psql 命令行工具中,使用元命令 \c (connect) 切换到 dvdrental 数据库:

\c dvdrental

系统应返回提示:You are now connected to database "dvdrental" as user "postgres".

列出所有数据表

使用元命令 \dt 列出当前数据库中的所有表:

\dt

预期输出示例

           List of relations
 Schema |     Name     | Type  |  Owner   
--------+--------------+-------+----------
 public | actor        | table | postgres
 public | address      | table | postgres
 public | category     | table | postgres
 public | city         | table | postgres
 public | country      | table | postgres
 public | customer     | table | postgres
 public | film         | table | postgres
 public | film_actor   | table | postgres
 public | film_category| table | postgres
 public | inventory    | table | postgres
 public | language     | table | postgres
 public | payment      | table | postgres
 public | rental       | table | postgres
 public | staff        | table | postgres
 public | store        | table | postgres
(15 rows)

如果您能看到上述 15 张表,说明数据库已成功加载。您还可以尝试查询一张表的内容来进一步验证,例如:

SELECT first_name, last_name FROM actor LIMIT 5;

总结

  • 环境准备:加载数据库前需确保服务运行正常且拥有合法的备份文件(如 .tar 格式)。

  • 创建容器:必须先使用 CREATE DATABASE 创建空数据库,pg_restore 不会自动创建目标数据库(除非使用 -C 参数)。

  • 工具使用pg_restore 是处理非纯文本备份文件的首选工具,支持灵活指定用户、数据库和文件路径。

  • 验证流程:通过 \c 切换上下文,利用 \dt 检查表结构,并通过简单的 SELECT 查询确认数据完整性。