Skip to content

Still problem with test database name #2185

Description

@BonaFideIT

Hi,

the fix for #2176 is not working for us.

Django: 5.2.6
Channels: 4.3.1
Daphne: 4.2.1
Python: 3.13.5

What we currently know:

multiprocessing.set_start_method("spawn") --> settings.DATABASES["default"]["NAME"] = "foo"
multiprocessing.set_start_method("spawn") --> settings.DATABASES["default"]["TEST"]["NAME"] = None

multiprocessing.set_start_method("fork") --> settings.DATABASES["default"]["NAME"] = "test_foo"
multiprocessing.set_start_method("fork") --> settings.DATABASES["default"]["TEST"]["NAME"] = None

for the following database settings:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "HOST": "localhost",
        "NAME": "foo",
        "USER": "foo",
        "PASSWORD": "foo",
    }
}

and

multiprocessing.set_start_method("spawn") --> settings.DATABASES["default"]["NAME"] = "foo"
multiprocessing.set_start_method("spawn") --> settings.DATABASES["default"]["TEST"]["NAME"] = "test_foo"

multiprocessing.set_start_method("fork") --> settings.DATABASES["default"]["NAME"] = "test_foo"
multiprocessing.set_start_method("fork") --> settings.DATABASES["default"]["TEST"]["NAME"] = "test_foo"

for the following database settings:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "HOST": "localhost",
        "NAME": "foo",
        "USER": "foo",
        "PASSWORD": "foo",
        "TEST": {
            "NAME": "test_foo",
        },
    }
}

Out fix from #2178 now results in a database name test_test_foo for if no test database name was given and for the fork method. The error is:

django.db.utils.OperationalError: connection failed: connection to server at "127.0.0.1", port 5432 failed: FATAL:  database "test_test_foo" does not exist
Multiple connection attempts failed. All failures were:
- host: 'localhost', port: None, hostaddr: '::1': connection failed: connection to server at "::1", port 5432 failed: FATAL:  database "test_test_foo" does not exist
- host: 'localhost', port: None, hostaddr: '127.0.0.1': connection failed: connection to server at "127.0.0.1", port 5432 failed: FATAL:  database "test_test_foo" does not exist
ERROR

We think that multiprocessing.get_start_method() should be used to differentiate between both cases. What do you think?

def set_database_connection():
from django.conf import settings
test_db_name = settings.DATABASES["default"]["TEST"]["NAME"]
if not test_db_name:
test_db_name = TEST_DATABASE_PREFIX + settings.DATABASES["default"]["NAME"]
settings.DATABASES["default"]["NAME"] = test_db_name

should be something like this:

def set_database_connection():
    from django.conf import settings

    test_db_name = settings.DATABASES["default"]["TEST"]["NAME"]
    if not test_db_name and multiprocessing.get_start_method() == "spawn":
        test_db_name = TEST_DATABASE_PREFIX + settings.DATABASES["default"]["NAME"]
    settings.DATABASES["default"]["NAME"] = test_db_name

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions