Вы можете использовать простое выражение 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
, который содержит количество секунд с эпохи .
Тогда мы могли бы сделать это так:
ALTER TABLE changeme ALTER d
SET DATA TYPE bigint USING CAST(extract(epoch FROM d) AS bigint);