我通常使用MySQL,所以PostgreSQL对我来说是新事物
我正在尝试在查询中使用PostGIS
SELECT ST_X(g.geomout), ST_Y(g.geomout) FROM geocode('?', 1) as g
如果我在终端中而不是从Laravel中运行查询,它应该可以正常工作
在Laravel中,我使用\DB::connection('pgsql')->select(...
,但找不到geocode
函数
SQLSTATE [42883]:未定义函数:7错误:函数 地理编码(未知,在teger中)不存在
第1行:从地址解析代码('?'中选择ST_X(g.geomout),ST_Y(g.geomout), 1)... 提示:没有函数匹配给定的名称和参数类型。您 可能需要添加显式类型转换。 (SQL:选择 ST_X(g.geomout),ST_Y(g.geomout)来自地理编码('54北温特 俄亥俄州哥伦布街,43015',1)As g)SQLSTATE [42883]:未定义函数:7错误:函数 地理编码(未知,在teger中)不存在
第1行:从地址解析代码('?'中选择ST_X(g.geomout),ST_Y(g.geomout), 1)... 提示:没有函数匹配给定的名称和参数 类型。您可能需要添加显式类型转换。
但是此查询在终端中可以正常工作
SELECT ST_X(g.geomout), ST_Y(g.geomout)
FROM geocode('54 North Winter Street Columbus, OH, 43015', 1) As g
PostGIS扩展已启用,如果我运行:
\DB::connection('pgsql')->select("SELECT postgis_full_version()")
我将获得带有版本信息的结果
search_path
设置为"$user", public, postgis
,最初是"$user", public
,没有任何改变
我还尝试使用public.geocode
(Unable to call postgres & postgis function in query builder laravel 4),结果相同
更新:
我有tiger_geocoder
扩展名,geocode
在那里定义,我需要使用tiger.geocode
,但是ST_X/ST_Y
将失败,因为它们是在{{1}中定义的}
最终查询看起来像public
但现在我得到了:
SQLSTATE [42883]:未定义函数:7错误:函数 soundex(未知)不存在
如何在单个模式上定义所有这些功能?
更新2:
这就是问题所在,Laravel中的连接SELECT public.ST_X(g.geomout), public.ST_Y(g.geomout) FROM tiger.geocode(?, 1) As g
并没有全部信息,即使我访问了PostgreSQL {{1},即使我拥有所有架构的路径,它都设置为search_path
}设置为public
。我如何使它成为全球性的?
答案 0 :(得分:0)
您应在搜索路径中添加tiger
。无需限定每个功能,它们可以位于不同的模式中……只要这些模式位于搜索路径中即可!
答案 1 :(得分:0)
好吧,对于database.php
中的Laravel,需要添加schema
作为数组,例如'schema' => ['$user', 'public','postgis','tiger'],