介绍
在关系型数据库中,数据库模式 定义了数据库及其组成部分(如表、字段和索引)的结构。在许多场景中提取和导出此信息非常有用,包括备份、迁移到新环境、可视化数据结构以及在代码库中管理这些结构。
在本简短指南中,我们将讨论如何使用 pg_dump
命令导出 PostgreSQL 数据库模式。虽然此实用程序可以从 PostgreSQL 导出多种类型的数据,但本指南将重点介绍如何提取数据结构本身。
您可以使用 Prisma Client 在您的 JavaScript 或 TypeScript 应用程序中管理 PostgreSQL 数据库。了解如何将 Prisma 添加到 现有项目 或如何从头开始使用 Prisma 创建一个项目。
基本用法
从 PostgreSQL 导出数据库模式所需的命令如下所示
pg_dump --schema-only DATABASE > schema.sql
根据您的 PostgreSQL 配置,您可能还需要包含以下选项中的某些选项
--username=
/-U
:您要用来进行身份验证的数据库用户名--password
/-W
:强制pg_dump
提示输入密码进行身份验证--host=
/-h
:PostgreSQL 所在的主机名或 IP 地址--port=
/-p
:PostgreSQL 监听的端口号
告诉 pg_dump
仅包含数据库结构而不包含数据的选项是 --schema-only
--schema-only
:-s
:仅导出对象定义,不导出数据本身。
此外,第一个非选项参数(此处用“DATABASE”表示)指示要导出的确切数据库。
使用此信息,您可以使用类似以下命令导出名为 SALES
的数据库的模式,该命令使用名为 sales_reporter
的有限用户
pg_dump --username=sales_reporter --password --schema-only SALES > sales_database_schema.sql
修改导出行为
上面讨论的基本用法将输出与所讨论数据库相关的每个结构。我们可以通过许多其他选项来修改此行为,在某些情况下,还可以使用相关的 pg_dumpall
命令。
目标是多个数据库
pg_dump
命令旨在导出与单个数据库相关的信息。要一次定位多个数据库,您可以改用 pg_dumpall
命令,该命令遵循类似的语法。
要转储 PostgreSQL 集群中的所有数据库模式,请键入
pg_dumpall --schema-only > all_schemas.sql
如果您想限制转储的数据库,可以选择包含 --exclude-database=
选项。这可以多次使用以定位各个数据库
pg_dumpall --schema-only --exclude-database=FIRST --exclude-database=SECOND > almost_all_schemas.sql
它也可以使用通配符样式匹配来用单个模式捕获多个数据库
pg_dumpall --schema-only --exclude-database='SALES_*' > all_schemas_except_sales.sql
仅导出某些结构
您还可以通过指定要导出的特定表来减少导出的结构
--table=
/-t
:仅转储与给定模式匹配的表。可以多次提供。--exclude-table=
/-T
:排除与给定模式匹配的表。可以多次提供。
例如,如果你的 SALES
数据库中有三个表,分别叫做 EMPLOYEE
、STORE
和 INVENTORY
,它们都在默认的 public
模式下定义,你可以通过以下命令只导出这些结构:
pg_dump --schema-only --table='public."EMPLOYEE"' --table='public."STORE"' --table='public."INVENTORY"' SALES > some_sales_tables.sql
注意: 你可以在我们的指南中了解更多关于 PostgreSQL 如何解析不同类型的引号的信息,指南地址:如何在 PostgreSQL 中使用单引号和双引号。
如果你想要导出除这三个表以外的所有销售数据,可以使用以下命令:
pg_dump --schema-only --exclude-table='public."EMPLOYEE"' --exclude-table='public."STORE"' --exclude-table='public."INVENTORY"' SALES > some_sales_tables.sql
其他相关选项
根据你的目标,一些额外的选项可能会很有用,包括
--create
/-C
:在转储数据库结构之前,包含创建数据库本身的命令。--clean
/-c
:输出在创建数据库对象之前删除它们的命令。--if-exists
:仅在与--clean
一起使用时才相关,会使pg_dump
仅尝试删除数据库中已存在的数据库对象。
例如,如果你想在模式导出中包含一个创建数据库本身的命令,你可以输入以下命令:
pg_dump --schema-only --create SALES > sales_db_schema.sql
要删除 SALES
数据库中的任何数据库对象,然后创建它们,你可以使用以下命令:
pg_dump --schema-only --clean --if-exists SALES > sales_db_schema.sql
结论
能够导出你的模式,使你能够将数据库结构保存到数据库本身之外。这在设置新环境、根据需求更改模式和可视化存储的信息结构时非常有用。
您可以使用 Prisma Client 在您的 JavaScript 或 TypeScript 应用程序中管理 PostgreSQL 数据库。了解如何将 Prisma 添加到 现有项目 或如何从头开始使用 Prisma 创建一个项目。