I use frappe with custom apps, without ERP next.
i updated my custom app and ran bench migrate but it resulted in the below error.
Seems like deleting an entry in postgres would fix the problem but too anxious to mess up my production server.
Don’t understand how this happened, had updated my custom app more than 10 times over last 6 months but never had such error.
frappe@6d57b7046983:~/frappe-bench$ bench migrate
Migrating xxxxxxx
Updating DocTypes for frappe : [========================================] 100%
Updating DocTypes for weaving : [========================================] 100%
Updating DocTypes for design_vault : [========================================] 100%
Updating DocTypes for yarn_stock_tracker: [========================================] 100%
Queued rebuilding of search index for xxxxx
Traceback (most recent call last):
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 632, in db_update
frappe.db.sql(
File "/home/frappe/frappe-bench/apps/frappe/frappe/database/database.py", line 230, in sql
self._cursor.execute(query, values)
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/pymysql/cursors.py", line 153, in execute
result = self._query(query)
^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/pymysql/cursors.py", line 322, in _query
conn.query(q)
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py", line 563, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py", line 825, in _read_query_result
result.read()
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py", line 1199, in read
first_packet = self.connection._read_packet()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/pymysql/connections.py", line 775, in _read_packet
packet.raise_for_error()
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/pymysql/protocol.py", line 219, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/pymysql/err.py", line 150, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.IntegrityError: (1062, "Duplicate entry 'Cron-0/15 * * * *-frappe.automation.doctype.reminder.reminder...' for key 'unique_scheduled_job'")
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 114, in <module>
main()
File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 20, in main
click.Group(commands=commands)(prog_name="bench")
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/click/core.py", line 1161, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/click/core.py", line 1082, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/click/core.py", line 1697, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/click/core.py", line 1697, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/click/core.py", line 1443, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/click/core.py", line 788, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/env/lib/python3.11/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/__init__.py", line 29, in _func
ret = f(frappe._dict(ctx.obj), *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/site.py", line 684, in migrate
).run(site=site)
^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/apps/frappe/frappe/migrate.py", line 187, in run
self.post_schema_updates()
File "/home/frappe/frappe-bench/apps/frappe/frappe/migrate.py", line 52, in wrapper
raise e
File "/home/frappe/frappe-bench/apps/frappe/frappe/migrate.py", line 44, in wrapper
ret = method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/apps/frappe/frappe/migrate.py", line 139, in post_schema_updates
sync_jobs()
File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/scheduled_job_type/scheduled_job_type.py", line 203, in sync_jobs
all_events = insert_events(scheduler_events)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/scheduled_job_type/scheduled_job_type.py", line 212, in insert_events
cron_jobs += insert_cron_jobs(events)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/scheduled_job_type/scheduled_job_type.py", line 224, in insert_cron_jobs
insert_single_event("Cron", event, cron_format)
File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/scheduled_job_type/scheduled_job_type.py", line 254, in insert_single_event
doc.save()
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 378, in save
return self._save(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 428, in _save
self.db_update()
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 641, in db_update
self.show_unique_validation_message(e)
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 669, in show_unique_validation_message
raise frappe.UniqueValidationError(self.doctype, self.name, e)
frappe.exceptions.UniqueValidationError: ('Scheduled Job Type', '6arac5u8ts', IntegrityError(1062, "Duplicate entry 'Cron-0/15 * * * *-frappe.automation.doctype.reminder.reminder...' for key 'unique_scheduled_job'"))