In PostgreSQL 10, we added identity columns, as an alternative to serial
columns (since 6.something). They mostly work the same. Identity
columns are SQL-conforming, have some more features (e.g., overriding
clause), and are a bit more robust in schema management. Some of that
was described in [0]. AFAICT, there have been no complaints since that
identity columns lack features or are somehow a regression over serial
columns.
But clearly, the syntax "serial" is more handy, and most casual examples
use that syntax. So it seems like we are stuck with maintaining these
two variants in parallel forever. I was thinking we could nudge this a
little by remapping "serial" internally to create an identity column
instead. At least then over time, the use of the older serial
mechanisms would go away.
Note that pg_dump dumps a serial column in pieces (CREATE SEQUENCE +
ALTER SEQUENCE ... OWNED BY + ALTER TABLE ... SET DEFAULT). So if we
did this, any existing databases would keep their old semantics, and
those who really need it can manually create the old semantics as well.
Attached is a demo patch how the implementation of this change would
look like. This creates a bunch of regression test failures, but
AFAICT, those are mainly display differences and some very peculiar test
setups that are intentionally examining some edge cases. These would
need to be investigated in more detail, of course.
[0]:
https://www.enterprisedb.com/blog/postgresql-10-identity-columns-explained