[Catalyst] Weird -d flag and txn_do interaction...

Marcello Romani mromani at ottotecnica.com
Mon Aug 27 16:10:23 GMT 2007


Hi,
     I'm developing an app using cat and dbic, with postgresql 8.1.
I've got a table with a "unique" column.

When I try to insert a record that violates that constraint (the code is =

executed via txn_do($coderef)), I obviously get an exception from DBIC.

The problem is that if I run myapp_server without the -d flag, the =

exception string is correct; but if I run it _with_ the -d flag istead, =

the error gets cleared by a SELECT(*) COUNT executed with apparently no =

reason after the failing INSERT() query.
Therefore the error string I get is something like "command ignored =

until end of transaction block."

The connection options include AutoCommit=3D1.

The two attachments include the log output of myapp_server.pl for =

exactly the same http POST request, with and without the -d flag =

respectively.

Thanks in advance for any help.

-- =

Marcello Romani
Responsabile IT
Ottotecnica s.r.l.
http://www.ottotecnica.com
-------------- next part --------------
marcello at serverlinux ~/perl/LettereAttivazione $ DBI_TRACE=3D1 perl -Mlib=
=3Dlib script/lettereattivazione_server.pl
    DBI 1.58-nothread default trace level set to 0x0/1 (pid 7375) at DBI.pm=
 line 271 via DBI.pm line 8
You can connect to your server at http://serverlinux:3000
    -> DBI->connect(dbi:Pg:database=3DLettereAttivazione, la, ****, HASH(0x=
90767ec))
    -> DBI->install_driver(Pg) for linux perl=3D5.008008 pid=3D7375 ruid=3D=
1010 euid=3D1010
       install_driver: DBD::Pg version 1.49 loaded from /usr/lib/perl5/site=
_perl/5.8.8/i686-linux/DBD/Pg.pm
    <- install_driver=3D DBI::dr=3DHASH(0x907e870)
    !! warn: 0 CLEARED by call to connect method
    <- connect('database=3DLettereAttivazione' 'la' ...)=3D DBI::db=3DHASH(=
0x90e9cf0) at DBI.pm line 633
    <- STORE('RaiseError' 1)=3D 1 at DBI.pm line 685
    <- STORE('PrintError' 1)=3D 1 at DBI.pm line 685
    <- STORE('AutoCommit' 1)=3D 1 at DBI.pm line 685
    <- STORE('Username' 'la')=3D 1 at DBI.pm line 688
    <> FETCH('Username')=3D 'la' ('Username' from cache) at DBI.pm line 688
    <- connected('dbi:Pg:database=3DLettereAttivazione' 'la' ...)=3D undef =
