LINUX.ORG.RU

Создавать БД - при инсталляции или первом запуске?


0

2

Есть программа. Программа работает с базой данных SQLite, куда в процессе своей работы пишет всякие нужные себе данные. База данных будет в файлике где-нибудь в /var/lib/programname/programname.db, вроде по FHS должно быть так.

Вопрос, как идеологически правильно создавать этот файл с базой:

1) при инсталляции программы (вызываем клиент sqlite3 и скармливаем ему SQL скрипт с командами создания таблиц и инсертами начальных данных)

2) или самой программой при первом запуске, т.е. когда программа обнаруживает, что файл не существует, она его создает и инициализирует его?

★★★★★

При запуске ПО должно проверять наличие БД и при необходимости создавать БД и необходимую структуру внутри её.

И почему именно в /var/lib/programname/programname.db? Это что-то системное или многопользовательское? Если нет, то почему не в хомяк?

Chaser_Andrey ★★★★★
()

а предусмотреть запуск с указанием другого файла БД? аля `firefox -P`?

руки оторвал бы за хардкод. Сделай, чтоб если при любом запуске не был указан файл БД опцией и по дефолтному пути (который указывается при конфигурировании программы перед компиляцией) ничего нет, то спросить «Укажите файл настроек, а то я создам дефолтный в /var/lib/bla/bla?» и в зависимости от ответа юзера создавать или считывать, что укажет юзер.

А то у меня не смонтируется /var при запуске системы и твоя программа хер знает что будет делать

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

не был указан файл БД опцией и по дефолтному пути (который указывается при конфигурировании программы перед компиляцией) ничего нет, то спросить

не спросить, а написать в stderr и выйти с кодом ошибки

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

указывать можно любой файлик в конфиге. Но должен быть и дефолтный, если в конфиге явно не указан. Вопрос как лучше, молча создавать базу по указанному или дефолтному пути, если её там нет, или ругаться ошибками и завершать программу.

Спрашивать юзера при запуске не пойдет, это демон

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

это демон

а я не телепат. Тогда

написать в stderr и выйти с кодом ошибки

ибо если у меня что-то не в порядке (например, с правами на /var/lib/bla, или не смонтирован /var), то как я это узнаю? ты мне создашь пустую БД и с понтом всё ок?

anonymous
()

а может вообще распространять готовый файлик с проинициализированной базой в дистрибутиве и при инсталляции копировать его в нужное место? У SQLite вроде как кроссплатформенный формат, везде одинаковый должен быть

Harald ★★★★★
() автор топика

Ну ёпт, мускуль с постгресом же не создают свои кластеры БД при первом запуске. Вот с них и бери пример. БД создаётся отдельной командой, в какой момент её запускать - решат создатели дистрибутива.

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

Плюсую. Обычно это делается на этапе настройки пакета, который запускается уже после установки, но всё-таки это забота ментейнера и пакетного менеджера.

В том же Дебиане это делается через dpkg-reconfigure.

Chaser_Andrey ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.