From d33ea7b6da6e905a4139955ad40f6eda6b4fd478 Mon Sep 17 00:00:00 2001 From: Andrew Ekstedt Date: Fri, 1 Jun 2012 18:49:45 -0700 Subject: [PATCH] Add a script to reset PostgreSQL sequences. --- bin/reset-postgresql-sequences | 40 ++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 bin/reset-postgresql-sequences diff --git a/bin/reset-postgresql-sequences b/bin/reset-postgresql-sequences new file mode 100755 index 0000000..c5e3777 --- /dev/null +++ b/bin/reset-postgresql-sequences @@ -0,0 +1,40 @@ +#!/usr/bin/env python2 + +import sys + +from sqlalchemy.sql import func +from sqlalchemy.types import Integer + +from pokedex.db import connect +from pokedex.db.tables import mapped_classes + +import optparse + +parser = optparse.OptionParser() +parser.add_option('-v', '--verbose', action='store_true', default=False, + help="verbose output") +parser.add_option('-e', '--engine', dest='engine_uri', default=None, + help="database engine uri") + +options, _ = parser.parse_args(sys.argv[1:]) + +session = connect(options.engine_uri) + +assert session.connection().dialect.name == 'postgresql' + +def sequence_columns(table): + for c in table.__table__.primary_key: + if c.autoincrement and not c.foreign_keys and \ + isinstance(c.type, Integer): + yield c + +for table in sorted(mapped_classes): + table_name = table.__tablename__ + for c in sequence_columns(table): + max_value, = session.query(func.max(c)).one() + if options.verbose: + print "%s.%s <- %s" % (table_name, c.name, max_value) + session.execute(func.setval( + func.pg_get_serial_sequence(table_name, c.name), + max_value, + ))