at DBI.pm line 694
    <- connect=3D DBI::db=3DHASH(0x90e9cf0)
    <- STORE('dbi_connect_closure' CODE(0x90e9864))=3D 1 at DBI.pm line 703
    <- STORE('HandleError' CODE(0x90e9f00))=3D 1 at DBI.pm line 782
    <- STORE('ShowErrorStatement' 1)=3D 1 at DBI.pm line 783
    <- STORE('RaiseError' 1)=3D 1 at DBI.pm line 784
    <- STORE('PrintError' 0)=3D 1 at DBI.pm line 785
    <- FETCH('AutoCommit')=3D 1 at Grouped.pm line 270
    <- FETCH('Driver')=3D DBI::dr=3DHASH(0x907e870) at DBI.pm line 738
    <> FETCH('Name')=3D 'Pg' ('Name' from cache) at DBI.pm line 738
    <- FETCH('Active')=3D 1 at DBI.pm line 673
    <- ping=3D 1 at DBI.pm line 673
    <- FETCH('Active')=3D 1 at DBI.pm line 673
    <- ping=3D 1 at DBI.pm line 673
    <- begin_work=3D 1 at DBI.pm line 809
    <- FETCH('Active')=3D 1 at DBI.pm line 673
    <- ping=3D 1 at DBI.pm line 673
    <- FETCH('Driver')=3D DBI::dr=3DHASH(0x907e870) at DBI.pm line 66
    <> FETCH('Name')=3D 'Pg' ('Name' from cache) at DBI.pm line 66
    <- FETCH('Driver')=3D DBI::dr=3DHASH(0x907e870) at Limit.pm line 301
    <> FETCH('Name')=3D 'Pg' ('Name' from cache) at Limit.pm line 301
    <- FETCH('Driver')=3D DBI::dr=3DHASH(0x907e870) at Limit.pm line 338
    <> FETCH('Name')=3D 'Pg' ('Name' from cache) at Limit.pm line 338
    <- prepare_cached('INSERT INTO accordi_quadro (codice, data, descrizion=
e, importo_totale, perc_otto) VALUES (?, ?, ?, ?, ?)' HASH(0x90f8df4) ...)=
=3D DBI::st=3DHASH(0x90f8e78) at DBI.pm line 1116
    <- bind_param(1 '3' ...)=3D 1 at DBI.pm line 932
    <- bind_param(2 '2007-01-01' ...)=3D 1 at DBI.pm line 932
    <- bind_param(3 'description' ...)=3D 1 at DBI.pm line 932
    <- bind_param(4 100 ...)=3D 1 at DBI.pm line 932
    <- bind_param(5 65 ...)=3D 1 at DBI.pm line 932
    !! ERROR: 7 'ERROR:  una chiave duplicata viola il vincolo "accordi_qua=
dro_codice_key"
' (err#0)
    <- execute=3D undef at DBI.pm line 938
    -> HandleError on DBI::st=3DHASH(0x90f8e3c) via CODE(0x90e9f00) (undef)
       ERROR: 7 'ERROR:  una chiave duplicata viola il vincolo "accordi_qua=
dro_codice_key"
' (err#0)
    <- FETCH('Active')=3D 1 at DBI.pm line 673
       ERROR: 7 'ERROR:  una chiave duplicata viola il vincolo "accordi_qua=
dro_codice_key"
' (err#0)
    <- ping=3D 4 at DBI.pm line 673
    !! ERROR: 7 CLEARED by call to rollback method
    <- rollback=3D 1 at DBI.pm line 838
-------------- next part --------------
marcello at serverlinux ~/perl/LettereAttivazione $ DBI_TRACE=3D1 perl -Mlib=
=3Dlib script/lettereattivazione_server.pl -d
    DBI 1.58-nothread default trace level set to 0x0/1 (pid 7372) at DBI.pm=
 line 271 via DBI.pm line 8
[debug] Debug messages enabled
[debug] Loaded plugins:
.--------------------------------------------------------------------------=
--.
| Catalyst::Plugin::ConfigLoader  0.14                                     =
  |
| Catalyst::Plugin::FormValidator  0.02                                    =
  |
| Catalyst::Plugin::StackTrace  0.06                                       =
  |
| Catalyst::Plugin::Static::Simple  0.17                                   =
  |
'--------------------------------------------------------------------------=
--'

