数据库

将数据导入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 文件

方案二:使用 pgloader 批量导入

pgloader 是一个高效导入数据到 Postgres 数据库的强大工具,支持多种源数据库引擎,包括 MySQL 和 MS SQL。

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

  1. 在本地机器或服务器上安装 pgloader。更多信息请参考官方 pgloader 安装页面

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

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

    根据您的具体使用场景自定义源数据库和 Supabase 数据库 URL 及参数:

    • wal_buffers:设置为 '64MB' 来为预写日志缓冲区分配 64MB 内存。更大的值可以通过在内存中缓存更多数据来提高写入性能,这在数据导入操作中能加速事务日志的写入。
    • max_wal_senders:设置为 0 以禁用复制连接。在数据导入过程中这样做可以避免与复制相关的冲突和问题。
    • statement_timeout:值设为 0 表示禁用超时限制,允许 SQL 语句无时间限制地运行。
    • work_mem:设置为 '2GB' 为查询操作分配 2GB 内存。通过允许更大的内存数据集,可以提升复杂查询的性能。
  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
2
3
4
5
-- 禁用特定表上的所有触发器ALTER TABLE table_name DISABLE TRIGGER ALL;-- 重新启用触发器ALTER TABLE table_name ENABLE TRIGGER ALL;

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

索引对查询性能至关重要,但在导入大型数据集时构建索引可能非常耗时。建议在数据导入完成后才构建或重建索引。这种方法可以显著加快导入过程,减少总体所需时间。

要在数据导入后构建索引:

1
2
-- 在表上创建索引create index index_name on table_name (column_name);

了解更多关于Postgres中的索引管理的内容。