【问题标题】:Django database model creation and indexing for PostgresPostgres 的 Django 数据库模型创建和索引
【发布时间】:2019-03-09 00:42:06
【问题描述】:

我正在尝试通过 Django 模型创建新表并索引 Postgres 中的列。表创建使用另一个表的设置,索引使用pg_trgm

我可以直接在 Postgres 上通过

CREATE TABLE my_table (like my_other_table);

并像插入数据

INSERT INTO my_table SELECT * FROM MY_OTHER_TABLE TABLESAMPLE BERNOULLI (5);

这会将 my_other_table 中 5% 的数据放入 my_table 中

然后我按列索引

CREATE INDEX mycolumn_trgm_idx ON my_table USING GIN (my_column gin_trgm_ops);

当我直接在 postgres 上执行这些操作时没有问题,但我不知道如何(或者是否可能)通过 django 迁移来做到这一点

【问题讨论】:

    标签: django postgresql


    【解决方案1】:

    我认为这样的事情应该是可能的。首先创建您的 models.py 类,以便它们代表您要从中获取数据的表(也有可能自动发现现有数据库 - 详细信息 here)。对于索引,您可以在所需的模型类字段中设置index_db=True。设置模型后,通过./manage.py makemigrations./manage.py migrate 创建迁移。 Django 应该在它连接的数据库中创建/更新字段。最后,您需要创建自己的迁移并从一个表(模型)中获取所需的数据并将其放入另一个表(模型)中。 Here's 如何编写自定义迁移。不要忘记在迁移文件中编写必要的函数,因为模型方法在迁移期间不起作用。

    【讨论】:

    • 谢谢!我对迁移本身没有任何问题。我只是从来没有使用过像LIKE 这样的命令并且不知道Django 是否支持它。还设置 db_index=True 创建一个默认的 btree 索引,但我正在尝试使用自定义索引,我不知道 django 是否支持。我想我可以在迁移脚本中运行migrations.RunSQL,但我不知道是否有更简洁的方法来做到这一点
    • 也许this 能帮上点忙
    • @JChao 您可以使用 Django 在 PostgreSQL 中创建不同类型的索引。详情在这里:docs.djangoproject.com/en/2.2/ref/contrib/postgres/indexes
    猜你喜欢
    • 2017-06-03
    • 2020-09-11
    • 2021-12-01
    • 2014-03-12
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    相关资源
    最近更新 更多