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
I forgot to mention, that this will only reproduce if the project is using
GeneratedFieldin one of its models, otherwise it's not reached.