[GNC] Upgrade to 3.x Save As (sqlite3) failing with data corruption error
John Ralls
jralls at ceridwen.us
Mon Jun 25 10:07:23 EDT 2018
> On Jun 25, 2018, at 6:33 AM, Geert Janssens <geert.gnucash at kobaltwit.be> wrote:
>
> Op maandag 25 juni 2018 13:20:10 CEST schreef Steve Alex:
>>> On Jun 25, 2018, at 3:40 AM, Geert Janssens <geert.gnucash at kobaltwit.be>
>>> wrote:>
>>> Op maandag 25 juni 2018 01:38:35 CEST schreef salex:
>>>> I've been trying to set up a procedure where two people can access our
>>>> XML
>>>> file located on a file server and of course ran into problems and know
>>>> there are other possible problem (file marked open if you loose the
>>>> network - yes I know its single user)
>>>>
>>>> My tests last week seemed to work, but I've been cautious. There may be
>>>> potential problems in that I'm on a Mac and the other user will be on
>>>> Windows 10. Then the file server is a debian server.
>>>>
>>>> I noticed that the Windows version 3.x and I was using 2.6.4. Also
>>>> noticed
>>>> that the windows version had Postgres option. I download the new version
>>>> using brew cask wanting to try postgres for my report system,
>>>>
>>>> I've been using a procedure for years that now seems broken.
>>>>
>>>> I update the main book on a Mac (using xml). A few times a month I do a
>>>> "Save As" and save off an sqlite3 version in another folder inside my
>>>> GnuCash folder. I immediately open the xml version and quit.
>>>>
>>>> I then run a bash script to backup the folder(rsync) to the debian
>>>> server.
>>>>
>>>> The sqlite3 file is used by a Rails server to produce reports I've
>>>> developed.
>>>>
>>>> I figured we'd use a modified procedure in that the updates would use the
>>>> XML version on the debian server (maybe a script to check dates or see if
>>>> file is open). I'd also put in a cron task to backup the folder to
>>>> another
>>>> offsite server.
>>>>
>>>> Since I was on the server, when I did my "Save As", it was in the same
>>>> file
>>>> system. I alway just did the save as over the existing version since its
>>>> just a read only file ( just confirm overwrite message)
>>>>
>>>> When I did that with 3.x, after confirming overwrite, I'd get an error
>>>> message saying it could complete because of data corruption.
>>>
>>> This sounds like https://bugzilla.gnome.org/show_bug.cgi?id=789594
>>> If you remove the existing sqlite file before running a Save As, do you
>>> still get the error message about data corruption ?
>>
>> I just saw that in the release 3.2 message, then got this reply.
>>
>> I don’t think so. I think I set a different file name (or different folder)
>> and there was no error. I think thats when I discovered my report system
>> broke - most likely by the date format change mentioned below.
>>>> Don't know if this is 3.x problem or not. Switched back to 2.6 and it
>>>> worked, even working on the server version.
>>>>
>>>> Before I switched back to 2.6, I did the save as on my mac and copied the
>>>> file the the server, I haven't verified this but my report system broke.
>>>> I
>>>> got no errors but a simple checkbook register had a balance but do ledger
>>>> lines.
>>>
>>> We had to make some changes to the database schema that may affect your
>>> direct access to the book.
>>>
>>> A few that come to mind:
>>> - the field format to store dates has changed (affecting many tables)
>>
>> That is most likely it.
>>
>> What did dates change to? Just another version of a timestamp (and not
>> YYYYMMDDHHMM ? I have lots of code (functions) that is basically taking a
>> ruby date and doing something like; def self.month_transactions(date)
>> month = Vfwcash.yyyymm(date) # just date parser that returns string in
>> format YYYYMM trans = Tran.where('transactions.post_date BETWEEN ? and
>> ?',month+"00",month+"32").order(:post_date,:num) end
>
> I believe the change was to
> YYYY-MM-DD HH:MM:SS
> Though I'm not sure. I haven't done this part and I'm not really using the SQL
> backends.
>
That’s correct. SQLite3 stores everything as strings. The old database code wrote YYYYMMDDHHMMSS, the new writes YYYY-MM-DD HH:MM:SS so that it’s consistent with what MySQL and Postgresql return.
Regards,
John Ralls
More information about the gnucash-user
mailing list