Diego que tal buen dia
Queria preguntarte porque esta creciendo tanto tu BD ¿no sera que por
ejemplo tienes fotos gigantes y no las necesitas tan grandes?

Por ejemplo a mi me pasaba que mis usuarios tomaban fotos con camaras y
celulares con resoluciones de 8 10 o hasta 16Mb y luego las subian a la BD
a traves del sistema y bueno el resultado es que cada imagen la mas pequeña
pesaba 3 MB y cuando las mostraban en pantalla en el monitor pues ni
siquiera caben en el monitor tenian estar jugando con la lupa para que
puedan verse.

y claro se ajustaba el tamaño en el sistema web pero igual a veces se
notaba lento cuando tenia que cargar una iamgen muy grande

Asi que lo que hice fue pues cambiarle el tamaño a todas las fotos
considerando solo un alto maximo de 999 pixeles y conservando el ratio de
aspecto asi ocupa casi todo el alto de la mayoria de monitores y se ven
bien.
bueno lo hice por partes con un where para ir avanzando y reduje el tamaño
de mi BD como 40 Gb en mi caso no tengo tanta información.

Quizas sea tu caso aqui te dejo el script en php que use para cambiar el
tamaño a las imagenes quizas sea tu caso.

set_time_limit(0);

ini_set('gd.jpeg_ignore_warning', 1);

$conn = pg_connect("user=usuario password=clave dbname=nombre_bd
host=ip_del_deserver port=5433");

$result = pg_query($conn, "SELECT fotos_notif_id FROM cp_fotos_notif where
fotos_notif_id >= 17105 ");

session_start();
ob_end_flush();
ob_start();

while ($raw = pg_fetch_array($result)) {

     $query = pg_query($conn, "SELECT foto FROM cp_fotos_notif where
fotos_notif_id = " . $raw['fotos_notif_id'] . "  ");
     $row = pg_fetch_row($query);

     $image = pg_unescape_bytea($row[0]);

     $fichero = file_put_contents('image_original.jpg', $image);

     $fotito = 'image_original.jpg';

//Ruta de la imagen original
     $rutaImagenOriginal = $fotito;

     //Creamos una variable imagen a partir de la imagen original
     $img_original = imagecreatefromjpeg($rutaImagenOriginal);

     //Se define el maximo ancho o alto que tendra la imagen final
     $max_ancho = 999;
     $max_alto = 999;

     //Ancho y alto de la imagen original
     list($ancho, $alto) = getimagesize($rutaImagenOriginal);

     if ($alto > 999) {

          //Se calcula ancho y alto de la imagen final
          $x_ratio = $max_ancho / $ancho;
          $y_ratio = $max_alto / $alto;

          //Si el ancho y el alto de la imagen no superan los maximos,
          //ancho final y alto final son los que tiene actualmente
          if (($ancho <= $max_ancho) && ($alto <= $max_alto)) {//Si ancho
               $ancho_final = $ancho;
               $alto_final = $alto;
          }
          /*
           * si proporcion horizontal*alto mayor que el alto maximo,
           * alto final es alto por la proporcion horizontal
           * es decir, le quitamos al alto, la misma proporcion que
           * le quitamos al alto
           *
           */ elseif (($x_ratio * $alto) < $max_alto) {
               $alto_final = ceil($x_ratio * $alto);
               $ancho_final = $max_ancho;
          }
          /*
           * Igual que antes pero a la inversa
           */ else {
               $ancho_final = ceil($y_ratio * $ancho);
               $alto_final = $max_alto;
          }

          //Creamos una imagen en blanco de tamanio $ancho_final  por
$alto_final .
          $tmp = imagecreatetruecolor($ancho_final, $alto_final);

          //Copiamos $img_original sobre la imagen que acabamos de crear en
blanco ($tmp)
          imagecopyresampled($tmp, $img_original, 0, 0, 0, 0, $ancho_final,
$alto_final, $ancho, $alto);

          //Se destruye variable $img_original para liberar memoria
          imagedestroy($img_original);

          //Definimos la calidad de la imagen final
          $calidad = 95;

          //Se crea la imagen final en el directorio indicado
          imagejpeg($tmp, "ejemplo.jpg", $calidad);

          $data = file_get_contents('ejemplo.jpg');
          $pg_tmp = pg_escape_bytea($data);

//pg_query($conn, "insert into fotitos (foto) values('{$pg_tmp}')");
          pg_query($conn, "UPDATE cp_fotos_notif SET foto = '{$pg_tmp}'
WHERE fotos_notif_id = " . $raw['fotos_notif_id'] . " ");

          echo 'se actualizo'.$raw['fotos_notif_id'].'<br>';

     } else {

          echo $raw['fotos_notif_id'].' ya tiene el tamaño menor a 999
<br>';
     }

    ob_flush();
    flush();
}
pg_close($conn);









El 4 de agosto de 2017, 11:11, Diego Ayala <netdieg...@gmail.com> escribió:

> Buenos días, tengo un compañero de una institución que esta teniendo
> problemas, el problema es el siguiente, tiene una DB PostgresSQL 8.3 sobre
> windows, aclaro que es un sistema critico, y que al adquirir el software
> hace varios años, se lo entregaron asi, el tema es que se esta quedando sin
> espacio en disco, y ya no puede agregar discos(tiene 2TB de capacidad, pero
> ya esta utilizado 1,8 TB), el cluster tiene varias DB's, pero es una  DB la
> que tiene 1 sola tabla que es la que esta con crecimiento , la tabla tiene
> 1.5TB (imágenes), que esta sobre un tablespace (otro disco) que también
> esta quedando sin espacio, la pregunta que tengo, como se puede optimizar
> el Backup, pg_dump, ya que dura aproximadamente 16hs en terminar y otras 15
> horas en restore, es un sistema critico que no se puede parar por mucho
> tiempo, la idea es migrar a un servidor nuevo, con mas disco, pero implica
> parar para realizar el bkp, pero es mucho tiempo, alguien podria darme una
> mano de como realizarlo, lastimosamente, el 8.3 no tiene todavia la
> replicacion nativa, por lo tanto no puedo utilizar el SR.
>
> Gracias.
>
>


-- 
José Mercedes Venegas Acevedo
cel Mov RPC 964185205

Member of the PHP Documentation Group (Spanish)

Reply via email to