SQLite: отменяются ли прагматические операторы путем отката транзакций? - PullRequest
2 голосов
/ 09 сентября 2011

Просто интересно, будут ли отменены прагмы, такие как foreign_keys = OFF и VACUUM, если они будут включены в транзакцию, для которой выполняется откат.

Онлайн-документация, кажется, не покрывает это ...

Ответы [ 2 ]

6 голосов
/ 31 августа 2013

Это отличается для разных прагматических высказываний.

Например, SQLite версии 3.7.15.2 включает в транзакции прагму 'user_version' и будет COMMIT и ROLLBACK значение.

Однако та же версия SQLite специально исключает (в документации и тестировании) foreign_keys из транзакций.

Из моей ограниченной выборки видно, что в транзакции будет участвовать прагма, не задокументированная как недействительная во время транзакций (foreign_key) (например, user_version.)

PS: я понимаю, что это очень старый вопрос, но именно туда Google привел меня, когда мне понадобилась эта информация.

1 голос
/ 09 сентября 2011

Документация не охватывает то, что происходит с прагматическими утверждениями, выданными внутри транзакций в целом, но она охватывает тему для foreign_keys (и, возможно, для других):

Эта прагма не используется в транзакции; ограничение внешнего ключа принудительное применение может быть включено или отключено только при отсутствии ожидающих НАЧАТЬ или SAVEPOINT.

VACUUM не является прагмой, а документация охватывает транзакции:

VACUUM потерпит неудачу, если есть открытая транзакция или если есть один или несколько активных операторов SQL при запуске.

...