【问题标题】: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;$$;