mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-14 18:37:58 +00:00
disable prepared statements
Prepared statements do not work well with the partial indexes that Nominatim uses because all Python constants are replaced with parameters. A query like: placex.select().where(placex.c.rank_address.between(4, 25) gets translated into a prepared query with two parameters: SELECT * FROM placex WHERE rank_address BETWEEN %s and %s And this does not work with a partial index of: CREATE INDEX on placex(geometry) WHERE rank_address between 4 and 25
This commit is contained in:
@@ -53,13 +53,16 @@ class NominatimAPIAsync:
|
||||
|
||||
dsn = self.config.get_database_params()
|
||||
|
||||
query = {k: v for k, v in dsn.items()
|
||||
if k not in ('user', 'password', 'dbname', 'host', 'port')}
|
||||
query['prepared_statement_cache_size'] = '0'
|
||||
|
||||
dburl = sa.engine.URL.create(
|
||||
'postgresql+asyncpg',
|
||||
database=dsn.get('dbname'),
|
||||
username=dsn.get('user'), password=dsn.get('password'),
|
||||
host=dsn.get('host'), port=int(dsn['port']) if 'port' in dsn else None,
|
||||
query={k: v for k, v in dsn.items()
|
||||
if k not in ('user', 'password', 'dbname', 'host', 'port')})
|
||||
query=query)
|
||||
engine = sa_asyncio.create_async_engine(
|
||||
dburl, future=True,
|
||||
connect_args={'server_settings': {
|
||||
|
||||
Reference in New Issue
Block a user