mirror of
				https://github.com/django/django.git
				synced 2025-10-28 16:16:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ===========
 | ||
| Tablespaces
 | ||
| ===========
 | ||
| 
 | ||
| A common paradigm for optimizing performance in database systems is the use of
 | ||
| `tablespaces`_ to organize disk layout.
 | ||
| 
 | ||
| .. _`tablespaces`: https://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.
 |