简介
在关系型数据库中,数据库 schema 定义了数据库的结构及其组成部分,如表、字段和索引。提取和导出此信息在许多场景中都很有用,包括备份、迁移到新环境、可视化数据结构以及在代码库中管理这些结构。
在本简短指南中,我们将讨论如何使用 sqlite3
命令导出 SQLite 数据库 schema。您可以使用相同的命令来管理数据库,也可以使用它来导出数据库数据和结构。在本指南中,我们将重点介绍提取数据结构本身。
您可以使用 Prisma Client 从您的 JavaScript 或 TypeScript 应用程序中管理 PostgreSQL 数据库。要了解如何将 Prisma 与 SQLite 一起使用,请查看 Prisma 的 SQLite 数据库连接器页面。
基本用法
从 SQLite 导出数据库 schema 的基本命令如下所示
sqlite3 DATABASE_FILE.sqlite '.schema' > schema.sql
在这里,DATABASE_FILE.sqlite
是包含您的数据和结构的 SQLite 数据库文件。'.schema'
组件是告诉 SQLite 导出数据库 schema 而不包含任何随附数据的命令。schema.sql
文件是接收导出的数据库结构的目标文件。
交互式执行
上述命令可以从命令行执行。您可以在 sqlite3
shell 中以交互方式执行相同的过程。
首先,使用 sqlite3
命令打开 SQLite 数据库文件
sqlite DATABASE_FILE.sqlite
接下来,设置输出,以便将命令结果发送到文件而不是显示
.output schema.sql
最后,通过键入以下内容输出 schema
.schema
现在,您可以选择通过键入以下内容将输出改回标准输出
.output
在本指南的剩余部分,我们将使用命令行来演示其他功能,但请注意,如果需要,您可以使用此方法以交互方式复制此操作。
导出特定数据库的 schema
要仅导出与特定数据库相关的 schema,您可以使用通配符选择属于该数据库的所有组件,语法如下
sqlite3 DATABASE_FILE.sqlite '.schema DATABASE.*' > database_schema.sql
例如,如果您有一个名为 sales.sql
的数据库文件,并且只想导出 VENDORS
数据库,则可以键入
sqlite3 sales.sqlite '.schema VENDORS.*' > vendors_db_schema.sql
导出特定表
您还可以通过在 .schema
之后包含表名来导出特定表
sqlite3 DATABASE_FILE.sqlite '.schema TABLE' > table_schema.sql
这种方法的替代方法是使用通配符匹配而不是特定名称。schema
命令为此使用 LIKE 模式匹配,这意味着百分号 (%
) 用于匹配零个或多个字符,而下划线 (_
) 可以代表恰好一个字符。
例如,要导出所有以 inventory
开头的表,您可以键入
sqlite3 DATABASE_FILE.sqlite '.schema inventory%' > inventory_schemas.sql
此语法不允许一次指定多个模式或多个特定表,因此您可能需要运行多个命令来导出您需要的对象,或者转储所有内容并手动操作导出的 schema。
在 schema 转储中包含数据库统计信息
您可以使用 .fullschema
命令代替 .schema
命令,以同时包含 SQLite 内部用于决定查询计划等的所有统计信息表。当尝试调试查询以特定方式执行的原因时,这可能很有用
sqlite3 DATABASE_FILE.sqlite '.fullschema' > schema_with_statistics.sql
请注意,.fullschema
命令不允许您按表名进行过滤。
结论
能够导出您的 schema 使您可以将数据库结构保存在数据库本身之外。这在设置新环境、随着需求变化而演变您的 schema 以及可视化您正在存储的信息结构时很有帮助。
您可以使用 Prisma Client 从您的 JavaScript 或 TypeScript 应用程序中管理 PostgreSQL 数据库。要了解如何将 Prisma 与 SQLite 一起使用,请查看 Prisma 的 SQLite 数据库连接器页面。