You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Nominatim遇“Illegal query string”及函数创建失败求助

解决Docker部署Nominatim时的函数与查询日志错误

问题场景

使用指定Docker镜像部署Nominatim后,发起查询请求时返回Bad Request,提示“Illegal query string (not an UTF-8 string)”,同时控制台输出多条数据库错误:

ERROR: relation "query_log" does not exist at character 13 STATEMENT: insert into query_log values ('2018-05-23 15:25:03.9961','paderborn','172.18.0.1')
ERROR: relation "new_query_log" does not exist at character 13 STATEMENT: insert into new_query_log (type,starttime,query,ipaddress,useragent,language,format) values ('search','2018-05-23 15:25:03.9961','q=paderborn&polygon=1&viewbox=','172.18.0.1','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0','short_name:de,short_name:en-US,short_name:en,name:de,name:en-US,name:en,place_name:de,place_name:en-US,place_name:en,official_name:de,official_name:en-US,official_name:en,short_name,name,place_name,official_name,ref,type','')
ERROR: function make_standard_name(unknown) does not exist at character 8 HINT: No function matches the given name and argument types. You might need to add explicit type casts. STATEMENT: select make_standard_name('paderborn') as string

尝试运行初始化命令修复时,又报错无法访问nominatim.so文件(但该文件实际存在):

./utils/setup.php --create-functions --enable-diff-updates
Functions CREATE FUNCTION ERROR: could not access file "/app/module/nominatim.so": No such file or directory

分步解决方案

1. 进入容器内部执行操作

先进入运行中的Nominatim容器,所有后续操作都在容器内完成:

docker exec -it <你的容器名称或ID> bash

2. 修复PostgreSQL扩展加载问题

PostgreSQL无法找到nominatim.so通常是权限或扩展配置问题,先进入PostgreSQL命令行手动加载扩展:

psql -d nominatim -U nominatim

在psql交互界面中执行:

CREATE EXTENSION IF NOT EXISTS nominatim;

如果没有报错,说明扩展加载成功,输入\q退出psql。

3. 完整初始化函数与表

之前的初始化命令缺少创建表的参数,切换到Nominatim工作目录,以postgres用户完整执行初始化:

cd /app
su postgres -c "./utils/setup.php --create-functions --create-tables --enable-diff-updates"

这条命令会同时创建缺失的查询日志表和所需的数据库函数,解决之前的表不存在和函数找不到的问题。

4. 确保nominatim.so权限正确

即便文件存在,PostgreSQL进程可能没有读取权限,执行以下命令调整权限:

chmod 644 /app/module/nominatim.so
chown postgres:postgres /app/module/nominatim.so

5. 重启容器生效

完成所有操作后,重启容器确保配置和初始化生效:

docker restart <你的容器名称或ID>

6. 验证修复效果

重启后再次发起查询请求,检查是否返回正常结果,同时查看控制台日志确认没有新的数据库错误。

内容的提问来源于stack exchange,提问作者Markus Benter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:51:31