2017-11-08 8 views
2

私はPostgreSQLのテーブルにアップロードしたい1つのフォルダに194 imagesを持っています。 SQLコマンドを使用しています -PostgreSQL一括画像の挿入

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

1つのコマンドですべての画像をアップロードするにはどうすればよいですか。

また、画像を一括してテーブルに挿入する方法はありますか? DIR結果で

+0

ループ次のSQLスクリプトを使用して、INSERT文を実行し、既存のコマンドを挿入します –

答えて

2

ループと既存のコマンドと挿入:PostgreSQLのデータディレクトリに

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

移動画像フォルダ*(例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\内のすべての画像のための挿入文を作成します。

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の結果に

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;$$;