ich lade Bild in PostgreSQL mit folgendem Befehl ein:Wie binäre Blob aus PostgreSQL mit D laden/entladen?
UPDATE "USERS" SET userblob = (pg_read_binary_file('img.png')::bytea) WHERE id>1;
Der Feldtyp ist: bytea
Jetzt DB wie this.
Dann habe ich versucht, binäre Blob zurück in das Dateisystem zu schreiben. Und habe sehr große Datei, die Daten wie enthalten: [56, 57, 53, 48, 52, 101, 52, 55, 48, 100, 48, 97, 49 ...
Was mache ich falsch? Mein Code ist der nächste:
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: Ich habe Dokumente gelesen. PostgreSQL-Bytea ist Schmerz. Es ist viel besser, den gesamten Text in der base64-Codierung zu speichern. Arbeitsbeispiel: UPDATE "USERS" SET userblob = encode(pg_read_binary_file('img.png'), 'base64') WHERE id>1;
Welchen Client-Treiber verwenden Sie? Der Client-Treiber sollte sich darum kümmern. PgJDBC tut, psqlODBC tut, libpq tut ... benutzen Sie einen wirklich begrenzten Treiber? –