#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 которого его не предоставляют.