Opened 50 minutes ago

Last modified 48 minutes ago

#37285 new Bug

`manage.py check` started requiring DB to exist (PostgreSQL)

Reported by: Ran Benita Owned by:
Component: Core (System checks) Version: 6.1
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Hi,

I just attempted 6.0 -> 6.1 upgrade, and found that ./manage.py check started requiring the DB to exist. I am using PostgreSQL, and the traceback suggests this may be PG-backend-specific due to the new PG supports_virtual_generated_columns feature in 6.1. It checks the PG version which I guess needs an active DB connection.

This is a problem for me because I run ./manage.py check in CI without the DB present. I think it makes sense because I run it in the "lint" phase of my CI checks, and there has not previously been a reason to have the DB exist in CI (note this is the e.g. mydb defined in DATABASES, not test_mydb).

If this is intended behavior that check requires a DB to be present, and my use just happened to work before, it's easy enough to workaround, but I thought perhaps it might not be intended.

Traceback:

$ ./manage.py check
Traceback (most recent call last):
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/base/base.py", line 279, in ensure_connection
    self.connect()
    ~~~~~~~~~~~~^^
  File "snipped/.venv/lib/python3.14/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/base/base.py", line 256, in connect
    self.connection = self.get_new_connection(conn_params)
                      ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/postgresql/base.py", line 345, in get_new_connection
    connection = self.Database.connect(**conn_params)
  File "snipped/.venv/lib/python3.14/site-packages/psycopg/connection.py", line 122, in connect
    raise last_ex.with_traceback(None)
psycopg.OperationalError: connection failed: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  database "mydb" does not exist

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

Traceback (most recent call last):
  File "snipped/manage.py", line 5, in <module>
    main()
    ~~~~^^
  File "snipped/manage.py", line 73, in main
    execute_from_command_line(sys.argv)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
    ~~~~~~~~~~~~~~~^^
  File "snipped/.venv/lib/python3.14/site-packages/django/core/management/__init__.py", line 437, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/core/management/base.py", line 422, in run_from_argv
    self.execute(*args, **cmd_options)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/core/management/base.py", line 466, in execute
    output = self.handle(*args, **options)
  File "snipped/.venv/lib/python3.14/site-packages/django/core/management/commands/check.py", line 81, in handle
    self.check(
    ~~~~~~~~~~^
        app_configs=app_configs,
        ^^^^^^^^^^^^^^^^^^^^^^^^
    ...<4 lines>...
        databases=options["databases"],
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "snipped/.venv/lib/python3.14/site-packages/django/core/management/base.py", line 498, in check
    all_issues = checks.run_checks(
        app_configs=app_configs,
    ...<2 lines>...
        databases=databases,
    )
  File "snipped/.venv/lib/python3.14/site-packages/django/core/checks/registry.py", line 99, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
  File "snipped/.venv/lib/python3.14/site-packages/django/core/checks/model_checks.py", line 36, in check_all_models
    errors.extend(model.check(**kwargs))
                  ~~~~~~~~~~~^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/db/models/base.py", line 1785, in check
    *cls._check_fields(**kwargs),
     ~~~~~~~~~~~~~~~~~^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/db/models/base.py", line 1948, in _check_fields
    errors.extend(field.check(**kwargs))
                  ~~~~~~~~~~~^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/db/models/fields/generated.py", line 84, in check
    *self._check_supported(databases),
     ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/db/models/fields/generated.py", line 135, in _check_supported
    connection.features.supports_virtual_generated_columns
  File "snipped/.venv/lib/python3.14/site-packages/django/utils/functional.py", line 47, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ~~~~~~~~~^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/postgresql/features.py", line 186, in is_postgresql_18
    return self.connection.pg_version >= 180000
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/utils/functional.py", line 47, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ~~~~~~~~~^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/postgresql/base.py", line 556, in pg_version
    with self.temporary_connection():
         ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File ".local/share/uv/python/cpython-3.14.6-linux-x86_64-gnu/lib/python3.14/contextlib.py", line 141, in __enter__
    return next(self.gen)
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/base/base.py", line 695, in temporary_connection
    with self.cursor() as cursor:
         ~~~~~~~~~~~^^
  File "snipped/.venv/lib/python3.14/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/base/base.py", line 320, in cursor
    return self._cursor()
           ~~~~~~~~~~~~^^
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/base/base.py", line 296, in _cursor
    self.ensure_connection()
    ~~~~~~~~~~~~~~~~~~~~~~^^
  File "snipped/.venv/lib/python3.14/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/base/base.py", line 278, in ensure_connection
    with self.wrap_database_errors:
         ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/db/utils.py", line 94, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/base/base.py", line 279, in ensure_connection
    self.connect()
    ~~~~~~~~~~~~^^
  File "snipped/.venv/lib/python3.14/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/base/base.py", line 256, in connect
    self.connection = self.get_new_connection(conn_params)
                      ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "snipped/.venv/lib/python3.14/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "snipped/.venv/lib/python3.14/site-packages/django/db/backends/postgresql/base.py", line 345, in get_new_connection
    connection = self.Database.connect(**conn_params)
  File "snipped/.venv/lib/python3.14/site-packages/psycopg/connection.py", line 122, in connect
    raise last_ex.with_traceback(None)
django.db.utils.OperationalError: connection failed: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  database "mydb" does not exist

Change History (1)

comment:1 by Ran Benita, 48 minutes ago

I forgot to mention, that this will only reproduce if the project is using GeneratedField in one of its models, otherwise it's not reached.

Note: See TracTickets for help on using tickets.
Back to Top