2013-07-25 103 views
2

我有表t1和列c1布尔型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

你的方法(a)不使用所需的列型(timestamptz而不是时间戳,它不一定是坏事,相反,但那是不一样的问题)和(b)将所有值填入“时代”,即“1970年1月1日00:00”而不是空。 (尝试'SELECT timestamp with time zone'epoch';':这就是'USING'将要使用的内容。) – Bruno