Por que realmente serial no es un tipo de dato.
Cuando se crea un dato serial, realmente se crea un integer y se crea implicitamente una secuencia con valor por defecto para ese campo. Fijate en esto
Código SQL:
Ver originalpruebas=> CREATE TABLE t1(id serial,otro text);
NOTICE: CREATE TABLE creará una secuencia implícita «t1_id_seq» para la columna serial «t1.id»
CREATE TABLE
pruebas=> \d t1;
Tabla ½public.t1╗
Columna | Tipo | Modificadores
---------+---------+----------------------------------------------------------
id | INTEGER | NOT NULL valor por omisin NEXTVAL('t1_id_seq'::regclass)
otro | text |
Lo que puedes hacer, es crear una secuencia aparte y hacer un alter table para que el valor por defecto sea la secuencia y simular exactamente lo que hace el "tipo de dato" serial.
saludos