Repository navigation
PostgreSQL becomes the default backend #1627
Description
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.backenddefaults 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.backendset indatajoint.jsonor 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 thebackendargument ofdj.Connection/dj.Instancecounts 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, andCONTRIBUTING.mdlist 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