为什么 ALTER TABLE xy ALTER COLUMN ab TYPE 类型在 PostgreSQL 中不起作用?

问题描述

我将 Postgresql 与 Python 结合使用,尽管当前问题的主题似乎是纯 sql

基于PostgreSQL documentation,改变列的类型应该是这样的:

ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);

因此,如果我有一个名为“checks”的表,其中有一列“check_date_time”的类型为“timestamp”,并且我想将其更改为“timestamptz”,那么根据上述内容,这应该工作:

ALTER TABLE checks ALTER COLUMN check_date_time TYPE timestamptz;

但是你猜怎么着......它没有。我不断收到错误消息

执行 sql 语句时出错。错误:输入结束时出现语法错误
位置:19 - 连接:测试:31ms

顺便说一下,其他一切都有效。我可以创建表,做选择等,只是 ALTER 给我带来了这些麻烦。我已经在这里讨论了大约一个小时,而且对于它可能存在的问题,我真的没有想法了。非常欢迎任何建议。

解决方法

可能不会在转换中应用正确的时区,如果您不明确这一点,将假定时区,通常不是 UTC。

ALTER TABLE checks
  ALTER check_date_time TYPE timestamptz USING check_date_time AT TIME ZONE 'UTC',ALTER check_date_time SET DEFAULT now();