• Publicidad

Error en la inserción de datos

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Error en la inserción de datos

Notapor millen » 2012-01-26 05:31 @271

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:

Sintáxis: [ Descargar ] [ Ocultar ]
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. };
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4


La tabla:

Sintáxis: [ Descargar ] [ Ocultar ]
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. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Publicidad

Re: Error en la inserción de datos

Notapor explorer » 2012-01-26 07:58 @374

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado