#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