mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-09-10 10:34:10 +02:00
optimize command now accepts optional tables, refs #155
This commit is contained in:
parent
9680a0291c
commit
76548596a6
3 changed files with 13 additions and 5 deletions
|
|
@ -703,7 +703,7 @@ You can run VACUUM to optimize your database like so::
|
||||||
Optimize
|
Optimize
|
||||||
========
|
========
|
||||||
|
|
||||||
The optimize command can dramatically reduce the size of your database if you are using SQLite full-text search. It runs OPTIMIZE against all of our FTS4 and FTS5 tables, then runs VACUUM.
|
The optimize command can dramatically reduce the size of your database if you are using SQLite full-text search. It runs OPTIMIZE against all of your FTS4 and FTS5 tables, then runs VACUUM.
|
||||||
|
|
||||||
If you just want to run OPTIMIZE without the VACUUM, use the ``--no-vacuum`` flag.
|
If you just want to run OPTIMIZE without the VACUUM, use the ``--no-vacuum`` flag.
|
||||||
|
|
||||||
|
|
@ -715,6 +715,11 @@ If you just want to run OPTIMIZE without the VACUUM, use the ``--no-vacuum`` fla
|
||||||
# Optimize but skip the VACUUM
|
# Optimize but skip the VACUUM
|
||||||
$ sqlite-utils optimize --no-vacuum mydb.db
|
$ sqlite-utils optimize --no-vacuum mydb.db
|
||||||
|
|
||||||
|
To optimize specific tables rather than every FTS table, pass those tables as extra arguments:
|
||||||
|
|
||||||
|
::
|
||||||
|
$ sqlite-utils optimize mydb.db table_1 table_2
|
||||||
|
|
||||||
.. _cli_wal:
|
.. _cli_wal:
|
||||||
|
|
||||||
WAL mode
|
WAL mode
|
||||||
|
|
|
||||||
|
|
@ -218,11 +218,13 @@ def vacuum(path):
|
||||||
type=click.Path(exists=True, file_okay=True, dir_okay=False, allow_dash=False),
|
type=click.Path(exists=True, file_okay=True, dir_okay=False, allow_dash=False),
|
||||||
required=True,
|
required=True,
|
||||||
)
|
)
|
||||||
|
@click.argument("tables", nargs=-1)
|
||||||
@click.option("--no-vacuum", help="Don't run VACUUM", default=False, is_flag=True)
|
@click.option("--no-vacuum", help="Don't run VACUUM", default=False, is_flag=True)
|
||||||
def optimize(path, no_vacuum):
|
def optimize(path, tables, no_vacuum):
|
||||||
"""Optimize all FTS tables and then run VACUUM - should shrink the database file"""
|
"""Optimize all FTS tables and then run VACUUM - should shrink the database file"""
|
||||||
db = sqlite_utils.Database(path)
|
db = sqlite_utils.Database(path)
|
||||||
tables = db.table_names(fts4=True) + db.table_names(fts5=True)
|
if not tables:
|
||||||
|
tables = db.table_names(fts4=True) + db.table_names(fts5=True)
|
||||||
with db.conn:
|
with db.conn:
|
||||||
for table in tables:
|
for table in tables:
|
||||||
db[table].optimize()
|
db[table].optimize()
|
||||||
|
|
|
||||||
|
|
@ -454,7 +454,8 @@ def test_vacuum(db_path):
|
||||||
assert 0 == result.exit_code
|
assert 0 == result.exit_code
|
||||||
|
|
||||||
|
|
||||||
def test_optimize(db_path):
|
@pytest.mark.parametrize("tables", ([], ["Gosh"], ["Gosh2"]))
|
||||||
|
def test_optimize(db_path, tables):
|
||||||
db = Database(db_path)
|
db = Database(db_path)
|
||||||
with db.conn:
|
with db.conn:
|
||||||
for table in ("Gosh", "Gosh2"):
|
for table in ("Gosh", "Gosh2"):
|
||||||
|
|
@ -471,7 +472,7 @@ def test_optimize(db_path):
|
||||||
db["Gosh"].enable_fts(["c1", "c2", "c3"], fts_version="FTS4")
|
db["Gosh"].enable_fts(["c1", "c2", "c3"], fts_version="FTS4")
|
||||||
db["Gosh2"].enable_fts(["c1", "c2", "c3"], fts_version="FTS5")
|
db["Gosh2"].enable_fts(["c1", "c2", "c3"], fts_version="FTS5")
|
||||||
size_before_optimize = os.stat(db_path).st_size
|
size_before_optimize = os.stat(db_path).st_size
|
||||||
result = CliRunner().invoke(cli.cli, ["optimize", db_path])
|
result = CliRunner().invoke(cli.cli, ["optimize", db_path] + tables)
|
||||||
assert 0 == result.exit_code
|
assert 0 == result.exit_code
|
||||||
size_after_optimize = os.stat(db_path).st_size
|
size_after_optimize = os.stat(db_path).st_size
|
||||||
assert size_after_optimize < size_before_optimize
|
assert size_after_optimize < size_before_optimize
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue