Search Postgresql Archives

Re: Problems inserting data into a table with a sequence

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxx http://www.gregsmith.com Baltimore, MD

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux