Docker Container 2.5.0 / UniqueViolation: duplicate key value violates unique constraint "_issue_pkey"

SCHLEMMER Norbert <[email protected]> Wed, 29 Oct 2025 07:31:32 +0000
Newsgroups gmane.comp.bug-tracking.roundup.user
Message-ID <DU2PR01MB855724A789A14B35CA979A73E8FAA@DU2PR01MB8557.eurprd01.prod.exchangelabs.com>
Hello All

Running the Roundup Docker container 2.5.0-1 with PostgreSQL 18 and Debian 13 / Trixie as host

An export was created from the productive Roundup instance 2.3.0.
After importing in version 2.5.0, new messages can be added to an existing issue but creating a new issue result in this violation; see logs attached (the import process takes approximately 6 hours...).
It makes no difference whether PostgreSQL 17 or 18 is used.

I will test the import with version 2.3.0 later today.

Thank you in advance for your support.
Br
Norbert



UniqueViolation: duplicate key value violates unique constraint "_issue_pkey" DETAIL: Key (id)=(3) already exists. 	Python 3.13.5
/usr/local/bin/python3.13

A problem occurred while running a Python script. Here is the sequence of function calls leading up to the error, with the most recent (innermost) call first. The exception attributes are:
      __cause__ = None
      __class__ = <class 'psycopg2.errors.UniqueViolation'>
      __context__ = None
      __delattr__ = <method-wrapper '__delattr__' of UniqueViolation object>
      __dict__ = {}
      __dir__ = <built-in method __dir__ of UniqueViolation object>
      __doc__ = None
      __eq__ = <method-wrapper '__eq__' of UniqueViolation object>
      __format__ = <built-in method __format__ of UniqueViolation object>
      __ge__ = <method-wrapper '__ge__' of UniqueViolation object>
      __getattribute__ = <method-wrapper '__getattribute__' of UniqueViolation object>
      __getstate__ = <built-in method __getstate__ of UniqueViolation object>
      __gt__ = <method-wrapper '__gt__' of UniqueViolation object>
      __hash__ = <method-wrapper '__hash__' of UniqueViolation object>
      __init__ = <method-wrapper '__init__' of UniqueViolation object>
      __init_subclass__ = <built-in method __init_subclass__ of type object>
      __le__ = <method-wrapper '__le__' of UniqueViolation object>
      __lt__ = <method-wrapper '__lt__' of UniqueViolation object>
      __module__ = 'psycopg2.errors'
      __ne__ = <method-wrapper '__ne__' of UniqueViolation object>
      __new__ = <built-in method __new__ of type object>
      __reduce__ = <built-in method __reduce__ of UniqueViolation object>
      __reduce_ex__ = <built-in method __reduce_ex__ of UniqueViolation object>
      __repr__ = <method-wrapper '__repr__' of UniqueViolation object>
      __setattr__ = <method-wrapper '__setattr__' of UniqueViolation object>
      __setstate__ = <built-in method __setstate__ of UniqueViolation object>
      __sizeof__ = <built-in method __sizeof__ of UniqueViolation object>
      __str__ = <method-wrapper '__str__' of UniqueViolation object>
      __subclasshook__ = <built-in method __subclasshook__ of type object>
      __suppress_context__ = False
      __traceback__ = <traceback object>
      __weakref__ = None
      add_note = <built-in method add_note of UniqueViolation object>
      args = ('duplicate key value violates unique constraint "_issue_pkey"\nDETAIL: Key (id)=(3) already exists.\n',)
      cursor = <cursor object at 0x7f32fc58ea70; closed: 0>
      diag = <psycopg2.extensions.Diagnostics object>
      pgcode = '23505'
      pgerror = 'ERROR: duplicate key value violates unique cons...ssue_pkey"\nDETAIL: Key (id)=(3) already exists.\n'
      with_traceback = <built-in method with_traceback of UniqueViolation object>

