Ticket #4432: django-4432.diff

File django-4432.diff, 3.3 KB (added by real.human@…, 8 years ago)

reset sequence to max(pk) if there are records, otherwise reset sequence to 1.

  • db/backends/postgresql/base.py

     
    221221    for model in model_list:
    222222        for f in model._meta.fields:
    223223            if isinstance(f, models.AutoField):
    224                 output.append("%s setval('%s', (%s max(%s) %s %s));" % \
     224                output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) is not null) %s %s;" % \
    225225                    (style.SQL_KEYWORD('SELECT'),
    226226                    style.SQL_FIELD(quote_name('%s_%s_seq' % (model._meta.db_table, f.column))),
    227                     style.SQL_KEYWORD('SELECT'),
    228227                    style.SQL_FIELD(quote_name(f.column)),
     228                    style.SQL_FIELD(quote_name(f.column)),
    229229                    style.SQL_KEYWORD('FROM'),
    230230                    style.SQL_TABLE(quote_name(model._meta.db_table))))
    231231                break # Only one AutoField is allowed per model, so don't bother continuing.
    232232        for f in model._meta.many_to_many:
    233             output.append("%s setval('%s', (%s max(%s) %s %s));" % \
     233            output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) is not null) %s %s;" % \
    234234                (style.SQL_KEYWORD('SELECT'),
    235235                style.SQL_FIELD(quote_name('%s_id_seq' % f.m2m_db_table())),
    236                 style.SQL_KEYWORD('SELECT'),
    237236                style.SQL_FIELD(quote_name('id')),
     237                style.SQL_FIELD(quote_name('id')),
    238238                style.SQL_KEYWORD('FROM'),
    239239                style.SQL_TABLE(f.m2m_db_table())))
    240240    return output
  • db/backends/postgresql_psycopg2/base.py

     
    178178    for model in model_list:
    179179        for f in model._meta.fields:
    180180            if isinstance(f, models.AutoField):
    181                 output.append("%s setval('%s', (%s max(%s) %s %s));" % \
     181                output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) is not null) %s %s;" % \
    182182                    (style.SQL_KEYWORD('SELECT'),
    183183                    style.SQL_FIELD(quote_name('%s_%s_seq' % (model._meta.db_table, f.column))),
    184                     style.SQL_KEYWORD('SELECT'),
    185184                    style.SQL_FIELD(quote_name(f.column)),
     185                    style.SQL_FIELD(quote_name(f.column)),
    186186                    style.SQL_KEYWORD('FROM'),
    187187                    style.SQL_TABLE(quote_name(model._meta.db_table))))
    188188                break # Only one AutoField is allowed per model, so don't bother continuing.
    189189        for f in model._meta.many_to_many:
    190             output.append("%s setval('%s', (%s max(%s) %s %s));" % \
     190            output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) is not null) %s %s;" % \
    191191                (style.SQL_KEYWORD('SELECT'),
    192192                style.SQL_FIELD(quote_name('%s_id_seq' % f.m2m_db_table())),
    193                 style.SQL_KEYWORD('SELECT'),
    194193                style.SQL_FIELD(quote_name('id')),
     194                style.SQL_FIELD(quote_name('id')),
    195195                style.SQL_KEYWORD('FROM'),
    196196                style.SQL_TABLE(f.m2m_db_table())))
    197197    return output
Back to Top