LINUX.ORG.RU

Файловая БД в режиме read-only

 , ,


0

2

Ищу файловую БД, которую можно было-бы открыть в режиме «только для чтения» из каталога с правами 555. Проблема в том, что sqlite/fastdb в любом случае требуют права на запись в каталог/файл, даже при открытии с флагами RO (ну, в общем-то понятно почему, но вопрос не в этом)))

Нужен «real-read-only» вариант, пусть даже без проверки целостновсти базы, интересует прежде всего быстрый поиск по индексу (сотни тысяч строк).

Есть еще какие-то варианты файловых БД с C/C++-интерфейсом?

ну, в общем-то понятно почему

Ну расскажи:

~$ ls -l /tmp/ro
-r--r--r--
~$ ls -l /tmp/ro/ro.db 
-r--r--r--
~$ cat ./test.cpp
#include <cstdio>
#include <sqlite3.h>

int main() {
    sqlite3* db = 0;
    
    int rc = sqlite3_open_v2( "/tmp/ro/ro.db", &db, SQLITE_OPEN_READONLY | SQLITE_OPEN_PRIVATECACHE, 0 );
    if( rc == SQLITE_OK )
        printf( "OK!\n" );
}
~$ g++ ./test.cpp -lsqlite3
~$ ./a.out 
OK!
anonymous
()
Ответ на: комментарий от anonymous

sqlite какая версия? Я смотрел по трассе на старой версии - там безусловное создание файла журнала, если это не in memory. В любом случае посмотрю SQLITE_OPEN_PRIVATECACHE, спасибо!

artemsen
() автор топика
Ответ на: комментарий от artemsen

sqlite какая версия?

3.11, мы так ресурсы для программы в эппл-MAS храним, там тоже чисто r/o.

SQLITE_OPEN_PRIVATECACHE

Это я добавил на всякий случай, на самом деле оно не нужно.

anonymous
()
Ответ на: комментарий от artemsen

Журнал может создаваться для тех баз, которые первоначально создавались как базы с журналом. По умолчанию базы создаются без журнала, но и каких-то фич при этом нет (типа нескольких чтений параллельно с одной записью). Вроде бы так.

Sorcerer ★★★★★
()
Последнее исправление: Sorcerer (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.