X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/bc7f6209d83dcc161f093ce9907991facabb3491..8f3845660f18bdbf2dd42dd2c6db6c7fa5160f3e:/nominatim/tools/admin.py diff --git a/nominatim/tools/admin.py b/nominatim/tools/admin.py index 9fb944d3..c37d0811 100644 --- a/nominatim/tools/admin.py +++ b/nominatim/tools/admin.py @@ -11,6 +11,7 @@ from typing import Optional, Tuple, Any, cast import logging from psycopg2.extras import Json, register_hstore +from psycopg2 import DataError from nominatim.config import Configuration from nominatim.db.connection import connect, Cursor @@ -49,7 +50,7 @@ def _get_place_info(cursor: Cursor, osm_id: Optional[str], LOG.fatal("OSM object %s not found in database.", osm_id) raise UsageError("OSM object not found") - return cast(DictCursorResult, cursor.fetchone()) # type: ignore[no-untyped-call] + return cast(DictCursorResult, cursor.fetchone()) def analyse_indexing(config: Configuration, osm_id: Optional[str] = None, @@ -87,3 +88,19 @@ def analyse_indexing(config: Configuration, osm_id: Optional[str] = None, for msg in conn.notices: print(msg) + + +def clean_deleted_relations(config: Configuration, age: str) -> None: + """ Clean deleted relations older than a given age + """ + with connect(config.get_libpq_dsn()) as conn: + with conn.cursor() as cur: + try: + cur.execute("""SELECT place_force_delete(p.place_id) + FROM import_polygon_delete d, placex p + WHERE p.osm_type = d.osm_type AND p.osm_id = d.osm_id + AND age(p.indexed_date) > %s::interval""", + (age, )) + except DataError as exc: + raise UsageError('Invalid PostgreSQL time interval format') from exc + conn.commit()