【发布时间】:2021-07-27 07:29:58
【问题描述】:
我在Django 迁移文件中执行了以下原始SQL 命令。我需要使用原始的SQL,因为Django 不支持生成的列。
ALTER TABLE dockets_document ADD COLUMN search_vector tsvector GENERATED ALWAYS AS (
setweight(to_tsvector('english', coalesce(title, '')), 'A') ||
setweight(to_tsvector('english', coalesce(f_arr2text(content),'')), 'B') ||
setweight(jsonb_to_tsvector('english', coalesce(tables), '["all"]'), 'C')
) STORED;
我的models.py 文件有以下字段:
search_vector = SearchVectorField(null=True)
此行触发为我生成列的迁移,然后我的自定义迁移应用SQL。自定义迁移失败,因为该列已创建(具有相应的索引),因此 ADD COLUMN 返回错误 ERROR: column "search_vector" of relation "dockets_document" already exists。我尝试使用ALTER COLUMN 代替ADD COLUMN,但它不起作用(ERROR: syntax error at or near "tsvector")。
我尝试从 models.py 文件中删除该字段,但 Django 不知道该字段存在并且不允许我查询该列。而且感觉去掉也不对。
如何将现有的null 列转换为GENERATED 列?
【问题讨论】:
-
如果您可以发布您的迁移文件 - 或者至少 所有 部分处理您的自定义列,也许会更容易回答这个问题。
标签: python django postgresql