| =========== |
| Tablespaces |
| =========== |
| |
| A common paradigm for optimizing performance in database systems is the use of |
| `tablespaces`_ to organize disk layout. |
| |
| .. _`tablespaces`: http://en.wikipedia.org/wiki/Tablespace |
| |
| .. warning:: |
| Django does not create the tablespaces for you. Please refer to your |
| database engine's documentation for details on creating and managing |
| tablespaces. |
| |
| |
| Declaring tablespaces for tables |
| -------------------------------- |
| |
| A tablespace can be specified for the table generated by a model by supplying |
| the :attr:`~django.db.models.Options.db_tablespace` option inside the model's |
| ``class Meta``. This option also affects tables automatically created for |
| :class:`~django.db.models.ManyToManyField`\ s in the model. |
| |
| You can use the :setting:`DEFAULT_TABLESPACE` setting to specify a default value |
| for :attr:`~django.db.models.Options.db_tablespace`. This is useful for setting |
| a tablespace for the built-in Django apps and other applications whose code you |
| cannot control. |
| |
| Declaring tablespaces for indexes |
| --------------------------------- |
| |
| You can pass the :attr:`~django.db.models.Field.db_tablespace` option to a |
| ``Field`` constructor to specify an alternate tablespace for the ``Field``'s |
| column index. If no index would be created for the column, the option is |
| ignored. |
| |
| You can use the :setting:`DEFAULT_INDEX_TABLESPACE` setting to specify |
| a default value for :attr:`~django.db.models.Field.db_tablespace`. |
| |
| If :attr:`~django.db.models.Field.db_tablespace` isn't specified and you didn't |
| set :setting:`DEFAULT_INDEX_TABLESPACE`, the index is created in the same |
| tablespace as the tables. |
| |
| An example |
| ---------- |
| |
| .. code-block:: python |
| |
| class TablespaceExample(models.Model): |
| name = models.CharField(max_length=30, db_index=True, db_tablespace="indexes") |
| data = models.CharField(max_length=255, db_index=True) |
| edges = models.ManyToManyField(to="self", db_tablespace="indexes") |
| |
| class Meta: |
| db_tablespace = "tables" |
| |
| In this example, the tables generated by the ``TablespaceExample`` model (i.e. |
| the model table and the many-to-many table) would be stored in the ``tables`` |
| tablespace. The index for the name field and the indexes on the many-to-many |
| table would be stored in the ``indexes`` tablespace. The ``data`` field would |
| also generate an index, but no tablespace for it is specified, so it would be |
| stored in the model tablespace ``tables`` by default. |
| |
| Database support |
| ---------------- |
| |
| PostgreSQL and Oracle support tablespaces. SQLite and MySQL don't. |
| |
| When you use a backend that lacks support for tablespaces, Django ignores all |
| tablespace-related options. |
| |
| .. versionchanged:: 1.4 |
| Since Django 1.4, the PostgreSQL backend supports tablespaces. |