Iは、次のコマンドを使用して、PostgreSQLの画像を読み込む:Dを使ってPostgreSQLからバイナリブロブをロード/アンロードする方法は?
UPDATE "USERS" SET userblob = (pg_read_binary_file('img.png')::bytea) WHERE id>1;
フィールドタイプがある:
今DBはbytea this等が挙げられます。
次に、バイナリBLOBをファイルシステムに書き戻そうとしました。そして、次のようなデータを含む非常に大きなファイルを得ました:[56, 57, 53, 48, 52, 101, 52, 55, 48, 100, 48, 97, 49 ...
私は間違っていますか?私のコードは次です:
struct MyData
{
string guid;
string id;
string name;
byte [] userblob;
string fl;
}
auto rs = pgstmt.executeQuery(`SELECT guid::text, id, name, userblob, "FL" FROM "USERS" where "FL" = 10;`);
while (rs.next())
{
md.guid = to!string(rs.getString(1));
md.id = to!string(rs.getString(2));
md.name = to!string(rs.getString(3));
md.userblob = rs.getBytes(4);
md.fl = to!string(rs.getBytes(5));
std.file.write("output.png", cast(byte[])md.userblob);
readln;
mydata ~= md;
}
UPD:私は読んだドキュメントです。 PostgreSQLのバイトアは痛みです。すべてのテキストをbase64エンコーディングで保存する方がはるかに優れています。 実例: UPDATE "USERS" SET userblob = encode(pg_read_binary_file('img.png'), 'base64') WHERE id>1;
どのクライアントドライバを使用していますか?クライアントドライバは、このためにあなたのために世話をする必要があります。 PgJDBCはpsqlODBCを実行しますが、libpqは何かの制限付きドライバを使用していますか? –