RSQLite — создать файл журнала базы данных в /var/tmp

У меня есть sqlite db, где я создаю таблицы и ежедневно добавляю новые результаты. Этот процесс был ручным, зайдя в RStudio и нажал запустить!

Я решил запланировать свои сценарии с помощью Jenkins, и последние 5 часов я не мог его запустить, так как постоянно получал следующую ошибку:

Error in rsqlite_bind_rows(rs@ptr, value) : unable to open database file Calls: source ... tryCatch -> tryCatchList -> rsqlite_bind_rows -> .Call

Первоначально думал, что это связано с разрешениями, поэтому, как хороший гражданин Unix, я изменил свою базу данных на 777. Та же ошибка!

Затем (к сожалению) пошел в кроличью нору обновления пакетов: dplyr, dbplyr, DBI - прочитать все последние изменения в каждом пакете и т. д. Не повезло...

Пока я не увидел мигание dbname.sqlite3-journal в окне файлов Rstudio. Как оказалось, этот файл создается sqlite для временных таблиц и индексов.

Очевидно, что этот файл исчезнет после завершения всех транзакций и отключения от БД.

и, очевидно, у Дженкинса нет разрешения на изменение этого файла.

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

Но мне интересно, есть ли способ отправить этот файл на /var/tmp вместо этого? Не в восторге от стратегии 777.

что-то типа:

con <- DBI::dbConnect(RSQLite::SQLite(), db, create = F, journal='/var/tmp')

person Altons    schedule 21.07.2017    source источник
comment
Какой вызов дает вам сообщение об ошибке? Вы можете хотя бы установить связь? Если да, вы можете попробовать temp_store_directory pragma.   -  person krlmlr    schedule 22.07.2017
comment
Да, я могу установить соединение - проблема возникает при использовании db_insert_into   -  person Altons    schedule 22.07.2017


Ответы (1)


Может помочь temp_store_directory pragma. Запустите это после установления соединения:

dbExecute(con, "PRAGMA temp_store_directory = '/var/tmp'")

и проверьте, работает ли он теперь с вашей установкой Jenkins.

person krlmlr    schedule 22.07.2017