-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed as not planned
Labels
external driver issuesthe issue involves a misbehavior on the part of the DBAPI itself, probably not SQLAlchemythe issue involves a misbehavior on the part of the DBAPI itself, probably not SQLAlchemypostgresql
Description
Describe the bug
Creating postgresql index concurrently causes a program stuck if you have another opened asyncpg transaction.
Optional link from https://docs.sqlalchemy.org which documents the behavior that is expected
No response
SQLAlchemy Version in Use
2.0.29
DBAPI (i.e. the database driver)
asyncpg
Database Vendor and Major Version
PostgreSQL 16
Python Version
3.10
Operating system
OSX
To Reproduce
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy import text
async_engine = create_async_engine(
'postgresql+asyncpg://user:[email protected]:5432/test_db',
echo=True,
)
async def main() -> None:
async with async_engine.connect() as connection1:
await connection1.execute(
text(
'''CREATE TABLE IF NOT EXISTS table_1 (
id INTEGER NOT NULL,
data VARCHAR NOT NULL
)'''
)
)
await connection1.commit()
async with async_engine.connect() as connection1, \
async_engine.connect() as connection2:
await connection1.execute(text('SELECT 1')) # remove this line and program won't freeze
await connection2.execution_options(isolation_level="AUTOCOMMIT")
await connection2.execute(text('CREATE INDEX CONCURRENTLY ix_1 ON table_1 (data)')) # stuck
if __name__ == '__main__':
asyncio.run(main())Error
Output before the program stuck:
2024-04-22 15:29:00,176 INFO sqlalchemy.engine.Engine select pg_catalog.version()
2024-04-22 15:29:00,176 INFO sqlalchemy.engine.Engine [raw sql] ()
2024-04-22 15:29:00,180 INFO sqlalchemy.engine.Engine select current_schema()
2024-04-22 15:29:00,180 INFO sqlalchemy.engine.Engine [raw sql] ()
2024-04-22 15:29:00,183 INFO sqlalchemy.engine.Engine show standard_conforming_strings
2024-04-22 15:29:00,183 INFO sqlalchemy.engine.Engine [raw sql] ()
2024-04-22 15:29:00,186 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2024-04-22 15:29:00,186 INFO sqlalchemy.engine.Engine CREATE TABLE IF NOT EXISTS table_1 (
id INTEGER NOT NULL,
data VARCHAR NOT NULL
)
2024-04-22 15:29:00,186 INFO sqlalchemy.engine.Engine [generated in 0.00018s] ()
2024-04-22 15:29:00,195 INFO sqlalchemy.engine.Engine COMMIT
2024-04-22 15:29:00,249 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2024-04-22 15:29:00,249 INFO sqlalchemy.engine.Engine SELECT 1
2024-04-22 15:29:00,249 INFO sqlalchemy.engine.Engine [generated in 0.00021s] ()
2024-04-22 15:29:00,251 INFO sqlalchemy.engine.Engine BEGIN (implicit; DBAPI should not BEGIN due to autocommit mode)
2024-04-22 15:29:00,251 INFO sqlalchemy.engine.Engine CREATE INDEX CONCURRENTLY ix_1 ON table_1 (data)
2024-04-22 15:29:00,251 INFO sqlalchemy.engine.Engine [generated in 0.00011s] ()
Additional context
This behaviour affects on op.get_context().autocommit_block() in alembic, there is a separate discussion sqlalchemy/alembic#1461
Metadata
Metadata
Assignees
Labels
external driver issuesthe issue involves a misbehavior on the part of the DBAPI itself, probably not SQLAlchemythe issue involves a misbehavior on the part of the DBAPI itself, probably not SQLAlchemypostgresql