Функции PostGIS в запросах Laravel - PullRequest
0 голосов
/ 20 сентября 2018

Я обычно работаю с 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: ВЫБРАТЬ ST_X (g.geomout), ST_Y (g.geomout) ОТ геокода ('?', 1) ... СОВЕТ:Ни одна функция не соответствует заданному имени и типу аргумента.Возможно, вам придется добавить явные приведения типов.(SQL: SELECT ST_X (g.geomout), ST_Y (g.geomout) FROM с геокодом ('54 North Winter Street Columbus, OH, 43015 ', 1) As g)

SQLSTATE [42883]: неопределенная функция: 7 ОШИБКА: геокод функции (неизвестно, в тегере) не существует
ЛИНИЯ 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 ( Невозможно вызвать функцию postgres & postgis в построителе запросов 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 не имеет всей этой информации, яt установлен на public, хотя у меня есть путь со всеми схемами, если я получаю доступ к postgresql search_path установлен на "$user", public, tiger, postgis.Как мне сделать это глобальным?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

хорошо, для Laravel в database.php необходимо добавить schema как массив, например 'schema' => ['$user', 'public','postgis','tiger'],

0 голосов
/ 20 сентября 2018

Вы должны добавить tiger к вашему поисковому пути.Нет необходимости квалифицировать каждую функцию, они могут быть расположены в разных схемах ... до тех пор, пока эти схемы находятся в пути поиска!

...