/usr/local/lib/python3.13/site-packages/roundup/backends/rdbms_common.py in sql(self=<roundpsycopgsql 0x7f32fc1f49e0>, sql='insert into _issue (_activity,_actor,_assignedto...us,_title,id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s)', args=('2025-10-29 07:16:36.917', 4, 4, '2025-10-29 07:16:36.917', 4, 4, 8, 'Roundup 2.5.0 : Layout Modifications', '3'), cursor=<cursor object at 0x7f32fc58ea70; closed: 0>)
  260             cursor = self.cursor
  261         if args:
  262             cursor.execute(sql, args)
      cursor = <cursor object at 0x7f32fc58ea70; closed: 0>, global execute = undefined, sql = 'insert into _issue (_activity,_actor,_assignedto...us,_title,id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s)', args = ('2025-10-29 07:16:36.917', 4, 4, '2025-10-29 07:16:36.917', 4, 4, 8, 'Roundup 2.5.0 : Layout Modifications', '3')
  263         else:
  264             cursor.execute(sql)

/usr/local/lib/python3.13/site-packages/roundup/backends/rdbms_common.py in addnode(self=<roundpsycopgsql 0x7f32fc1f49e0>, classname='issue', nodeid='3', node={'assignedto': '4', 'files': [], 'keyword': ['18'], 'messages': [], 'nosy': ['4'], 'priority': '4', 'status': '8', 'superseder': [], 'title': 'Roundup 2.5.0 : Layout Modifications'})
 1078         # perform the inserts
 1079         sql = 'insert into _%s (%s) values (%s)' % (classname, cols, s)
 1080         self.sql(sql, vals)
      self = <roundpsycopgsql 0x7f32fc1f49e0>, sql = 'insert into _issue (_activity,_actor,_assignedto...us,_title,id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s)', vals = ('2025-10-29 07:16:36.917', 4, 4, '2025-10-29 07:16:36.917', 4, 4, 8, 'Roundup 2.5.0 : Layout Modifications', '3')
 1081 
 1082         # insert the multilink rows

/usr/local/lib/python3.13/site-packages/roundup/backends/rdbms_common.py in create_inner(self=<hyperdb.Class "issue">, **propvalues={'assignedto': '4', 'files': [], 'keyword': ['18'], 'messages': [], 'nosy': ['4'], 'priority': '4', 'status': '8', 'superseder': [], 'title': 'Roundup 2.5.0 : Layout Modifications'})
 1860 
 1861         # done
 1862         self.db.addnode(self.classname, newid, propvalues)
      self = <hyperdb.Class "issue">, global db = undefined, global addnode = undefined, global classname = undefined, newid = '3', propvalues = {'assignedto': '4', 'files': [], 'keyword': ['18'], 'messages': [], 'nosy': ['4'], 'priority': '4', 'status': '8', 'superseder': [], 'title': 'Roundup 2.5.0 : Layout Modifications'}
 1863         if self.do_journal:
 1864             self.db.addjournal(self.classname, newid, ''"create", {})

