2013-07-25 3 views
2

У меня есть таблица t1 и столбец c1 типа boolean NULL. Все значения в столбце NULL. Однако PostgreSQL не позволит мне изменить тип столбца таким образом:PostgreSQL: изменить тип столбца от булева

ALTER TABLE "t1" 
ALTER "c1" TYPE timestamp; 

* ERROR: column "c1" cannot be cast to type timestamp without time zone 

Как я могу изменить тип? Спасибо

ответ

6

Если все значения в столбцах, действительно нулевые, просто добавить USING NULL: нет сложно преобразования сделать.

ALTER TABLE "t1" 
ALTER "c1" TYPE timestamp USING NULL; 
+1

Довольно уверен, что это весело отбросит ненулевые данные, если они есть, поэтому будьте осторожны. –

0

Я думаю, вам просто нужно дать ему часовой пояс. Это работает для меня:

ALTER TABLE t1 
    ALTER COLUMN c1 SET DATA TYPE timestamp with time zone 
    USING 
     timestamp with time zone 'epoch'; 
+0

Ваш подход (а) не использует нужный тип столбца (timestamptz вместо метки времени, это не обязательно плохо, наоборот, но это не то же самое, как и в вопросе) и (б) заполняет все значения до «эпохи», которая «1-янв.-1970 00:00» вместо нуля. (Попробуйте 'SELECT timestamp с часовым поясом 'epoch';': это то, что 'USING' будет использовать.) – Bruno

Смежные вопросы