> bugtest=# INSERT INTO demo (i, j) VALUES (1,1); > INSERT 0 1 > bugtest=# INSERT INTO demo (i, j) VALUES (DEFAULT, DEFAULT); > ERROR: 42809: "demo" is not a sequence > LOCATION: init_sequence, sequence.c:1139
You are right that this is not optimal behavior. I'm not sure if it's worth fixing, however. (Introduce a regsequence type to use in place of regclass?)
There is a big note on the functions-sequence page in the docs covering late binding and text. A addition like below is an acceptable solution for me:
Additionally, since pg_class contains objects other than sequences it is possible to specify a default that, at runtime, points to a non-sequence object and provokes an error. (i.e., the type of the pointed to pg_class record is not checked during the cast but during function evaluation).