Благодарю. В руководстве postgresql сказано: «CREATE DATABASE не может быть выполнена внутри блока транзакции». Под блоком транзакции подразумеваются только те, которые созданы явно? Нужно ли создавать базу данных в собственной транзакции?
ает ли autocommit то же самое в PostgreSQL и Psycopg2?
Из руководства PostgreSQL
По умолчанию (без BEGIN) PostgreSQL выполняет транзакции в режиме «автоматической фиксации», то естькаждый оператор выполняется в своей собственной транзакции а такжепринятие неявно выполняется в конце оператора (если выполнение было успешным, в противном случае выполняется откат).
Значит ли это, что autocommit создаст транзакцию для каждой команды?
ИзРуководство для водителя Psycopg2
Возможно установить соединение в режиме автоматической фиксации: таквсе выполненные команды будут немедленно переданы и откат невозможен. Несколько команд (например, CREATE DATABASE, VACUUM ...) должны выполняться вне любой транзакции: чтобы иметь возможность запускать эти команды из Psycopg, соединение должно быть в режиме автоматической фиксации: вы можете использовать свойство autocommit.
psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT
Когда команды выполняются, транзакция не запускается, а commit () или rollback () не требуются. Некоторые команды PostgreSQL, такие как CREATE DATABASE или VACUUM, не могут выполнить транзакцию: для запуска такой команды используйте:
>>> conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
Означает ли то, что «все выполненные команды будут немедленно зафиксированы», означает, что автокоммит в Psycopg2 создает транзакцию для каждой команды?
Означает ли, что «транзакция не запускается, когда команды выполняются, а фиксация () или откат () не требуются» означает, что автокоммит в Psycopg2 предотвратит транзакцию, созданную для каждой команды?
Означает ли то, что «некоторые команды PostgreSQL, такие как CREATE DATABASE или VACUUM, не могут быть запущены в транзакции: для запуска такой команды включите режим автоматической фиксации» означает, что автоматическая фиксация в Psycopg2 предотвратит транзакцию, созданную только для некоторых команд (CREATE DATABASE или VACUUM)?
Благодарю.