Re: ERROR: duplicate key violates unique constraint (SOLVED) - Mailing list pgsql-sql

From Khairul Azmi
Subject Re: ERROR: duplicate key violates unique constraint (SOLVED)
Date
Msg-id 40C3DF8D.9090105@mimos.my
Whole thread Raw
In response to Re: ERROR: duplicate key violates unique constraint  (Josh Berkus <josh@agliodbs.com>)
List pgsql-sql
The problem is solved. It is a silly mistake actually. The line

SELECT sid FROM conf_category WHERE               category_name like temp_category and category_status=1;

returns duplicated values. Variable temp_category would be '%dos.rules' 
and there are entries 'dos.rules' and 'ddos.rules' in table 
conf_category which I did not notice until today. So I add the keyword 
DISTINCT and it runs perfectly.
 select * into temp_category from get_root_path(category);       OPEN T1Cursor FOR          SELECT DISTINCT sid FROM
conf_categoryWHERE               category_name like temp_category and category_status=1;
 

Josh Berkus wrote:

>Khairul,
>
>  
>
>>Need help on this problem. I've created two functions. The function
>>should perform a few sql processes. The problem is I got different
>>results when I call the function and when I manually run the sql command.
>>
>>I'm using postgresql 7.4.2.
>>    
>>
>
>Hmmm ... that's odd.  I remember getting this issue early in the 7.2 series 
>but not since.  I'd guess that you're missing something in your function, 
>like the transposition of two fields or an unterminated loop.  You've made 
>that likely because:
>
>  
>
>>RETURNS integer AS '
>>DECLARE
>>    var_f0 alias FOR $1;    -- rh_sign_id
>>    var_f1 alias FOR $2;    -- rh_status
>>    var_f2 alias FOR $3;    -- rh_action
>>    var_f3 alias FOR $4;    -- proto
>>    
>>
>
>... this is a really bad way of dealing with function variables; I certainly 
>can't parse the rest of the function and tell if you've accidentally swapped 
>a var_f3 for a var_f4.   I'd strongly suggest naming your variables clearly, 
>like, for example, calling it "v_proto" instead of "var_f3".  This is 
>"programming 101".
>
>  
>
I am porting this application from ORACLE. So I try my best not to 
change the structure of the original codes. I guess it is still not a 
good excuse for the way I name the variable :).  Anyway thanks Josh.

>>Issue is
>>cews=> select
>>rule_header_add(999,1,'alert','ip','$EXTERNAL_NET','any','$HOME_NET','any',
>>'->','dos.rules',3,0); NOTICE:   INSERT INTO rule_header VALUES 999 1 alert
>>ip $EXTERNAL_NET any $HOME_NET any -> dos.rules 3 2004-06-04
>>15:21:30.448633
>>NOTICE:   INSERT INTO sensor_signature VALUES -1 999
>>CONTEXT:  PL/pgSQL function "rule_header_add" line 26 at perform
>>ERROR:  duplicate key violates unique constraint "sensor_signature_pkey"
>>CONTEXT:  PL/pgSQL function "update_sen_sig" line 16 at SQL statement
>>PL/pgSQL function "rule_header_add" line 26 at perform
>>
>>I thought it might be caused by duplicated data. But ...
>>cews=> insert into rule_header values
>>(268,1,'alert','ip','$EXTERNAL_NET','any','$HOME_NET','any','->','dos.rules
>>',3,current_timestamp,0); INSERT 29393 1
>>
>>And
>>cews=> insert into sensor_signature values (-1,268);
>>INSERT 29394 1
>>    
>>
>
>This isn't the same id you tested with the function.  Mind running the *exact 
>same values* with both command line and function?
>
>Also, I notice that update_sen_sig makes use of a cursor and a loop.   Best 
>guess is that the cursor isn't returning what you think it is, and is looping 
>several times ... thus attempting to insert the same value several times.
>
>Good luck!
>
>  
>



pgsql-sql by date:

Previous
From: Tom Lane
Date:
Subject: Re: SQL DDL: FOREIGN KEY construct and field mapping: unexpected behavior
Next
From: sad
Date:
Subject: empty string casting to typed value