Index: src/schema/pgColumn.cpp =================================================================== *** src/schema/pgColumn.cpp (revision 5006) --- src/schema/pgColumn.cpp (working copy) *************** *** 126,136 **** { wxString sql = GetQuotedTypename(); if ((sql == wxT("int4") || sql == wxT("int8") || sql == wxT("pg_catalog.int4") || sql == wxT("pg_catalog.int8")) ! && GetDefault() == wxT("nextval('") ! + schema->GetName() + wxT(".") + GetTableName() ! + wxT("_") + GetName() + wxT("_seq'::text)")) { if (sql.Right(4) == wxT("int8")) sql = wxT("bigserial"); --- 126,150 ---- { wxString sql = GetQuotedTypename(); + // Technically this serial check can still fail for sequences that + // get created with non-default names. Consider: + // CREATE SEQUENCE st_a_seq; + // CREATE TABLE st (a serial); + // Now the default's sequence is actually st_a_seq1. + + wxString sequenceDefault; + if (GetDatabase()->BackendMinimumVersion(8, 1)) { + sequenceDefault = wxT("nextval('") + GetTableName() + + wxT("_") + GetName() + wxT("_seq'::regclass)"); + } else { + sequenceDefault = wxT("nextval('") + + schema->GetName() + wxT(".") + GetTableName() + + wxT("_") + GetName() + wxT("_seq'::text)"); + } + if ((sql == wxT("int4") || sql == wxT("int8") || sql == wxT("pg_catalog.int4") || sql == wxT("pg_catalog.int8")) ! && GetDefault() == sequenceDefault) { if (sql.Right(4) == wxT("int8")) sql = wxT("bigserial");