数据库

将数据导入 Supabase


您可以以多种方式将数据导入 Supabase。最佳方法取决于您的数据大小和应用程序需求。

如果您在开发中使用小型数据集,可以使用 Supabase 控制面板中的 CSV 导入快速试验。如果您在生产中使用大型数据集,则应计划数据导入,以最大限度地减少应用程序延迟并确保数据完整性。

如何将数据导入 Supabase#

您有多种选择可以将数据导入到 Supabase

  1. 通过 Supabase 控制面板进行 CSV 导入
  2. 使用 pgloader 进行批量导入
  3. 使用 Postgres COPY 命令
  4. 使用 Supabase API

选项 1:通过 Supabase 控制面板进行 CSV 导入#

Supabase 控制面板提供了一种用户友好的方式来导入数据。但是,对于非常大的数据集,这种方法可能不是最高效的选择,因为大小限制为 100MB。它通常更适合较小的数据集和快速数据导入。对于大规模数据导入,请考虑使用替代方法,例如 pgloader。

  1. 导航到表格编辑器中的相关表格。
  2. 单击+ 新建表格(对于新的空项目)或插入(对于现有表格),然后选择从 CSV 导入数据并按照屏幕上的说明上传您的 CSV 文件。

选项 2:使用 pgloader 进行批量导入#

pgloader 是一种功能强大的工具,可有效地将数据导入到 Postgres 数据库,支持各种源数据库引擎,包括 MySQL 和 MS SQL。

您可以按照以下步骤将其与 Supabase 结合使用

  1. 在您的本地机器或服务器上安装 pgloader。有关更多信息,您可以参考官方 pgloader 安装页面

    1
    $ apt-get install pgloader
  2. 创建一个配置文件,指定源数据和目标 Supabase 数据库(例如 config.load)。这是一个示例配置文件

    1
    LOAD DATABASE
    2
    FROM sourcedb://USER:PASSWORD@HOST/SOURCE_DB
    3
    INTO postgres://postgres.xxxx:password@xxxx.pooler.supabase.com:6543/postgres
    4
    ALTER SCHEMA 'public' OWNER TO 'postgres';
    5
    set wal_buffers = '64MB', max_wal_senders = 0, statement_timeout = 0, work_mem to '2GB';

    自定义源和 Supabase 数据库 URL 和选项以适应您的特定用例

    • wal_buffers:此参数设置为“64MB”,以分配 64 兆字节的内存用于预写日志缓冲区。较大的值可以通过在将数据写入磁盘之前将其缓存到内存中来帮助提高写入性能。这在数据导入操作期间对于加速事务日志的写入非常有用。
    • max_wal_senders:设置为 0,以禁用复制连接。这在数据导入过程中完成,以防止与复制相关的冲突和问题。
    • statement_timeout:该值设置为 0,这意味着已禁用,允许 SQL 语句在没有时间限制的情况下运行。
    • work_mem:设置为“2GB”,分配 2 GB 内存用于查询操作。这通过允许更大的内存数据集来增强复杂查询的性能。
  3. 使用配置文件运行 pgloader。

    1
    pgloader config.load

对于使用 Postgres 引擎的数据库,我们建议使用pg_dumppsql 命令行工具。

选项 3:使用 Postgres copy 命令#

了解更多关于批量数据加载的信息。

选项 4:使用 Supabase API#

Supabase API 允许您以编程方式将数据导入到您的表格中。您可以使用各种客户端库与 API 交互并执行数据导入操作。当您需要自动执行数据导入时,这种方法很有用,并且它使您能够对该过程进行细粒度控制。有关更多详细信息,请参阅我们的API 指南

准备导入数据#

大型数据导入会影响您的数据库性能。失败的导入也可能导致数据损坏。导入数据是一项安全且常见的操作,但如果您正在导入大量数据或在生产环境中工作,则应提前计划。

1. 备份您的数据#

备份可帮助您在出现问题时恢复数据。Pro、Team 和 Enterprise 计划的数据库会按计划自动备份,但您也可以自行备份。有关更多信息,请参阅数据库备份

2. 增加语句超时#

默认情况下,Supabase 强制执行查询语句超时,以确保公平的资源分配并防止长时间运行的查询影响整个系统。在导入大型数据集时,您可能会遇到超时。为了解决这个问题

  • 增加语句超时:您可以调整会话或连接的语句超时,以适应更长时间运行的查询。在执行此操作时请小心,因为过长的查询可能会对系统性能产生负面影响。了解更多关于语句超时的信息。

3. 估算所需的磁盘大小#

大型数据集会占用磁盘空间。确保您的 Supabase 项目具有足够的磁盘容量来容纳导入的数据。如果您知道数据库的大小,可以在项目数据库设置中手动增加大小。

了解更多关于 磁盘管理的信息。

4. 禁用触发器#

在导入大型数据集时,暂时禁用触发器通常是有益的。触发器会显著降低导入过程的速度,尤其是在它们涉及复杂逻辑或引用完整性检查时。导入后,您可以重新启用触发器。

要禁用触发器,请使用以下 SQL 命令

1
-- Disable triggers on a specific table
2
ALTER TABLE table_name DISABLE TRIGGER ALL;
3
4
-- To re-enable triggers
5
ALTER TABLE table_name ENABLE TRIGGER ALL;

5. 在数据导入完成后重建索引#

索引对于查询性能至关重要,但在导入大型数据集时构建索引可能会耗费时间。考虑在数据导入完成后构建或重建索引。这种方法可以显著加快导入过程并减少总体时间。

要在数据导入后构建索引

1
-- Create an index on a table
2
create index index_name on table_name (column_name);

了解更多关于管理 Postgres 中的索引的信息。