2017-11-08 8 views
2

PostgreSQL 테이블에 업로드하려는 하나의 폴더에 194 images이 있습니다. SQL 명령을 사용 중입니다. -PostgreSQL 대량 이미지 삽입

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

하나의 명령으로 모든 이미지를 업로드하려면 어떻게해야합니까?

다른 방법으로 이미지를 대량 삽입 할 수 있습니까?

은 DIR 결과에
+0

루프를 사용하여 삽입 문을 실행하고 기존의 명령으로 삽입 –

답변

2

루프 기존 명령 삽입 : PostgreSQL의 데이터 디렉토리 (*. 예 C:/Program Files/PostgreSQL/9.6/data)에

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

이동 이미지 폴더.

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\의 모든 이미지를 삽입 문을 작성합니다.

Ex.

"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'));" 

동적 DIR 결과에서 다음 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;$$;