[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine::HTTP"
[debug] Found home "/home/marcello/perl/LettereAttivazione"
[debug] Loaded components:
.-----------------------------------------------------------------+--------=
--.
| Class                                                           | Type   =
  |
+-----------------------------------------------------------------+--------=
--+
| LettereAttivazione::WebApp::Controller::AccordiQuadro           | instanc=
e |
| LettereAttivazione::WebApp::Controller::Base                    | instanc=
e |
| LettereAttivazione::WebApp::Controller::LettereAttivazione      | instanc=
e |
| LettereAttivazione::WebApp::Controller::Root                    | instanc=
e |
| LettereAttivazione::WebApp::Model::DB::Schema                   | instanc=
e |
| LettereAttivazione::WebApp::Model::DB::Schema::AccordiQuadro    | class  =
  |
| LettereAttivazione::WebApp::Model::DB::Schema::AccordiQuadroVi- | class  =
  |
| ew                                                              |        =
  |
| LettereAttivazione::WebApp::Model::DB::Schema::Addenda          | class  =
  |
| LettereAttivazione::WebApp::Model::DB::Schema::LettereAttivazi- | class  =
  |
| one                                                             |        =
  |
| LettereAttivazione::WebApp::Model::DB::Schema::Regioni          | class  =
  |
| LettereAttivazione::WebApp::View::TT::Std                       | instanc=
e |
'-----------------------------------------------------------------+--------=
--'

[debug] Loaded Private actions:
.----------------------+--------------------------------------+------------=
--.
| Private              | Class                                | Method     =
  |
+----------------------+--------------------------------------+------------=
--+
| /index               | LettereAttivazione::WebApp::Control- | index      =
  |
|                      | ler::Root                            |            =
  |
| /end                 | LettereAttivazione::WebApp::Control- | end        =
  |
|                      | ler::Root                            |            =
  |
| /accordiquadro/crea- | LettereAttivazione::WebApp::Control- | create     =
  |
| te                   | ler::AccordiQuadro                   |            =
  |
| /accordiquadro/defa- | LettereAttivazione::WebApp::Control- | default    =
  |
| ult                  | ler::AccordiQuadro                   |            =
  |
| /accordiquadro/list  | LettereAttivazione::WebApp::Control- | list       =
  |
|                      | ler::AccordiQuadro                   |            =
  |
| /lettereattivazione- | LettereAttivazione::WebApp::Control- | default    =
  |
| /default             | ler::LettereAttivazione              |            =
  |
| /lettereattivazione- | LettereAttivazione::WebApp::Control- | list       =
  |
| /list                | ler::LettereAttivazione              |            =
  |
'----------------------+--------------------------------------+------------=
--'

[debug] Loaded Path actions:
.-------------------------------------+------------------------------------=
--.
| Path                                | Private                            =
  |
+-------------------------------------+------------------------------------=
--+
| /accordiquadro/create               | /accordiquadro/create              =
  |
| /accordiquadro/list                 | /accordiquadro/list                =
  |
| /lettereattivazione/list            | /lettereattivazione/list           =
  |
'-------------------------------------+------------------------------------=
--'

[info] Gestione lettere attivazione Enel powered by Catalyst 5.7007
You can connect to your server at http://serverlinux:3000
    -> DBI->connect(dbi:Pg:database=3DLettereAttivazione, la, ****, HASH(0x=
907f5a0))
    -> DBI->install_driver(Pg) for linux perl=3D5.008008 pid=3D7372 ruid=3D=
1010 euid=3D1010
       install_driver: DBD::Pg version 1.49 loaded from /usr/lib/perl5/site=
_perl/5.8.8/i686-linux/DBD/Pg.pm
    <- install_driver=3D DBI::dr=3DHASH(0x907fc90)
    !! warn: 0 CLEARED by call to connect method
    <- connect('database=3DLettereAttivazione' 'la' ...)=3D DBI::db=3DHASH(=
0x90f357c) at DBI.pm line 633
    <- STORE('RaiseError' 1)=3D 1 at DBI.pm line 685
    <- STORE('PrintError' 1)=3D 1 at DBI.pm line 685
    <- STORE('AutoCommit' 1)=3D 1 at DBI.pm line 685
    <- STORE('Username' 'la')=3D 1 at DBI.pm line 688
    <> FETCH('Username')=3D 'la' ('Username' from cache) at DBI.pm line 688
    <- connected('dbi:Pg:database=3DLettereAttivazione' 'la' ...)=3D undef =
at DBI.pm line 694
    <- connect=3D DBI::db=3DHASH(0x90f357c)
    <- STORE('dbi_connect_closure' CODE(0x90ed1c4))=3D 1 at DBI.pm line 703
    <- STORE('HandleError' CODE(0x90f378c))=3D 1 at DBI.pm line 782
    <- STORE('ShowErrorStatement' 1)=3D 1 at DBI.pm line 783
    <- STORE('RaiseError' 1)=3D 1 at DBI.pm line 784
    <- STORE('PrintError' 0)=3D 1 at DBI.pm line 785
    <- FETCH('AutoCommit')=3D 1 at Grouped.pm line 270
    <- FETCH('Driver')=3D DBI::dr=3DHASH(0x907fc90) at DBI.pm line 738
    <> FETCH('Name')=3D 'Pg' ('Name' from cache) at DBI.pm line 738
    <- FETCH('Active')=3D 1 at DBI.pm line 673
    <- ping=3D 1 at DBI.pm line 673
    <- FETCH('Active')=3D 1 at DBI.pm line 673
    <- ping=3D 1 at DBI.pm line 673
    <- begin_work=3D 1 at DBI.pm line 809
    <- FETCH('Active')=3D 1 at DBI.pm line 673
    <- ping=3D 1 at DBI.pm line 673
    <- FETCH('Driver')=3D DBI::dr=3DHASH(0x907fc90) at DBI.pm line 66
    <> FETCH('Name')=3D 'Pg' ('Name' from cache) at DBI.pm line 66
    <- FETCH('Driver')=3D DBI::dr=3DHASH(0x907fc90) at Limit.pm line 301
    <> FETCH('Name')=3D 'Pg' ('Name' from cache) at Limit.pm line 301
    <- FETCH('Driver')=3D DBI::dr=3DHASH(0x907fc90) at Limit.pm line 338
    <> FETCH('Name')=3D 'Pg' ('Name' from cache) at Limit.pm line 338
    <- prepare_cached('INSERT INTO accordi_quadro (codice, data, descrizion=
e, importo_totale, perc_otto) VALUES (?, ?, ?, ?, ?)' HASH(0x910b498) ...)=
=3D DBI::st=3DHASH(0x910b51c) at DBI.pm line 1116
    <- bind_param(1 '3' ...)=3D 1 at DBI.pm line 932
    <- bind_param(2 '2007-01-01' ...)=3D 1 at DBI.pm line 932
    <- bind_param(3 'description' ...)=3D 1 at DBI.pm line 932
    <- bind_param(4 100 ...)=3D 1 at DBI.pm line 932
    <- bind_param(5 65 ...)=3D 1 at DBI.pm line 932
    !! ERROR: 7 'ERROR:  una chiave duplicata viola il vincolo "accordi_qua=
dro_codice_key"
' (err#0)
    <- execute=3D undef at DBI.pm line 938
    -> HandleError on DBI::st=3DHASH(0x910b4e0) via CODE(0x90f378c) (undef)
    !! ERROR: 7 CLEARED by call to prepare_cached method
    <- prepare_cached('SELECT COUNT( * ) FROM accordi_quadro me' HASH(0x912=
566c) ...)=3D DBI::st=3DHASH(0x8e6beac) at DBI.pm line 1116
    !! ERROR: 7 'ERROR:  current transaction is aborted, commands ignored u=
ntil end of transaction block
' (err#0)
    <- execute=3D undef at DBI.pm line 938
    -> HandleError on DBI::st=3DHASH(0x912569c) via CODE(0x90f378c) (undef)
    !! ERROR: 7 CLEARED by call to prepare_cached method
    <- prepare_cached('SELECT COUNT( * ) FROM accordi_quadro me' HASH(0x911=
b784) ...)=3D DBI::st=3DHASH(0x8e6beac) at DBI.pm line 1116
    !! ERROR: 7 'ERROR:  current transaction is aborted, commands ignored u=
ntil end of transaction block
' (err#0)
    <- execute=3D undef at DBI.pm line 938
    -> HandleError on DBI::st=3DHASH(0x912569c) via CODE(0x90f378c) (undef)
       ERROR: 7 'ERROR:  current transaction is aborted, commands ignored u=
ntil end of transaction block
' (err#0)
    <- FETCH('Active')=3D 1 at DBI.pm line 673
       ERROR: 7 'ERROR:  current transaction is aborted, commands ignored u=
ntil end of transaction block
' (err#0)
    <- ping=3D 4 at DBI.pm line 673
    !! ERROR: 7 CLEARED by call to rollback method
    <- rollback=3D 1 at DBI.pm line 838


More information about the Catalyst mailing list