Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » Bases de Datos » Error en la inserción de datos Responder al tema
Nuevo tema


Página 1 de 1  [ 2 mensajes ] 
 
Nota 2012-01-26 05:31 @271

Perlero Nuevo
Registrado: 2011-11-19 06:30 @313
Mensajes: 11
Error en la inserción de datos
Hola, buenos días. Al ejecutar el programa me da este error y no sé por qué. ¿Alguien me podría decir algo? Muchas Gracias.

Este es el error:

DBD::Pg::st execute failed: ERROR: permiso denegado a la relación fasta at fastaparser.pl line 71, <$FH> line 1.
Can't call method "commit" on an undefined value at fastaparser.pl line 76, <$FH> line 1.
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::Pg::db handle dbname=trabajo;host=localhost;port=5432 at fastaparser.pl line 76.



Os dejo el código y la tabla:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use DBI;
  5.  
  6. my($dbhost)='localhost';
  7. my($dbname)='trabajo'; 
  8. my($dbuser)='usuario'; 
  9. my($dbpass)='usuario';
  10.  
  11. my $DOINSERT = 1;
  12.  
  13. if(scalar(@ARGV)>0) {
  14.         # ¿Vamos a testear el parseado o a insertar?
  15.         if($ARGV[0] eq '-t') {
  16.                 shift(@ARGV);
  17.                 $DOINSERT=undef;
  18.         }
  19.         # Ahora, a procesar los ficheros a cargar en la base de datos
  20.         if(scalar(@ARGV)>0) {
  21.                
  22.                 my $dbh = undef;
  23.                 my $fastaEntry = undef;
  24.                
  25.                 if(defined($DOINSERT)) {
  26.                         # Inicializar conexión a la base de datos
  27.                         my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$dbhost;port=5432",
  28.                                                 $dbuser,$dbpass,{RaiseError => 0, AutoCommit => 0});
  29.                        
  30.                         # ¿Se ha podido establecer la conexión?
  31.                         die "Ha habido un problema al conectar con la base de datos: " . $DBI::errstr  unless(defined($dbh));
  32.  
  33.                         $fastaEntry = $dbh -> prepare("INSERT INTO fasta  VALUES (?,?,?,?)");
  34.                 }
  35.                
  36.                 #Además de poder conectarnos, tenemos ficheros de entrada ?
  37.                 foreach my $file (@ARGV) {
  38.                         my $errflag = undef;
  39.                         my($FH);
  40.                         # Abre el fichero, si no está comprimido
  41.                         my $retval;
  42.                         if($file =~ /\.gz$/) {
  43.                                 $retval = open($FH,"gunzip -c $file |");
  44.                         } else {
  45.                                 $retval = open($FH,$file);
  46.                         }
  47.                        
  48.                         # ¿Hemos abierto el fichero?
  49.                         if(defined($retval)) {
  50.                                 my $line;
  51.                                
  52.                                 my $id = undef;        
  53.                                 my $locus = undef;
  54.                                 my $description = undef;
  55.                                 my $name = undef;
  56.  
  57.                                 while($line=<$FH>) {
  58.                                         chomp($line);
  59.  
  60.                                         if($line =~ /^>(\d+)\s(\w+_\d+)\s(.+|\s+)\s\[(.+?)\]/ ){                               
  61.                                                 $id = $1;
  62.                                                 $locus = $2;
  63.                                                 $description = $3;
  64.                                                 $name = $4;                                            
  65.  
  66.                                         }
  67.  
  68.                                         if(defined($id) && defined($locus) && defined ($description) && defined($name)){
  69.  
  70.                                                 if(defined($DOINSERT)){
  71.                                                         $fastaEntry -> execute($id, $locus, $description, $name);
  72.                                                         if(defined($errflag)) {
  73.                                                                 warn "Error al insertar: " . $DBI::errstr;
  74.                                                                 $dbh -> rollback();
  75.                                                         } else {
  76.                                                                 $dbh -> commit();
  77.                                                         }
  78.  
  79.                                                 } else {
  80.                                                         # Simulación, sólo muestra lo que guardaría
  81.                                                         print "TEST: ", $id , "\t", $locus , "\t", $description, "\t", $name, "\n";
  82.  
  83.                                                 }
  84.  
  85.                                                 $id = undef;
  86.                                                 $locus = undef;
  87.                                                 $description = undef;
  88.                                                 $name = undef;
  89.  
  90.                                         }
  91.  
  92.                                 } # Fin del while. Alcanzado el fin de un fichero.     
  93.                         }else{
  94.                                 die "ERROR: No se ha podido abrir el fichero\n";
  95.                         }                      
  96.                         close($FH);
  97.                 }
  98.         } else {
  99.                 die "ERROR: Este programa parsea ficheros del Pfam. Pásame al menos uno, colega\n";
  100.         }
  101. } else {
  102.         die "ERROR: Este programa parsea ficheros del Pfam.\n";
  103. };


La tabla:

Syntax: [ Download ] [ Hide ]
Using sql Syntax Highlighting
  1. CREATE TABLE fasta(
  2.         id              VARCHAR NOT NULL,
  3.         locus           VARCHAR,
  4.         description     VARCHAR,
  5.         name            VARCHAR,
  6.         PRIMARY KEY(id)        
  7. );


Nota 2012-01-26 07:58 @374
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10250
Re: Error en la inserción de datos
El error dice que el usuario 'usuario' no tiene permiso para hacer el 'INSERT' en la base de datos.

Necesitas hacer algo parecido a

GRANT INPUT ON 'trabajo' TO 'usuario';

en la base de datos (o usar algún interfaz gráfico que dialogue con el PostgreSQL, y le cambias los permisos a la base de datos).

_________________
JF^D Perl programming


Responder al tema  [ 2 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO