I've been able to pull the logs from the system, I think this is the error that occurs in the backend when trying to purge a post on my instance. I'm not sure what it means or why it's occurring, but it does seem to be logged every time I try to purge a deleted post.
piefed_app1 | [2026-01-27 00:58:31,192] ERROR in app: Exception on /post/51/purge [POST]
piefed_app1 | Traceback (most recent call last):
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
piefed_app1 | self.dialect.do_execute(
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~~~^
piefed_app1 | cursor, str_statement, effective_parameters, context
piefed_app1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
piefed_app1 | )
piefed_app1 | ^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
piefed_app1 | cursor.execute(statement, parameters)
piefed_app1 | ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
piefed_app1 | psycopg2.errors.ForeignKeyViolation: update or delete on table "post" violates foreign key constraint "post_vote_post_id_fkey" on table "post_vote"
piefed_app1 | DETAIL: Key (id)=(51) is still referenced from table "post_vote".
piefed_app1 |
piefed_app1 |
piefed_app1 | The above exception was the direct cause of the following exception:
piefed_app1 |
piefed_app1 | Traceback (most recent call last):
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/flask/app.py", line 1511, in wsgi_app
piefed_app1 | response = self.full_dispatch_request()
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/flask/app.py", line 919, in full_dispatch_request
piefed_app1 | rv = self.handle_user_exception(e)
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/flask/app.py", line 917, in full_dispatch_request
piefed_app1 | rv = self.dispatch_request()
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/flask/app.py", line 902, in dispatch_request
piefed_app1 | return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
piefed_app1 | File "/app/app/utils.py", line 1239, in decorated_view
piefed_app1 | return current_app.ensure_sync(func)(*args, **kwargs)
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
piefed_app1 | File "/app/app/post/routes.py", line 1178, in post_purge
piefed_app1 | db.session.commit()
piefed_app1 | ~~~~~~~~~~~~~~~~~^^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/scoping.py", line 597, in commit
piefed_app1 | return self._proxied.commit()
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~^^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2030, in commit
piefed_app1 | trans.commit(_to_root=True)
piefed_app1 | ~~~~~~~~~~~~^^^^^^^^^^^^^^^
piefed_app1 | File "<string>", line 2, in commit
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
piefed_app1 | ret_value = fn(self, *arg, **kw)
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1311, in commit
piefed_app1 | self._prepare_impl()
piefed_app1 | ~~~~~~~~~~~~~~~~~~^^
piefed_app1 | File "<string>", line 2, in _prepare_impl
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
piefed_app1 | ret_value = fn(self, *arg, **kw)
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 1286, in _prepare_impl
piefed_app1 | self.session.flush()
piefed_app1 | ~~~~~~~~~~~~~~~~~~^^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4331, in flush
piefed_app1 | self._flush(objects)
piefed_app1 | ~~~~~~~~~~~^^^^^^^^^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4466, in _flush
piefed_app1 | with util.safe_reraise():
piefed_app1 | ~~~~~~~~~~~~~~~~~^^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
piefed_app1 | raise exc_value.with_traceback(exc_tb)
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 4427, in _flush
piefed_app1 | flush_context.execute()
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~^^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
piefed_app1 | rec.execute(self)
piefed_app1 | ~~~~~~~~~~~^^^^^^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py", line 679, in execute
piefed_app1 | util.preloaded.orm_persistence.delete_obj(
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
piefed_app1 | self.mapper,
piefed_app1 | ^^^^^^^^^^^^
piefed_app1 | uow.states_for_mapper_hierarchy(self.mapper, True, False),
piefed_app1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
piefed_app1 | uow,
piefed_app1 | ^^^^
piefed_app1 | )
piefed_app1 | ^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 193, in delete_obj
piefed_app1 | _emit_delete_statements(
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~~~^
piefed_app1 | base_mapper,
piefed_app1 | ^^^^^^^^^^^^
piefed_app1 | ...<3 lines>...
piefed_app1 | delete,
piefed_app1 | ^^^^^^^
piefed_app1 | )
piefed_app1 | ^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py", line 1471, in _emit_delete_statements
piefed_app1 | c = connection.execute(
piefed_app1 | statement, del_objects, execution_options=execution_options
piefed_app1 | )
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
piefed_app1 | return meth(
piefed_app1 | self,
piefed_app1 | distilled_parameters,
piefed_app1 | execution_options or NO_OPTIONS,
piefed_app1 | )
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
piefed_app1 | return connection._execute_clauseelement(
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
piefed_app1 | self, distilled_params, execution_options
piefed_app1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
piefed_app1 | )
piefed_app1 | ^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
piefed_app1 | ret = self._execute_context(
piefed_app1 | dialect,
piefed_app1 | ...<8 lines>...
piefed_app1 | cache_hit=cache_hit,
piefed_app1 | )
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
piefed_app1 | return self._exec_single_context(
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~~~~~^
piefed_app1 | dialect, context, statement, parameters
piefed_app1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
piefed_app1 | )
piefed_app1 | ^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
piefed_app1 | self._handle_dbapi_exception(
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
piefed_app1 | e, str_statement, effective_parameters, cursor, context
piefed_app1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
piefed_app1 | )
piefed_app1 | ^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
piefed_app1 | raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
piefed_app1 | self.dialect.do_execute(
piefed_app1 | ~~~~~~~~~~~~~~~~~~~~~~~^
piefed_app1 | cursor, str_statement, effective_parameters, context
piefed_app1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
piefed_app1 | )
piefed_app1 | ^
piefed_app1 | File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
piefed_app1 | cursor.execute(statement, parameters)
piefed_app1 | ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
piefed_app1 | sqlalchemy.exc.IntegrityError: (psycopg2.errors.ForeignKeyViolation) update or delete on table "post" violates foreign key constraint "post_vote_post_id_fkey" on table "post_vote"
piefed_app1 | DETAIL: Key (id)=(51) is still referenced from table "post_vote".
piefed_app1 |
piefed_app1 | [SQL: DELETE FROM post WHERE post.id = %(id)s]
piefed_app1 | [parameters: {'id': 51}]
piefed_app1 | (Background on this error at: https://sqlalche.me/e/20/gkpj)

all 9 comments