嘿,我刚刚开始研究 PostgreSQL,我想知道如何更改列的数据类型,我尝试了以下命令:
alter table tableName alter column columnName type timestamp with time zone;
但是我收到以下消息:
column "columnName" cannot be cast to type timestamp with time zone
当前列的数据类型是int,我想把它改成timestamp
嘿,我刚刚开始研究 PostgreSQL,我想知道如何更改列的数据类型,我尝试了以下命令:
alter table tableName alter column columnName type timestamp with time zone;
但是我收到以下消息:
column "columnName" cannot be cast to type timestamp with time zone
当前列的数据类型是int,我想把它改成timestamp
Postgres 不知道如何将 int 转换为时间戳。有几种情况,通常它们有不同的开始日期。
如果您查看文档,您会发现一行语法以及如何转换 unix 时间整数类型的示例:
ALTER [ COLUMN ] column [ SET DATA ] TYPE type [ USING expression ]
Postgres 不允许 int 类型列直接更改为时区。为此,您必须首先将列类型更改为 varchar,然后将其更改为时区。
alter table tableName alter column columnName type varchar(64);
alter table tableName alter column columnName type timestamp with time zone;
USING
使用该子句有更好的方法来做到这一点。像这样:
ALTER TABLE tableName
ALTER columnName type TIMESTAMP WITH TIME ZONE
USING to_timestamp(columnName) AT TIME ZONE 'America/New_York';
我通过以下方式实现了从时间戳到带有时区的时间戳:
ALTER TABLE tableName ALTER COLUMN columnName SET DATA TYPE timestamp with time zone;
但如果它是从时间戳到 int 或 bigint 你可能需要这样做:
ALTER TABLE tableName ALTER COLUMN columnName SET DATA TYPE int8 USING columnName::bigint