PostgreSQL's serial isn't a type.
It's a sequence + an integer + a nextval() default, glued together.
Which is why GRANT INSERT on the table isn't enough — the role also needs USAGE on the sequence.
generated always as identity doesn't have that problem. All ten below 👇