使用显式转换将列的数据类型转换为时间戳

Convert data type of column to timestamp using explicit cast

我运行以下命令修复了我在 Django 模型中遇到的 Datefield() 错误。

django.db.utils.ProgrammingError: column "end_date" cannot be cast 
automatically to type timestamp with time zone
HINT:  Specify a USING expression to perform the conversion.

这是我 运行 似乎没有解决问题的行:

ALTER TABLE merged_subscription ALTER COLUMN end_date TYPE timestamp USING to_timestamp(col, 'DD-MON-YYY');

我对postresql不是很熟悉。是不是逻辑有问题?

这是我的 Django 模型供参考:

class Subscription(models.Model):
start_date = models.DateField()
end_date = models.DateField()
date = models.DateTimeField(auto_now_add=True, blank=True)
issue_one = models.ForeignKey(Issue, blank=True, null=True, related_name='issue_one')
issue_two = models.ForeignKey(Issue, blank=True, null=True, related_name='issue_two')
issue_three = models.ForeignKey(Issue, blank=True, null=True, related_name='issue_three')
def __unicode__(self):
    return unicode(self.start_date)
ALTER TABLE merged_subscription
 ALTER COLUMN end_date TYPE timestamp
 USING to_timestamp(<b>end_date</b>, 'DD-MON-YYY');

将占位符 col 替换为实际的列名。
假设 end_date 中的字符串符合给定的(不常见!)模式。 (?)

你确定你没有'DD-MON-YYYY'吗?

如果您确实有一个 date 列,则不需要 USING 子句。在 datetimestamp 之间有一个 implicit 强制转换,只需要一个 assignment 强制转换。

ALTER TABLE merged_subscription
 ALTER COLUMN end_date TYPE timestamp;

详情:

  • Generate series of dates - using date type as input