Django4.0 模型和數(shù)據(jù)庫(kù)-表空間(Tablespaces)

2022-03-16 18:02 更新

為表格申明表空間

表空間可被指定給特定模型生成的數(shù)據(jù)表,通過(guò)在該模型的 ?class Meta? 中提供 ?db_tablespace選項(xiàng)。該選項(xiàng)也影響此模型中為 ManyToManyField 自動(dòng)創(chuàng)建的數(shù)據(jù)表。
你可以用 ?DEFAULT_TABLESPACE ?配置為 ?db_tablespace ?指定一個(gè)默認(rèn)值。這在配置內(nèi)置的 Django 應(yīng)用或其它你無(wú)法修改代碼的應(yīng)用的表空間時(shí)非常有用。

為索引申明表空間

你可以為 ?Index ?構(gòu)造器傳入 ?db_tablespace ?選項(xiàng)指定索引使用的表空間名。對(duì)于單個(gè)字段的索引,你可以向 ?Field ?構(gòu)造器傳入 ?db_tablespace ?選項(xiàng),為字段列索引指定可選的表空間。若此列沒(méi)有索引,會(huì)忽略該選項(xiàng)。
你可以用 ?DEFAULT_INDEX_TABLESPACE ?配置項(xiàng)為 ?db_tablespace ?指定一個(gè)默認(rèn)值。
若未指定 ?db_tablespace ?和 ?DEFAULT_INDEX_TABLESPACE?,索引會(huì)在與數(shù)據(jù)表相同的表空間中創(chuàng)建。

一個(gè)例子

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)
    shortcut = models.CharField(max_length=7)
    edges = models.ManyToManyField(to="self", db_tablespace="indexes")

    class Meta:
        db_tablespace = "tables"
        indexes = [models.Index(fields=['shortcut'], db_tablespace='other_indexes')]

本例中, ?TablespaceExample ?模型(即模型表和多對(duì)多表)創(chuàng)建的表會(huì)被存在 ?tables ?表空間。名稱字段和多對(duì)多表的索引會(huì)被存在該 ?indexes ?表空間中。 ?data ?字段也會(huì)生成一個(gè)索引,但因?yàn)椴⑽礊槠渲付ū砜臻g,所以它會(huì)被默認(rèn)存入模型的表空間 ?tables ?中。 ?shortcut ?字段的索引會(huì)被存入 ?other_indexes ?表空間。

數(shù)據(jù)庫(kù)支持

PostgreSQL 和 Oracle 支持表空間。而 SQLite, MariaDB 和 MySQL 不支持。

若你使用的后端不支持表空間,Django 會(huì)忽略所有與表空間相關(guān)的選項(xiàng)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)