2015-05-07 4 views
0

Этот запрос работает:Использование замены() в Postgres

SELECT replace('hello world','world','andrew'); 

Выход:

replace  
-------------- 
hello andrew 
(1 row) 

Но это не делает:

SELECT replace(geo,',',' ') FROM image_meta ; 
ERROR: function replace(point, unknown, unknown) does not exist 
LINE 1: SELECT replace(geo,',',' ') FROM image_meta ; 
      ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

(нерабочим пример был первоначально размещен неправильно , это правильно).

Тип данных "geo" - POINT.

+0

Какова структура вашего таблицы? В сообщении об ошибке указано, что столбец не существует. Вы уверены, что в определении структуры таблицы нет никаких опечаток? – Konrad

+0

Имеется ли столбец full_caption в таблице image_meta? –

+0

Я вставил неверный пример кода, который не работал ранее; это правильный. Тип данных - точка. Точки записываются с запятыми, разделяющими числа; Я пытаюсь преобразовать в типы данных postGIS, который использует пробелы вместо запятых. В любом случае я могу преобразовать этот текст в строку, чтобы заменить запятую? – andrewniesen

ответ

0

Оказывается, вы можете запросить отдельные аргументы типа POINT данных, так

select geo[0],geo[1] from image_meta limit 1; 

возвращает отдельные х, у значения точки, так что я могу преобразовать их в тип данных геометрии для PostGIS.

Запрос я использовал, чтобы обновить всю базу данных была

update image_meta SET geom=st_geographyfromtext('SRID=4326;POINT(' || geo[0] || ' ' || geo[1] || ')');

+0

Вместо того, чтобы обрабатывать его как текст, почему бы не сделать это: 'st_setsrid (st_point (geo [0], geo [1]), 4326) :: geography'? Кроме того, вы говорите «... к типу данных геометрии», но вы используете географию. Эти типы данных разные, для устранения двусмысленности. –

0
SELECT ST_AsText(geo) FROM image_meta; 

также даст вам геометрию в виде текста. С этим вы можете использовать замену.

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