]> git.openstreetmap.org Git - nominatim.git/blob - src/nominatim_db/tools/freeze.py
Merge pull request #3487 from lonvia/port-to-psycopg3
[nominatim.git] / src / nominatim_db / tools / freeze.py
1 # SPDX-License-Identifier: GPL-3.0-or-later
2 #
3 # This file is part of Nominatim. (https://nominatim.org)
4 #
5 # Copyright (C) 2024 by the Nominatim developer community.
6 # For a full list of authors see the git log.
7 """
8 Functions for removing unnecessary data from the database.
9 """
10 from typing import Optional
11 from pathlib import Path
12
13 from psycopg import sql as pysql
14
15 from ..db.connection import Connection, drop_tables, table_exists
16
17 UPDATE_TABLES = [
18     'address_levels',
19     'gb_postcode',
20     'import_osmosis_log',
21     'import_polygon_%',
22     'location_area%',
23     'location_road%',
24     'place',
25     'planet_osm_%',
26     'search_name_%',
27     'us_postcode',
28     'wikipedia_%'
29 ]
30
31 def drop_update_tables(conn: Connection) -> None:
32     """ Drop all tables only necessary for updating the database from
33         OSM replication data.
34     """
35     parts = (pysql.SQL("(tablename LIKE {})").format(pysql.Literal(t)) for t in UPDATE_TABLES)
36
37     with conn.cursor() as cur:
38         cur.execute(pysql.SQL("SELECT tablename FROM pg_tables WHERE ")
39                     + pysql.SQL(' or ').join(parts))
40         tables = [r[0] for r in cur]
41
42     drop_tables(conn, *tables, cascade=True)
43     conn.commit()
44
45
46 def drop_flatnode_file(fpath: Optional[Path]) -> None:
47     """ Remove the flatnode file if it exists.
48     """
49     if fpath and fpath.exists():
50         fpath.unlink()
51
52 def is_frozen(conn: Connection) -> bool:
53     """ Returns true if database is in a frozen state
54     """
55
56     return table_exists(conn, 'place') is False