使用PHP时出现PostgreSQL查询错误
当我运行一个包含使用PHP时出现PostgreSQL查询错误,postgresql,postgis,Postgresql,Postgis,当我运行一个包含::geometrycasting的PostgreSQL查询时,我得到一个类型“geometry”不存在的错误。我正在Ubuntu 12.04上使用php5 pgsql V5.3.10、php5 fpm 5.4.13、Laravel 4、Postgresql 9.1、PostGIS 2.0.1几何图形类型是特定于PostGIS的 如果没有强制转换,查询运行良好。使用pgAdmin3直接查询PostgreSQL数据库时,原始查询也可以正常工作。为什么会这样 查询 $busstops
::geometry
casting的PostgreSQL查询时,我得到一个类型“geometry”不存在的错误。我正在Ubuntu 12.04上使用php5 pgsql V5.3.10、php5 fpm 5.4.13、Laravel 4、Postgresql 9.1、PostGIS 2.0.1<代码>几何图形
类型是特定于PostGIS的
如果没有强制转换,查询运行良好。使用pgAdmin3直接查询PostgreSQL数据库时,原始查询也可以正常工作。为什么会这样
查询
$busstops = DB::connection('pgsql')
->table('locations')
->select(DB::raw('geog::geometry as lat, geog::geometry as lng'))
->get();
List of data types
Schema | Name | Description
--------+----------+-----------------------------------------
public | geometry | postgis type: Planar spatial data type.
(1 row)
无强制转换的查询(无错误)
错误:
异常:SQLSTATE[42704]:未定义对象:7错误:类型“geometry”不存在
第1行:从“位置”中选择geog::geometry作为lat
^(SQL:从“位置”中选择geog::geometry作为lat)(绑定:数组)(
))
\dT几何体
$busstops = DB::connection('pgsql')
->table('locations')
->select(DB::raw('geog::geometry as lat, geog::geometry as lng'))
->get();
List of data types
Schema | Name | Description
--------+----------+-----------------------------------------
public | geometry | postgis type: Planar spatial data type.
(1 row)
应用程序正在切换
搜索路径
,以便公共
不在搜索路径
上。默认情况下,扩展插件安装在public
中,因此当应用程序切换搜索路径时,您会发现geometry
和其他PostGIS类型和功能变得不可用
您需要:
- 创建一个新的模式
postgis
李>
- 将PostGIS扩展移到
PostGIS
模式中;及
- 确保新的
postgis
模式始终位于search\u路径上,可能使用特定于应用程序的设置
您是否有可能将几何体
类型安装到手动查询中的搜索路径
上的单独模式中,而不是通过您的工具?或者你在工具和手动查询中没有真正连接到同一个数据库?@CraigRinger我运行了createextensionpostgis;创建扩展postgis拓扑代码>连接到数据库时,我(错误地?)假设它将为所有模式安装几何体类型?我有多个模式,如何为特定/所有模式安装几何体类型?不必为每个模式安装类型。您可以选择在自己的模式中安装扩展,在这种情况下,该模式必须位于search\u路径
上,扩展才能使用。你似乎没有这样做,所以我怀疑这是一个搜索路径问题。在psql
中用\dT geometry
确认,确认几何体
类型列在哪个模式中。如果它安装在public
中,那么您的search\u路径
可能被设置为不包含应用程序的public
模式?@CraigRinger用输出更新了问题。似乎它只在公共模式中可用!!是的,因此您需要确保public
模式始终位于search\u路径
,或者将其安装为只包含PostGIS的其他模式(例如称为PostGIS
),并确保始终位于search\u路径
)。请参阅CREATE EXTENSION
的SCHEMA
子句:是否有方法确保某些架构始终位于搜索路径中?