mirror of https://github.com/django/django.git
74 lines
2.7 KiB
Plaintext
74 lines
2.7 KiB
Plaintext
|
===========
|
||
|
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.
|