Re: Problems inserting data into a table with a sequence

From: Greg Smith <gsmith(at)gregsmith(dot)com>
To: RNG <rgasch(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Problems inserting data into a table with a sequence
Date: 2007-10-16 04:39:20
Message-ID: Pine.GSO.4.64.0710160012050.3479@westnet.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Mon, 15 Oct 2007, RNG wrote:

> Trying to insert data into this table using the following SQL
> INSERT INTO pn_categories_category
> (cat_id,cat_parent_id,cat_name,cat_display_name,cat_display_desc,cat_cr_date,cat_cr_uid,cat_lu_date,cat_lu_uid)VALUES
> (DEFAULT,'2','FAQ','a:1:{s:3:\"eng\";s:3:\"FAQ\";}','a:1:{s:3:\"eng\";s:26:\"Frequently
> Asked Questions\";}','2007-10-15 23:47:59',0,'2007-10-15 23:47:59',0)
>
> gives us the following error:
> ERROR: duplicate key violates unique constraint "pn_categories_category_pkey"

Hey, this bug looks familiar; wait, that's because I reported it. Sorry I
haven't been keeping with the PostNuke NOC activity, been out of town
since this topic became active again. You can reach me off-list to follow
up, but since you've asked here I'll answer publicly to satisfy everyone's
curiousity.

The problem is that you're inserting a starter set of categories right
after the pn_categories_category table is created that aren't using the
sequence; here's some samples of what I'm seeing in the logs (edit your
postgresql.conf file and change "log_statement = 'all'" if you want this
detail):

INSERT INTO pn_categories_category
(cat_id,cat_parent_id,cat_is_locked,cat_is_leaf,cat_name,cat_display_name,cat_display_desc,cat_path,cat_ipath,cat_status,cat_cr_date,cat_cr_uid,cat_lu_date,cat_lu_uid)VALUES
(1,0,1,0,'__SYSTEM__','b:0;','b:0;','/__SYSTEM__','/1','A','2007-10-15
23:57:00',0,'2007-10-15 23:57:00',0)

INSERT INTO pn_categories_category
(cat_id,cat_parent_id,cat_is_locked,cat_is_leaf,cat_name,cat_display_name,cat_display_desc,cat_path,cat_ipath,cat_status,cat_cr_date,cat_cr_uid,cat_lu_date,cat_lu_uid)VALUES
(2,1,0,0,'Modules','a:1:{s:3:\"eng\";s:7:\"Modules\";}','a:1:{s:3:\"eng\";s:0:\"\";}','/__SYSTEM__/Modules','/1/2','A','2007-10-15
23:57:00',0,'2007-10-15 23:57:00',0)

There are more; there are manually assigned category IDs from 1 to 37 (the
final one is '37,30,0,0,'Sports',...'). Then you manually insert category
9999:

INSERT INTO pn_categories_category
(cat_id,cat_cr_date,cat_cr_uid,cat_lu_date,cat_lu_uid)VALUES
(9999,'2007-10-15 23:57:00',0,'2007-10-15 23:57:00',0)

which will keep the workaround Tom already suggested from working quite
the way I think you want it to. The duplicate key errors start showing up
later, after the pn_categories_registry table is created. At that point
more records start getting inserted using the sequence:

INSERT INTO pn_categories_category
(cat_id,cat_parent_id,cat_name,cat_display_name,cat_display_desc,cat_cr_date,cat_cr_uid,cat_lu_date,cat_lu_uid)VALUES
(DEFAULT,'2','FAQ','a:1:{s:3:\"eng\";s:3:\"FAQ\";}','a:1:{s:3:\"eng\";s:26:\"Frequently
Asked Questions\";}','2007-10-15 23:57:04',0,'2007-10-15 23:57:04',0)

But the sequence number wasn't incremented by any of the earlier
insertions, so it's still at a low value. Here's what I got after going
through the whole install process:

postnuke=# select nextval('pn_categories_category_cat_id_seq');
nextval
---------
6

So there are values from 1 to 37 (and 9999) in the table already, but the
sequence number is still set to 1 when you're reaching the first insert
using it (there are 5 of these duplicate key errors which is why the
sequence is up to 6 by the time the install script is done). The actual
statement spitting out the duplicate key error isn't the problem; that one
has the right syntax. The problem here is whatever is doing that initial
population of 1-37&9999 in the table without using the sequence number.

--
* Greg Smith gsmith(at)gregsmith(dot)com http://www.gregsmith.com Baltimore, MD

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Sascha Bohnenkamp 2007-10-16 06:55:11 problem with a column of type timestamp
Previous Message Ow Mun Heng 2007-10-16 04:13:44 Re: reporting tools