【发布时间】:2019-02-25 02:02:47
【问题描述】:
我通常使用 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 错误:函数 地理编码(未知,整数)不存在
第 1 行:从地理编码('?', 1)... 提示:没有函数匹配给定的名称和参数类型。你 可能需要添加显式类型转换。 (SQL:选择 ST_X(g.geomout), ST_Y(g.geomout) FROM geocode('54 North Winter Street Columbus, OH, 43015', 1) As g)SQLSTATE[42883]:未定义函数:7 错误:函数 地理编码(未知,整数)不存在
第 1 行:从地理编码('?', 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会失败,因为它们是在public中定义的
最终查询看起来像SELECT public.ST_X(g.geomout), public.ST_Y(g.geomout) FROM tiger.geocode(?, 1) As g
但现在我明白了:
SQLSTATE[42883]:未定义函数:7 错误:函数 soundex(未知) 不存在
如何在单个架构上定义所有这些函数?
更新 2:
这就是问题所在,search_path 用于 Laravel 中的连接没有所有这些信息,它设置为 public,即使我有所有模式的路径,如果我访问 postgresql search_path 设置为 @987654340 @。我如何使它成为全球性的?
【问题讨论】:
标签: laravel postgresql postgis