Postgres изменяет столбец с time без часового пояса на int

#postgresql #alter-table

#postgresql #изменить таблицу

Вопрос:

У меня возникли проблемы с преобразованием типа столбца таблицы из time без часового пояса в integer. Возможно ли это? Где целое число будет равно секундам.

Я использую ALTER table exampleTable ДЛЯ изменения типа времени СТОЛБЦА integer.

Ответ №1:

Это должно сделать это:

  ALTER TABLE your_table 
     ALTER COLUMN time TYPE integer USING 0;
  

ALTER COLUMN обычно используется только тогда, когда вы хотите сохранить данные в этом столбце. В вашем случае вышеуказанное должно сработать, но вам ничего не дает. Удаление столбца, а затем добавление нового с типом integer и значением по умолчанию 0 было бы столь же эффективным.

(Кстати: вы не должны использовать зарезервированное слово, подобное time , в качестве имени столбца)

Редактировать
Если вы хотите преобразовать существующие данные, вы можете использовать это:

  ALTER TABLE your_table 
     ALTER COLUMN time_column TYPE integer USING extract(epoch from time_column);
  

Комментарии:

1. спасибо!, хотя я хотел сохранить старые данные, но мне действительно нужно действительно быстрое решение.

2. о, ключевое слово ‘time’, которое я использовал, было просто для примера. Еще раз спасибо!

Ответ №2:

Следуя ответу horse, вы также можете добавить выражение в использующую часть, например:

 ALTER TABLE your_table 
ALTER COLUMN time TYPE integer USING (
  extract('hours' from time) * 3600  
  extract('minutes' from time) * 60  
  extract('seconds' from time)
);
  

http://www.postgresql.org/docs/current/static/sql-altertable.html