/usr/local/lib/python3.13/site-packages/roundup/backends/rdbms_common.py in create(self=<hyperdb.Class "issue">, **propvalues={'assignedto': '4', 'keyword': ['18'], 'nosy': ['4'], 'priority': '4', 'status': '8', 'title': 'Roundup 2.5.0 : Layout Modifications'})
 1708         """
 1709         self.fireAuditors('create', None, propvalues)
 1710         newid = self.create_inner(**propvalues)
      newid = undefined, self = <hyperdb.Class "issue">, global create_inner = undefined, propvalues = {'assignedto': '4', 'keyword': ['18'], 'nosy': ['4'], 'priority': '4', 'status': '8', 'title': 'Roundup 2.5.0 : Layout Modifications'}
 1711         self.fireReactors('create', newid, None)
 1712         return newid

/usr/local/lib/python3.13/site-packages/roundup/cgi/actions.py in _createnode(self=<roundup.cgi.actions.NewItemAction object>, cn='issue', props={'assignedto': '4', 'keyword': ['18'], 'nosy': ['4'], 'priority': '4', 'status': '8', 'title': 'Roundup 2.5.0 : Layout Modifications'})
  743         # create the node and return its id
  744         cl = self.db.classes[cn]
  745         return cl.create(**props)
      cl = <hyperdb.Class "issue">, global create = undefined, props = {'assignedto': '4', 'keyword': ['18'], 'nosy': ['4'], 'priority': '4', 'status': '8', 'title': 'Roundup 2.5.0 : Layout Modifications'}
  746 
  747     def isEditingSelf(self):

/usr/local/lib/python3.13/site-packages/roundup/cgi/actions.py in _editnodes(self=<roundup.cgi.actions.NewItemAction object>, all_props={('issue', None): {'assignedto': '4', 'keyword': ['18'], 'nosy': ['4'], 'priority': '4', 'status': '8', 'title': 'Roundup 2.5.0 : Layout Modifications'}}, all_links=[('issue', None, 'messages', [('msg', '-1')])])
  686                 else:
  687                     # make a new node
  688                     newid = self._createnode(cn, props)
      newid = undefined, self = <roundup.cgi.actions.NewItemAction object>, global _createnode = undefined, cn = 'issue', props = {'assignedto': '4', 'keyword': ['18'], 'nosy': ['4'], 'priority': '4', 'status': '8', 'title': 'Roundup 2.5.0 : Layout Modifications'}
  689                     if nodeid is None:
  690                         self.nodeid = newid

/usr/local/lib/python3.13/site-packages/roundup/cgi/actions.py in handle(self=<roundup.cgi.actions.NewItemAction object>)
  896         try:
  897             # when it hits the None element, it'll set self.nodeid
  898             messages = self._editnodes(props, links)
      messages = undefined, self = <roundup.cgi.actions.NewItemAction object>, global _editnodes = undefined, props = {('issue', None): {'assignedto': '4', 'keyword': ['18'], 'nosy': ['4'], 'priority': '4', 'status': '8', 'title': 'Roundup 2.5.0 : Layout Modifications'}}, links = [('issue', None, 'messages', [('msg', '-1')])]
  899         except (ValueError, KeyError, IndexError, Reject) as message:
  900             escape = not isinstance(message, RejectRaw)

/usr/local/lib/python3.13/site-packages/roundup/cgi/actions.py in execute(self=<roundup.cgi.actions.NewItemAction object>)
   48         """Execute the action specified by this object."""
   49         self.permission()
   50         return self.handle()
      self = <roundup.cgi.actions.NewItemAction object>, global handle = undefined
   51 
   52     def examine_url(self, url):

/usr/local/lib/python3.13/site-packages/roundup/cgi/client.py in handle_action(self=<roundup.cgi.client.Client object>)
 2406                 return getattr(self, action_klass)()
 2407 
 2408             return action_klass(self).execute()
      action_klass = <class 'roundup.cgi.actions.NewItemAction'>, self = <roundup.cgi.client.Client object>, global execute = undefined
 2409         except (ValueError, Reject) as err:
 2410             escape = not isinstance(err, RejectRaw)

/usr/local/lib/python3.13/site-packages/roundup/cgi/client.py in inner_main(self=<roundup.cgi.client.Client object>)
  907                 # It can change self.classname and self.template,
  908                 # and may also append error/ok_messages.
  909                 html = self.handle_action() if csrf_ok else None
      html = undefined, self = <roundup.cgi.client.Client object>, global handle_action = undefined, csrf_ok = True
  910 
  911                 if html:

 
Environment Variables
CONTENT_LENGTH	'1792'
CONTENT_TYPE	'multipart/form-data; boundary=----geckoformboundary22d88e55123b32825148a07d5667ae74'
HTTP_ACCEPT_LANGUAGE	'de,en-US;q=0.7,en;q=0.3'
HTTP_AUTHORIZATION	None
HTTP_COOKIE	'roundup_session_Roundupissuetracker=yTP8g7rLjQp0JIPplS/xCUslpb2PeMkU3wB/Nx5lABY; _pk_id.1.28af=d4ef3913f72d42f0.1759845249.'