Измените режим базы данных SQLite на чтение и запись - PullRequest
74 голосов
/ 05 октября 2009

Как я могу изменить базу данных SQLite с чтения только на чтение и запись?

Когда я выполнял оператор обновления, я всегда получал:

Ошибка SQL: попытка записи базы данных только для чтения

Файл SQLite является записываемым файлом в файловой системе.

Ответы [ 14 ]

0 голосов
/ 23 июня 2017

В Windows:

tl; dr: попробуйте снова открыть файл.

Наша система столкнулась с этой проблемой, и она определенно не была проблемой с разрешениямиПоскольку сама программа могла бы открывать базу данных как доступную для записи из многих потоков большую часть времени, но иногда (только в Windows, а не в OSX), поток получал эти ошибки, даже если все остальные потоки в программе былибез проблем.

Мы в конечном итоге обнаружили, что отказавшие потоки были только теми, которые пытались открыть базу данных сразу после того, как другой поток закрыл ее (в течение 3 мс).Мы предположили, что проблема была в том, что Windows (или реализация sqlite под windows) не всегда сразу очищает файловые ресурсы при закрытии файла.Мы справились с этим, выполнив тестовый запрос на запись к базе данных при открытии (например, создав, а затем отбросив таблицу с глупым именем).Если создать / удалить не удалось, мы подождали 50 мс и попробовали еще раз, повторяя до тех пор, пока не добились успеха или не прошло 5 секунд.

Это сработало;по-видимому, просто нужно было достаточно времени, чтобы ресурсы вышли на диск.

0 голосов
/ 18 октября 2016

В Ubuntu измените владельца на группу Apache и предоставьте права доступа (нет, это не 777):

sudo chgrp www-data <path to db.sqlite3>
sudo chmod 664 <path to db.sqlite3>

Обновление

Вы также можете установить разрешения для группы и пользователя .

sudo chown www-data:www-data <path to db.sqlite3>
0 голосов
/ 21 января 2016

Редактирование БД: у меня были проблемы с редактированием БД. В итоге мне пришлось
sudo chown 'не-root username' ts3server.sqlitedb
пока это не root, я могу редактировать файл. Имя пользователя - это имя моей учетной записи без полномочий root.

Автоматический запуск TeamSpeak: в качестве учетной записи без полномочий root
crontab -e
@reboot / путь к ts3server / aka /home/ts3server/ts3server_startscript.sh start

0 голосов
/ 05 августа 2011

В командной строке введите папку, в которой находится файл базы данных, и выполните следующую команду:

chmod 777 databasefilename

Это предоставит все разрешения всем пользователям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...