Skip to content

Still problem with test database name #2185

@BonaFideIT

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions