【问题标题】:PostgreSQL Bulk Image InsertPostgreSQL 批量图像插入
【发布时间】:2017-11-08 06:56:54
【问题描述】:

我在一个文件夹中有 194 个images,我想将它们上传到PostgreSQL 表中。我正在使用SQL 命令 -

INSERT INTO Uploaded_images (img)
VALUES ( bytea_import('C:\300dpi jpegs\Vintage.jpg'))

如何在一个命令中上传所有图像。

或者有没有其他方法可以将图像批量插入到表中?

【问题讨论】:

  • 在目录结果中循环并使用现有命令插入

标签: sql postgresql bulkinsert dynamic-sql


【解决方案1】:

在目录结果中循环并使用现有命令插入:

for /r %i in (*) do psql -c "INSERT INTO Uploaded_images (img) VALUES (bytea_import('%i'))"

【讨论】:

    【解决方案2】:

    将图像文件夹移动到 PostgreSQL 数据目录*(例如 C:/Program Files/PostgreSQL/9.6/data)。

    E:\pgData96\imgdir\ - 'E:\pgData96' 是我的 PostgreSQL 数据目录和 'imgdir' 包含要插入的图像

    *pg_ls_dir

    仅数据库集群目录和 log_directory 中的文件 可以访问。对集群中的文件使用相对路径 目录,以及与 log_directory 配置设置匹配的路径 用于日志文件。这些功能的使用仅限于超级用户。

    SELECT format('insert into imgs(img) values(bytea_import(''%s''));', ('E:\pgData96\imgdir\' || pg_ls_dir)) a
    FROM pg_ls_dir('E:\pgData96\imgdir\');
    

    以上选择为文件夹E:\pgData96\imgdir\ 中的所有图像动态创建插入语句。

    例如

    "insert into imgs(img) values(bytea_import('E:\pgData96\imgdir\12.2.17. - 5.png'));"
    "insert into imgs(img) values(bytea_import('E:\pgData96\imgdir\15 - 49.png'));"
    "insert into imgs(img) values(bytea_import('E:\pgData96\imgdir\16 - 1.png'));"
    "insert into imgs(img) values(bytea_import('E:\pgData96\imgdir\16 - 20 (1).png'));"
    

    使用以下 SQL 脚本动态执行插入语句

    do $$
    
    declare rw record;
    
    begin
        for rw in -- loops through each row in the resultset
    
        SELECT format('insert into imgs(img) values(bytea_import(''%s''));', ('E:\pgData96\imgdir\' || pg_ls_dir)) a
        FROM pg_ls_dir('E:\pgData96\imgdir\') loop
    
        execute rw.a; -- executes row(insert statement)
    end
    
    loop;end;$$;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2012-03-19
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多