我有表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
如何更改类型?谢谢
我有表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
如何更改类型?谢谢
如果你的列中的所有值确实为空,简单的添加USING NULL
:有没有困难转换之作。
ALTER TABLE "t1"
ALTER "c1" TYPE timestamp USING NULL;
我认为你只需要给它一个时区。这为我工作:
ALTER TABLE t1
ALTER COLUMN c1 SET DATA TYPE timestamp with time zone
USING
timestamp with time zone 'epoch';
你的方法(a)不使用所需的列型(timestamptz而不是时间戳,它不一定是坏事,相反,但那是不一样的问题)和(b)将所有值填入“时代”,即“1970年1月1日00:00”而不是空。 (尝试'SELECT timestamp with time zone'epoch';':这就是'USING'将要使用的内容。) – Bruno
很确定,如果有任何数据,这将快速抛出非空数据,所以要小心。 –