我想更改已有一些数据的列的数据类型。数据不应丢失。我该如何转换它?
答案 0 :(得分:1)
您可以使用简单的ALTER TABLE
语句。
如果无法使用现有强制转换转换为新值,则必须指定一个USING
子句,告诉PostgreSQL如何转换值:
ALTER TABLE <tabname> ALTER <colname>
SET DATA TYPE <newtype> USING <expression>;
让我们举一个例子。假设我们有这个表:
CREATE TABLE changeme(
id integer PRIMARY KEY,
d timestamp with time zone NOT NULL
);
它包含几行:
INSERT INTO changeme VALUES (1, current_timestamp);
INSERT INTO changeme VALUES (2, current_timestamp);
现在我们要将列d
转换为bigint
,其中包含自epoch以来的秒数。
然后我们可以这样做:
ALTER TABLE changeme ALTER d
SET DATA TYPE bigint USING CAST(extract(epoch FROM d) AS bigint);