2 votes

Erreur de requête PostgreSQL lors de l'utilisation de PHP

Lorsque j'exécute une requête PostgreSQL contenant ::geometry casting, je reçois un type "geometry" does not exist erreur. J'utilise php5-pgsql V5.3.10, php5-fpm 5.4.13, Laravel 4, Postgresql 9.1, PostGIS 2.0.1 sur Ubuntu 12.04. geometry est spécifique à PostGIS.

Sans le casting, la requête fonctionne bien. La requête originale fonctionne également bien lorsqu'elle est interrogée directement dans la base de données PostgreSQL à l'aide de pgAdmin3. Comment cela se fait-il ?

Requête

$busstops = DB::connection('pgsql')
    ->table('locations')
    ->select(DB::raw('geog::geometry as lat, geog::geometry as lng'))
    ->get();

Requête sans casting (Pas d'erreurs)

$busstops = DB::connection('pgsql')
    ->table('locations')
    ->select(DB::raw('geog as lat, geog as lng'))
    ->get();

Erreur :

Exception: SQLSTATE[42704]: Undefined object: 7 ERROR: type "geometry" does not exist LINE 1: select geog::geometry as lat from "locations" ^ (SQL: select geog::geometry as lat from "locations") (Bindings: array ( ))


\dT géométrie

                     List of data types
 Schema |   Name   |               Description
--------+----------+-----------------------------------------
 public | geometry | postgis type: Planar spatial data type.
(1 row)

2voto

Craig Ringer Points 72371

L'application commute le search_path de sorte que public n'est pas sur le search_path . Par défaut, les extensions sont installées dans public donc vous trouvez que geometry et les autres types et fonctions de PostGIS deviennent indisponibles pour l'application lorsqu'elle bascule l'option search_path .

Vous en avez besoin :

  • Créer un nouveau schéma postgis ;
  • Déplacez l'extension PostGIS dans le dossier postgis schéma ; et
  • Assurez-vous que le nouveau postgis Le schéma est siempre sur le search_path probablement en utilisant des paramètres spécifiques à l'application

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X