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:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use DBI;
- my($dbhost)='localhost';
- my($dbname)='trabajo';
- my($dbuser)='usuario';
- my($dbpass)='usuario';
- my $DOINSERT = 1;
- if(scalar(@ARGV)>0) {
- # ¿Vamos a testear el parseado o a insertar?
- if($ARGV[0] eq '-t') {
- shift(@ARGV);
- $DOINSERT=undef;
- }
- # Ahora, a procesar los ficheros a cargar en la base de datos
- if(scalar(@ARGV)>0) {
- my $dbh = undef;
- my $fastaEntry = undef;
- if(defined($DOINSERT)) {
- # Inicializar conexión a la base de datos
- my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$dbhost;port=5432",
- $dbuser,$dbpass,{RaiseError => 0, AutoCommit => 0});
- # ¿Se ha podido establecer la conexión?
- die "Ha habido un problema al conectar con la base de datos: " . $DBI::errstr unless(defined($dbh));
- $fastaEntry = $dbh -> prepare("INSERT INTO fasta VALUES (?,?,?,?)");
- }
- #Además de poder conectarnos, tenemos ficheros de entrada ?
- foreach my $file (@ARGV) {
- my $errflag = undef;
- my($FH);
- # Abre el fichero, si no está comprimido
- my $retval;
- if($file =~ /\.gz$/) {
- $retval = open($FH,"gunzip -c $file |");
- } else {
- $retval = open($FH,$file);
- }
- # ¿Hemos abierto el fichero?
- if(defined($retval)) {
- my $line;
- my $id = undef;
- my $locus = undef;
- my $description = undef;
- my $name = undef;
- while($line=<$FH>) {
- chomp($line);
- if($line =~ /^>(\d+)\s(\w+_\d+)\s(.+|\s+)\s\[(.+?)\]/ ){
- $id = $1;
- $locus = $2;
- $description = $3;
- $name = $4;
- }
- if(defined($id) && defined($locus) && defined ($description) && defined($name)){
- if(defined($DOINSERT)){
- $fastaEntry -> execute($id, $locus, $description, $name);
- if(defined($errflag)) {
- warn "Error al insertar: " . $DBI::errstr;
- $dbh -> rollback();
- } else {
- $dbh -> commit();
- }
- } else {
- # Simulación, sólo muestra lo que guardaría
- print "TEST: ", $id , "\t", $locus , "\t", $description, "\t", $name, "\n";
- }
- $id = undef;
- $locus = undef;
- $description = undef;
- $name = undef;
- }
- } # Fin del while. Alcanzado el fin de un fichero.
- }else{
- die "ERROR: No se ha podido abrir el fichero\n";
- }
- close($FH);
- }
- } else {
- die "ERROR: Este programa parsea ficheros del Pfam. Pásame al menos uno, colega\n";
- }
- } else {
- die "ERROR: Este programa parsea ficheros del Pfam.\n";
- };
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
La tabla: