I have a problem on postgresql which I think there is a bug in the postgresql, I wrongly implement something. 

There is a table including `colmn1(primary key)`, `colmn2(unique)`, `colmn3`, ...

After an insertion of a row, if I try another insertion with an existing `colmn2` value I am getting a duplicate value error as I expected. But after this unsuccesful try, `colmn1`'s next value is
incremented by 1 although there is no insertion so i am getting rows with id sequences like , `1,2,4,6,9.(3,5,6,7,8` goes for unsuccessful trials).

I need help from the ones who can explain this weird behaviour. 

This information may be useful: I used "`create unique index on tableName (lower(column1))` " query to set unique constraint.
['https://Stackoverflow.com/questions/12423218', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1021294/']
See the [PostgreSQL sequence FAQ](http://www.neilconway.org/docs/sequences/):

> 
> Sequences are intended for generating unique identifiers — not
>  necessarily identifiers that are strictly sequential. If two
>  concurrent database clients both attempt to get a value from a
>  sequence (using nextval()), each client will get a different sequence
>  value. If one of those clients subsequently aborts their transaction,
>  the sequence value that was generated for that client will be unused,
>  creating a gap in the sequence.
> 
> 
> This can't easily be fixed without incurring a significant performance
>  penalty. For more information, see Elein Mustein's "[Gapless Sequences for Primary Keys](http://www.varlena.com/GeneralBits/130.php)" in the General Bits Newsletter.
> 
> 
>
From the [manual](http://www.postgresql.org/docs/current/static/functions-sequence.html):

> 
> Important: Because sequences are non-transactional, changes made by
>  setval are not undone if the transaction rolls back.
> 
> 
> 

In other words, it's normal to have gaps. If you don't want gaps, don't use a sequence.