2009/4/22 Edwin Quijada <[email protected]>: > > En mi BD tengo datos byeta y queria saber si al momento de sacar un backup lo > puedo hacer con un dump normal para sacar los datos. > > Y si es asi como haria el restore ? COn psql normal. >
Una opción para sortear este tipo de dudas es almacenar los blobs codificados en base64 [http://es.wikipedia.org/wiki/Base64]. Tu cliente deberá encargarse de la codificación del blob a base64, el resultado es un string de caracteres ASCII que puedes almacenar en una columna de tipo bytea o text. En mi caso lo hago en C++/Qt4. Tambien puedes definir unas funciones sencillas en la base para algunas operaciones básicas, como averiguar el tamaño del blob, el hash md5 o sha1(requiere pgcrypto), etc. Sigues teniendo acceso al blob decodificando la columna bytea con decode(mi_columna_bytea::text,'base64'), inclusive puedes prescindir del tipo bytea y almacenar tus blobs en columnas de tipo text. Averiguar el tamaño del un blob seria algo asi como: # select nombre, octet_length(decode(mi_blob::text,'base64')) || ' bytes' as tamanio from archivo; nombre | tamanio -----------------------+------------- img033.jpg | 65321 bytes dschulz.asc | 1682 bytes words.txt | 251 bytes (3 filas) Lo que consigues con esto es poder volcar backups en donde tus columnas de tipo bytea contengan solamente caracteres ASCII. No se que tan inteligente sería aplicar este enfoque cuando almacenas blobs *realmente* grandes. Aun considerando que codificar/decodificar base64 parece no ser un trabajo muy intensivo, supongo que puede implicar un problema en un ambiente donde tengas mucha carga. Mis pruebas no dieron problemas con hasta ~50 Mb, pero en una instalación completamente ociosa. HTH, diego -- TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo agradecerán
