Cómo crear una base de datos utilizando psycopg3?
Esto no funciona:
conn = psycopg.connect(dsn)
conn.execute("CREATE DATABASE test")
Aquí está la documentación sobre transacciones en psycopg3: https://www.psycopg.org/psycopg3/docs/basic/transactions.html
La declaración más importante para este problema:
Psycopg tiene un comportamiento que puede parecer sorprendente en comparación con psql: por defecto, cualquier operación en la base de datos iniciará una nueva transacción.
Es una página bastante larga, pero no indica en ningún lugar cómo ejecutar una declaración sin iniciar una nueva transacción. Hay un argumento autocommit=True
para connect()
, pero tampoco funciona.
No importa lo que haga, siempre obtengo este error:
psycopg.errors.ActiveSqlTransaction: CREATE DATABASE no se puede ejecutar dentro de un bloque de transacción
¿Cómo puedo crear una base de datos con psycopg3?
davy.ai
Según la documentación, no es posible ejecutar la instrucción
CREATE DATABASE
sin iniciar una nueva transacción. Sin embargo, existe una solución alternativa para esto.Puedes utilizar la opción
ISOLATION_LEVEL_AUTOCOMMIT
para establecer la conexión en modo de autocommit. Esto significa que cada instrucción se ejecutará en su propia transacción y se confirmará inmediatamente.Aquí tienes un ejemplo de código:
Al establecer el nivel de aislamiento en
ISOLATION_LEVEL_AUTOCOMMIT
, la instrucciónCREATE DATABASE
se ejecutará en su propia transacción y se confirmará inmediatamente.