You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS RDS PostgreSQL中导入多个S3导出分片文件?

解决方案:用PL/pgSQL存储过程遍历S3分块文件导入

可以通过编写PL/pgSQL存储过程实现自动遍历S3中的分块文件并逐个导入,完全在PostgreSQL数据库内完成操作,无需外部程序。以下是针对你的环境(AWS RDS PostgreSQL 13.15,aws_commons 1.2,aws_s3 1.2)的具体实现:

1. 创建存储过程

该存储过程会列出指定S3桶中以目标前缀开头的所有文件,然后逐个调用aws_s3.table_import_from_s3完成导入:

CREATE OR REPLACE PROCEDURE import_from_s3_chunks(
    p_bucket TEXT,
    p_prefix TEXT,
    p_table TEXT,
    p_region TEXT DEFAULT 'us-east-1'
)
LANGUAGE plpgsql
AS $$
DECLARE
    v_s3_key RECORD;
    v_import_stats RECORD;
BEGIN
    -- 遍历S3桶中所有匹配前缀的对象
    FOR v_s3_key IN
        SELECT key
        FROM aws_s3.list_objects(
            aws_commons.create_s3_uri(p_bucket, '', p_region)
        )
        WHERE key LIKE p_prefix || '%'
    LOOP
        -- 输出当前导入的文件名(便于监控)
        RAISE NOTICE '开始导入文件: %', v_s3_key.key;
        
        -- 执行导入操作
        SELECT * INTO v_import_stats
        FROM aws_s3.table_import_from_s3(
            p_table,
            '', -- 列映射留空表示与表结构完全匹配
            '(format text)', -- 需与导出时的格式一致
            aws_commons.create_s3_uri(p_bucket, v_s3_key.key, p_region)
        );
        
        -- 输出导入结果统计
        RAISE NOTICE '文件 % 导入完成,共导入 % 行', v_s3_key.key, v_import_stats.rows_imported;
    END LOOP;
    
    RAISE NOTICE '所有分块文件导入完成';
END;
$$;

2. 调用存储过程

替换参数为你的实际桶名、文件前缀、目标表名和区域:

CALL import_from_s3_chunks('somebucket', 'sample-filepath', 'sample_table', 'us-east-1');

关键注意事项

  • IAM权限配置:确保RDS实例关联的IAM角色拥有以下权限:
    • s3:ListBucket:针对目标S3桶(somebucket)
    • s3:GetObject:针对桶内所有以sample-filepath开头的对象
  • 格式一致性:存储过程中指定的(format text)必须与导出时的格式完全一致,如果导出时使用了CSV格式,需修改为(format csv)
  • 重复导入处理:如果需要避免重复导入,可以在存储过程中添加逻辑,比如创建日志表记录已导入的文件名,循环时检查并跳过重复项
  • 异常处理:若需处理导入错误(如文件损坏),可添加EXCEPTION块捕获错误,选择跳过错误文件或终止过程:
    BEGIN
        -- 导入逻辑
    EXCEPTION
        WHEN OTHERS THEN
            RAISE NOTICE '文件 % 导入失败: %', v_s3_key.key, SQLERRM;
            CONTINUE; -- 继续执行下一个文件
    END;
    

内容的提问来源于stack exchange,提问作者Jayadevan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:57:03