Skip to content

PostgreSQL becomes the default backend #1627

Open

Description

@dimitri-yatsenko

Motivation

DataJoint supports PostgreSQL and MySQL as production backends, with the same features on both. Today database.backend defaults to "mysql", so a new user who installs DataJoint and connects without configuring a backend gets MySQL.

PostgreSQL becomes the default backend. A new install should work against PostgreSQL with no backend setting, and the documentation, examples, and test runs should lead with it. MySQL stays a fully supported backend; selecting it takes one setting.

The change

  • database.backend defaults to "postgresql", and the default port is 5432.

  • The port follows the backend unless it is set. Today the port is derived only when the settings are first built, so database.backend set in datajoint.json or assigned at run time leaves the other backend's port in place. After this change, backend: "mysql" with no port connects on 3306.

  • If a connection fails while the backend is still the default, so that neither the configuration nor the code chose one, the error adds:

    The default backend is postgresql since DataJoint 2.4; set database.backend='mysql' (DJ_BACKEND=mysql) for a MySQL server.
    

    A backend set by DJ_BACKEND, datajoint.json, dj.config, or the backend argument of dj.Connection / dj.Instance counts as chosen, and its connection errors are raised unchanged.

  • dj.config.save_template() writes "backend": "postgresql" and port 5432.

  • The settings docstring, CLI help, docker-compose.yaml, and CONTRIBUTING.md list PostgreSQL first.

  • The test fixtures that connect to the MySQL test server select MySQL explicitly instead of relying on the default.

Migration for MySQL users

Select the MySQL backend in any one of these ways:

  • Environment: export DJ_BACKEND=mysql

  • datajoint.json:

    {
      "database": {
        "backend": "mysql",
        "host": "db.example.org"
      }
    }
  • In code, before connecting: dj.config["database.backend"] = "mysql"

  • For an isolated instance: dj.Instance(host=..., user=..., password=..., backend="mysql")

With the backend set, the port defaults to 3306. A port set explicitly (DJ_PORT, database.port, or host:port) is kept as is. A MySQL setup that sets no backend fails to connect with the message above.

Activity

  1. added this to the v2.4 milestone on Oct 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementIndicates new improvements

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions