我在一个文件夹中有194个images
,我想在PostgreSQL
表中上传。我正在使用SQL
命令 -
INSERT INTO Uploaded_images (img)
VALUES ( bytea_import('C:\300dpi jpegs\Vintage.jpg'))
如何在一个命令中上传所有图像。
或者有没有其他方法可以将成像插入到表中?
答案 0 :(得分:2)
在dir结果中循环并使用现有命令插入:
for /r %i in (*) do psql -c "INSERT INTO Uploaded_images (img) VALUES (bytea_import('%i'))"
答案 1 :(得分:0)
将图像文件夹移动到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\');
以上select为文件夹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脚本
动态执行insert语句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;$$;