2016-02-16 3 views
1

мне нужно вставить точку в таблицу Postgres типа, я пытался:Как добавить точку, используя необработанный запрос?

\DB::statement("SET search_path = postgis, public;"); 
\DB::statement("INSERT INTO points (latlong) VALUES(ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));"); 

, но я получил сообщение об ошибке:

SQLSTATE[42883]: Undefined function: 7 ERROR: function st_geomfromtext(unknown, integer) does not exist 
LINE 1: INSERT INTO points (latlong) VALUES(ST_GeomFromText('POINT(-... 
^ 
HINT: No function matches the given name and argument types. You might need to add explicit type casts. (SQL: INSERT INTO points (latlong) VALUES(ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));) 

Я использую Postgres 9.4.5 с PostGIS установлен .. любую идею ?

+0

Ваша хранимая процедура не существует, может быть, он имеет другое имя – sagi

+0

У меня нет хранимой процедуры, я просто хочу, чтобы вставить a point .. – simo

+0

Что такое ST_GeomFromText ('POINT (-71.060316 48.432044)', 4326)); – sagi

ответ

2
  1. Установите PostGIS не используя что-то вроде CREATE EXTENSION IF NOT EXISTS postgis
  2. Создание геометрии путем форматирования строки WKT для ST_GeomFromText это не самый лучший способ, чтобы сделать геометрию (медленнее, с потерями, ошибка склонная и т.д.), если ваши исходные данные уже являются текстовыми. Для того, чтобы сделать геометрию точки из двух значений с плавающей запятой, использовать что-то вроде:

    DB::insert('INSERT INTO points (latlong) VALUES(ST_SetSRID(ST_MakePoint(?, ?), 4326))', 
          [lng, lat]); 
    
+0

спасибо за совет, будет ли эта команда загружать расширение? как насчет разрешений и т. д. В настоящее время я просто использую докер, CREATE EXTENSION ЕСЛИ НЕ СУЩЕСТВУЕТ postgis – simo

Смежные вопросы