Skip to content

Janitor fails to delete object with dependencies in Postgres #4767

Open
@petrikoro

Description

@petrikoro

When running the Janitor against a PostgreSQL database, objects with dependencies (e.g., views built on tables) aren’t dropped first, causing the subsequent DROP TABLE operation to fail due to those existing dependencies.

Traceback
2025-06-19 15:41:06,011 - MainThread - sqlmesh.cli - ERROR - Unhandled exception (__init__.py:53)
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/sqlmesh/utils/concurrency.py", line 69, in _process_node
    self.fn(node)
File "/usr/local/lib/python3.12/site-packages/sqlmesh/utils/concurrency.py", line 172, in <lambda>
    lambda s_id: fn(snapshots_by_id[s_id]),
                ^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/snapshot/evaluator.py", line 474, in <lambda>
    lambda s: self._cleanup_snapshot(
            ^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/snapshot/evaluator.py", line 1038, in _cleanup_snapshot
    evaluation_strategy.delete(
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/snapshot/evaluator.py", line 1535, in delete
    self.adapter.drop_table(name)
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/engine_adapter/shared.py", line 334, in internal_wrapper
    return func(*list_args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/engine_adapter/base.py", line 931, in drop_table
    self._drop_object(name=table_name, exists=exists)
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/engine_adapter/base.py", line 959, in _drop_object
    self.execute(exp.Drop(this=exp.to_table(name), kind=kind, exists=exists, **drop_args))
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/engine_adapter/base.py", line 2166, in execute
    self._execute(sql, **kwargs)
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/engine_adapter/base.py", line 2187, in _execute
    self.cursor.execute(sql, **kwargs)
psycopg2.errors.DependentObjectsStillExist: cannot drop table sqlmesh__intermediate.intermediate__int_lesson_events__extracted__2348405816 because other objects depend on it
DETAIL:  view sqlmesh__intermediate.intermediate__int_lessons__unioned__2208384159 depends on table sqlmesh__intermediate.intermediate__int_lesson_events__extracted__2348405816
HINT:  Use DROP ... CASCADE to drop the dependent objects too.


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/sqlmesh/cli/__init__.py", line 51, in _debug_exception_handler
    return func()
            ^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlmesh/cli/__init__.py", line 29, in <lambda>
    return handler(sqlmesh_context, lambda: func(*args, **kwargs))
                                            ^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/analytics/__init__.py", line 82, in wrapper
    return func(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlmesh/cli/main.py", line 570, in janitor
    ctx.obj.run_janitor(ignore_ttl, **kwargs)
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/analytics/__init__.py", line 110, in wrapper
    return func(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/context.py", line 820, in run_janitor
    self._run_janitor(ignore_ttl)
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/context.py", line 2691, in _run_janitor
    self.snapshot_evaluator.cleanup(
File "/usr/local/lib/python3.12/site-packages/sqlmesh/core/snapshot/evaluator.py", line 472, in cleanup
    concurrent_apply_to_snapshots(
File "/usr/local/lib/python3.12/site-packages/sqlmesh/utils/concurrency.py", line 170, in concurrent_apply_to_snapshots
    return concurrent_apply_to_dag(
            ^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlmesh/utils/concurrency.py", line 212, in concurrent_apply_to_dag
    ).run()
    ^^^^^
File "/usr/local/lib/python3.12/site-packages/sqlmesh/utils/concurrency.py", line 64, in run
    self._finished_future.result()
File "/usr/local/lib/python3.12/concurrent/futures/_base.py", line 456, in result
    return self.__get_result()
            ^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
sqlmesh.utils.concurrency.NodeExecutionFailedError: Execution failed for node SnapshotId<"dwh"."intermediate"."int_lesson_events__extracted": 172656272>

sqlmesh v0.192.2, dialect postgres, database postgres

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions