After upgrading Chromium from 34 to 35, the usability of Chromium went downhill. So I decided to downgrade Chromium. Fortunately, the previous version of Chromium was still somewhere on my disk, so downgrading (in ArchLinux) was as simple as:
sudo pacman -U /var/cache/pacman/pkg/chromium-34.0.1847.137-1-x86_64.pkg.tar.xz
After running the previous command, Chromium did start, but unfortunately, I kept getting bugged by the following message on start-up:
Your profile can not be used because it is from a newer version of Google Chrome. Some features may be unavailable. Please specify a different profile directory or use a newer version of Chrome.
One way to get rid of this message is to delete ~/.config/chromium/Default/Web Data
, but this also caused my search engine keywords to disappear.
How can I downgrade Chromium without losing any data?
Note: I'm using Linux, but this problem is platform-independent. Feel free to answer from the perspective of a non-Linux operating system such as Windows.
Answer
Note: Close Chrome and back up your profile before messing with it!
Web Data
is a SQLite database, so I used the sqlite3 program to open the database.
What is the current version of the "Web Data" database? (run
SELECT * from meta;
)sqlite> SELECT * FROM meta;
Default Search Provider ID|34
last_compatible_version|55
version|55
Builtin Keyword Version|70The emphasized rows in the previous output refer to internal database version numbers in Chromium. For every version, you can find the relevant migration codes in Chromium's source code (autofill_table.cc). Specifically, take a look at the
AutofillTable::MigrateToVersion
method. Since my database version is 55, I looked at "case 55"case 55:
*update_compatible_version = true;
return MigrateToVersion55MergeAutofillDatesTable();After finding out this method, I was almost ready to write a SQLite query to reverse the migration.
Using the knowledge from the previous step (and the original schema from a different table on another computer), I constructed the following query (copy-paste the query to
sqlite3
):
Note: This query is specific to downgrading Chrome 35 to 34!CREATE TABLE autofill_v54 (
name VARCHAR,
value VARCHAR,
value_lower VARCHAR,
pair_id INTEGER PRIMARY KEY,
count INTEGER DEFAULT 1);
CREATE TABLE autofill_dates (
pair_id INTEGER DEFAULT 0,
date_created INTEGER DEFAULT 0);
INSERT INTO autofill_v54 (
name,
value,
value_lower,
count
) SELECT name, value, value_lower, count FROM autofill;
INSERT INTO autofill_dates (
pair_id,
date_created
) SELECT pair_id, date_created
FROM autofill_v54 a54 JOIN autofill a USING (name, value);
DROP TABLE autofill;
ALTER TABLE autofill_v54 RENAME TO autofill;
CREATE INDEX autofill_name ON autofill (name);
CREATE INDEX autofill_name_value_lower ON autofill (name, value_lower);After reverting the migration, you can safely lower the database version:
UPDATE meta SET value='54' WHERE key='version' OR
key = 'last_compatible_version';Close the database using
.quit
After completing all of these steps, I started Chromium, there were no annoying popups and all profile data was still intact!
Comments
Post a Comment