Как предотвратить транзакции записи при копировании файла базы данных Sqlite3?

#sqlite

#sqlite

Вопрос:

Sqlite3 рекомендует использовать API резервного копирования для создания резервной копии, но также указывает, что копирование может быть безопасным, пока не выполняются транзакции:

Лучший способ создания надежных резервных копий базы данных SQLite — использовать API резервного копирования, который является частью библиотеки SQLite. В противном случае безопасно создавать копию файла базы данных SQLite, если ни один процесс не выполняет транзакции.

Я хотел бы использовать подход копирования файла базы данных, при условии, что я могу сделать это безопасно.

ПРИМЕЧАНИЕ. Я понимаю, что API резервного копирования является предпочтительным вариантом, но поскольку Sqlite3 рекламирует атомарные коммиты, я считаю, что этот подход жизнеспособен, и мне интересно узнать, как сделать этот подход максимально безопасным.

Какую команду SQL или API можно использовать для полной блокировки базы данных, чтобы удовлетворить требование «пока нет транзакций в процессе»?

Можно ли использовать для этого пустую эксклюзивную транзакцию (т. Е. BEGIN EXCLUSIVE; Без дополнительных инструкций), несмотря на то, что технически это транзакция?

Комментарии:

1. «… до тех пор, пока ни один процесс не выполняет транзакции». мне кажется довольно понятным. Используйте на свой страх и риск.

2. @MarkBenningfield согласны ли вы BEGIN EXCLUSIVE с тем, чтобы обеспечить соблюдение этого требования?

3. Напротив, кажется очевидным, что BEGIN EXCLUSIVE это нарушает это требование.

4. Вы читали sqlite.org/backup.html ?

5. И обратите внимание, что если вы используете режим wal, простого копирования основного файла базы данных недостаточно. Действительно, api резервного копирования — более простой подход. Если, конечно, вам не повезло использовать язык, привязки sqlite которого его не предоставляют.