Как преобразовать тип столбца базы данных без потери существующих данных? - PullRequest
0 голосов
/ 08 мая 2018

Я хочу изменить тип данных столбца, в котором уже есть некоторые данные. Данные не должны быть потеряны. Как я могу преобразовать это?

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете использовать простое выражение 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);
...