专栏"日期"无法自动投射到时区django / postgres的时间戳

时间:2017-05-14 14:25:50

标签: python django postgresql date

当我将日期保存为字符串之前,有一个date字段。但现在我将字段从charfield更改为datetimefield并删除了之前的所有数据。

date = models.DateTimeField(default=timezone.now)

Localy它工作正常,但在生产中,它会在尝试迁移时引发跟随错误。我删除了列,模型,评论和取消注释,删除并再次创建了字段,返回到以前的迁移并再次迁移,但所有这些都没有帮助。

    django.db.utils.ProgrammingError: column "date" cannot be cast automatically to type timestamp with time zone
HINT:  You might need to specify "USING date::timestamp with time zone".

如何正确解决问题?使用django 1.8,python 2.7和postgres

3 个答案:

答案 0 :(得分:0)

在postgres shell中运行:

ALTER TABLE table_name ALTER COLUMN col_name TYPE timestamp with time zone USING col_name::timestamp with time zone

答案 1 :(得分:0)

对于在尝试将整数列转换为时间戳时在Google上发现此问题的任何人:

ALTER TABLE my_table
ALTER COLUMN my_column
TYPE timestamp with time zone
USING to_timestamp(my_column);

答案 2 :(得分:0)

如果您的列不能完全与新列的原始类型转换,请考虑删除旧列并创建一个新列:

  • 注释模型中的列字段
  • makemigration(将为此字段生成一个删除迁移)-> 您将删除所有列数据
  • migrate让模型中的注释再次运行makemigration(现在将使用新列和新列生成新的迁移 数据类型)
  • 再次运行以应用更改

如果您的字段很少,这很好用,但是如果要转换的字段很多,我建议为此编写一个特定的数据迁移