[Pljava-dev] Problem with primary key

Eric BOYER Eric.Boyer at insa-toulouse.fr
Thu May 18 07:14:43 UTC 2006


Thomas Hallgren a écrit :

>Eric,
>You say that you re-throw the exception in your catch. Yet, in your 
>example you don't do that. Also, to do an e.printStackTrace() might be a 
>bad idea sometimes. If the postmaster runs as a service, there will be 
>no System.out assigned.
>  
>
It was a simple test. In reality, we use log4j !


>Try using the logger instead. Or even better, don't catch the exception 
>at all. Let PL/Java catch it for you. It will print it using the logger. 
>If you set the log_min_messages to DEBUG1, you will get the full 
>stack-trace. Setting the client_min_messages to DEBUG1 means that you'll 
>get the messages propagated to your client.
>  
>
OK but we wan't catch exception for different reasons ...

>I.e.:
>
>public static void traiter(TriggerData td) throws SQLException {
>   Connection conn = DriverManager.getConnection("jdbc:default:connection");
>   Statement stmt = conn.createStatement();
>   stmt.execute("insert into test (lib) values('monlib')");
>}
>
>and then do:
>
>SET client_min_messages TO DEBUG1;
>INSERT INTO test VALUES('monlib');
>
>Regards,
>Thomas Hallgren
>
>Eric BOYER wrote:
>  
>
>>Hello,
>>
>>I have a problem with primary key !
>>
>>I have a simple table like :
>>
>>    Table "public.test"
>> Column | Type | Modifiers
>>--------+------+-----------
>> lib    | text | not null
>>Indexes:
>>    "test_pkey" PRIMARY KEY, btree (lib)
>>
>>I have a fonction :
>>                         List of functions
>> Schema |      Name       | Result data type | Argument data types
>>--------+-----------------+------------------+---------------------
>> public | allominitrigger | "trigger"        |
>>(1 row)
>>
>>My code for this fonction is :
>>public static void traiter(TriggerData td) {
>>             try {
>>            Connection conn = 
>>DriverManager.getConnection("jdbc:default:connection");
>>            Statement stmt = conn.createStatement();
>>            stmt.execute("insert into test (lib) values('monlib')");
>>             }
>>             catch (Exception e) {
>>             e.printStackTrace();
>>          }
>>}
>>
>>I have the trigger :
>>trigtest AFTER INSERT ON test FOR EACH ROW EXECUTE PROCEDURE 
>>allominitrigger()
>>
>>---------
>>My test is :
>>I want insert a row and in my fonction, i wan't to insert the same row 
>>to test the primary key control
>>
>>I insert :
>>insert into test values('monlib');
>>
>>And I have :
>>WARNING:  buffer refcount leak: [003] (rel=1663/16922/164335, 
>>blockNum=1, flags=0x27, refcount=1 1)
>>WARNING:  relcache reference leak: relation "pk_test" not closed
>>WARNING:  relcache reference leak: relation "test" not closed
>>WARNING:  transaction left non-empty SPI stack
>>HINT:  Check for missing "SPI_finish" calls.
>>
>>And When I select values :
>>SELECT * from test;
>>  lib
>>--------
>> monlib
>> monlib
>>(2 rows)
>>
>>My primary key is duplicate !
>>
>>Is it normal ?
>>
>>Of course, if in my catch I have :
>>
>>catch (Exception e) {
>>             e.printStackTrace();
>>            throw e;
>>          }
>>
>>All is OK, postgres doesn't duplicate the primary key !
>>
>>
>>Thanks for your point of vue !
>>
>>eric.
>>_______________________________________________
>>Pljava-dev mailing list
>>Pljava-dev at gborg.postgresql.org
>>http://gborg.postgresql.org/mailman/listinfo/pljava-dev
>>  
>>    
>>
>
>_______________________________________________
>Pljava-dev mailing list
>Pljava-dev at gborg.postgresql.org
>http://gborg.postgresql.org/mailman/listinfo/pljava-dev
>
>  
>




More information about the Pljava-dev mailing list