Foros del Web » Programando para Internet » PHP »

Backup postgres con php

Estas en el tema de Backup postgres con php en el foro de PHP en Foros del Web. Saludos a todos. Estoy haciendo un backup a un archivo .sql de mi base de datos en postgres usando una interfaz web php. Tengo el ...
  #1 (permalink)  
Antiguo 09/03/2009, 07:48
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Backup postgres con php

Saludos a todos.

Estoy haciendo un backup a un archivo .sql de mi base de datos en postgres usando una interfaz web php.
Tengo el siguiente código, y espero que también sea de aporte para el foro:

Código PHP:
<?php
    
function dl_file($file){
        If (!
is_file($file)) { die("<b>404 Archivo no encontrado!</b>"); }
        
$len filesize($file);
           
$filename basename($file);
           
$file_extension strtolower(substr(strrchr($filename,"."),1));
           
$ctype="application/force-download";
           
header("Pragma: public");
           
header("Expires: 0");
           
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
           
header("Cache-Control: public");
           
header("Content-Description: File Transfer");
           
header("Content-Type: $ctype");
           
$header="Content-Disposition: attachment; filename=".$filename.";";
           
header($header );
           
header("Content-Transfer-Encoding: binary");
           
header("Content-Length: ".$len);
           @
readfile($file);
           exit;
    }
    
$dbname "atentions"//database name
    
include ("scripts/auth.php");    
    
$archivo=date(" d\-m\-Y") . "--sistema_atencion" ".sql";
    
$back fopen("$archivo","w"); 
    
$res pg_query(" SELECT relname AS tablename FROM pg_class WHERE relkind in ('r') AND relname NOT LIKE 'pg_%' AND relname NOT LIKE 'sql_%' ORDER BY tablename");
      
$str="";
      while(
$row pg_fetch_row($res)) { 
        
$table $row[0]; 
        
$str .= "\n--\n";
        
$str .= "-- Estrutura de la Tabla: '$table'";
        
$str .= "\n--\n";
        
//$str .= "\nDROP TABLE $table CASCADE;";
        
$str .= "\nCREATE TABLE $table (";
        
$res2 pg_query("SELECT  attnum,attname , typname , atttypmod-4 , attnotnull ,atthasdef ,adsrc AS def 
                FROM pg_attribute, pg_class, pg_type, pg_attrdef WHERE pg_class.oid=attrelid 
                AND pg_type.oid=atttypid AND attnum>0 AND pg_class.oid=adrelid AND adnum=attnum 
                AND atthasdef='t' AND lower(relname)='$table' UNION 
                SELECT attnum,attname , typname , atttypmod-4 , attnotnull , atthasdef ,'' AS def 
                FROM pg_attribute, pg_class, pg_type WHERE pg_class.oid=attrelid 
                AND pg_type.oid=atttypid AND attnum>0 AND atthasdef='f' AND lower(relname)='$table' "
);                                             
        while(
$r pg_fetch_row($res2)) { 
            
$str .= "\n" $r[1]. " " $r[2];
            if (
$r[2]=="varchar"){
                
$str .= "(".$r[3] .")";
            }
            if (
$r[4]=="t"){
                
$str .= " NOT NULL";
            }
            if (
$r[5]=="t"){
                
$str .= " DEFAULT ".$r[6];
            }
            
$str .= ",";
        }
        
$str=rtrim($str",");  
        
$str .= "\n);\n";
        
$str .= "\n--\n";
        
$str .= "-- Creando Datos para: '$table'";
        
$str .= "\n--\n\n";    
        
$res3 pg_query("SELECT * FROM $table");
        while(
$r pg_fetch_row($res3)){ 
            
$sql "INSERT INTO $table VALUES ('"
            
$sql .= utf8_decode(implode("','",$r)); 
            
$sql .= "');"
            
$str str_replace("''","NULL",$str);
            
$str .= $sql;  
            
$str .= "\n";
        }    
        
$res1 pg_query("SELECT pg_index.indisprimary,
                pg_catalog.pg_get_indexdef(pg_index.indexrelid)
                FROM pg_catalog.pg_class c, pg_catalog.pg_class c2,
                pg_catalog.pg_index AS pg_index
                WHERE c.relname = '$table'
                AND c.oid = pg_index.indrelid
                AND pg_index.indexrelid = c2.oid
                AND pg_index.indisprimary"
);
        while(
$r pg_fetch_row($res1)) { 
            
$str .= "\n\n--\n";
            
$str .= "-- Creando Indices para: '$table'";
            
$str .= "\n--\n\n";
            
$t str_replace("CREATE UNIQUE INDEX"""$r[1]);
            
$t str_replace("USING btree""|"$t);
            
// Next Line Can be improved!!!
            
$t str_replace("ON""|"$t);
            
$Temparray explode("|"$t);
            
$str .= "ALTER TABLE ONLY "$Temparray[1] . " ADD CONSTRAINT " $Temparray[0] . " PRIMARY KEY " $Temparray[2] .";\n";
        }   
      } 
      
$res pg_query(" SELECT
      cl.relname AS tabela,ct.conname,
       pg_get_constraintdef(ct.oid) 
       FROM pg_catalog.pg_attribute a
       JOIN pg_catalog.pg_class cl ON (a.attrelid = cl.oid AND cl.relkind = 'r')
       JOIN pg_catalog.pg_namespace n ON (n.oid = cl.relnamespace)
       JOIN pg_catalog.pg_constraint ct ON (a.attrelid = ct.conrelid AND
       ct.confrelid != 0 AND ct.conkey[1] = a.attnum)
       JOIN pg_catalog.pg_class clf ON (ct.confrelid = clf.oid AND clf.relkind = 'r')
       JOIN pg_catalog.pg_namespace nf ON (nf.oid = clf.relnamespace)
       JOIN pg_catalog.pg_attribute af ON (af.attrelid = ct.confrelid AND
       af.attnum = ct.confkey[1]) order by cl.relname "
);
      while(
$row pg_fetch_row($res)) {
        
$str .= "\n\n--\n";
        
$str .= "-- Creando relaciones para: '".$row[0]."'";
        
$str .= "\n--\n\n";
        
$str .= "ALTER TABLE ONLY ".$row[0] . " ADD CONSTRAINT " $row[1] . " " $row[2] . ";"
      }       
      
fwrite($back,$str); 
      
fclose($back); 
      
dl_file("$archivo");
?>
Funciona regularmen ya que no me crea las secuencias, y no se como podría integrar para que me cree las secuencias.

De ante mano muchas gracias por su antención, y esperando su pronta ayuda.

Walleska
  #2 (permalink)  
Antiguo 09/03/2009, 08:05
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Crear sequencias postgres con php

Estoy haciendo un respaldo de una base de datos postgres a través de php. Pero lo que no consigo es crear las secuencias (campo serial).

Agradezco toda la ayuda posible.

Walleska
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:57.