1

I have a psql database that I want to do alembic migrations on. After the migrations, locks are still present:

SELECT l.pid, l.locktype, l.mode
FROM pg_locks l
INNER JOIN pg_stat_activity s ON (l.pid = s.pid) where usename='migrations_user';
  pid  |  locktype  |      mode
-------+------------+-----------------
 19918 | relation   | AccessShareLock
 19918 | relation   | AccessShareLock
 19918 | relation   | AccessShareLock
 19918 | relation   | AccessShareLock
 19918 | virtualxid | ExclusiveLock
(5 rows)

The database is owned by db_owner and I ran grant db_owner to migrations_user; so it has all the permissions to run the migration, and the migration succeeds. But a followup migration on the same table would fail due to these locks, and I need to go in and manually run pg_terminate_backend on these locks to proceed.

What could be causing this? The alembic migration code is pretty standard:

def run_migrations_online():
    """Run migrations in 'online' mode.

    In this scenario we need to create an Engine
    and associate a connection with the context.

    """
    LOG.info("Running run_migrations_online")
    connectable = create_engine(get_conn_url_from_env())

    with connectable.connect() as connection:
        context.configure(connection=connection, target_metadata=target_metadata)

        with context.begin_transaction():
            context.run_migrations()
    connectable.dispose()
swagrov
  • 1,510
  • 3
  • 22
  • 38

0 Answers0