Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: Converting from MySQL to PostGres breaks Geokit Distance Calculations?

I recently switched my database from MySQL to PostGres. I also use GeoKit. When I started my app up with the new database already seeded, I get the following error:

PGError: ERROR:  function radians(character varying) does not exist
LINE 1: ...COS(0.661045389762993)*COS(-2.12957994527573)*COS(RADIANS(ti...
                                                         ^
HINT:  No function matches the given name and argument types. You might 
need to add explicit type casts.

Anyone know why this is breaking now? I know GeoKit still works because it's still performing the geocoding in the model per ticket when the database is seeded, it just won't do the distance calculations correctly.

like image 288
Kevin Avatar asked Dec 09 '22 16:12

Kevin


2 Answers

For those looking up this answer in the search, the problem is that Postgresql requires the lat, lng columns to be decimal or at least non-string whereas MySQL allows using both.

like image 180
Kevin Avatar answered May 11 '23 00:05

Kevin


Unsurprisingly the "radians" function expects a DOUBLE PRECISION argument. And there's no cast defined for TEXT/CHARACTER VARYING (a.k.a. VARCHAR) to DOUBLE PRECISION.

Probably the easiest solution is to define such a cast.

like image 32
Milen A. Radev Avatar answered May 11 '23 01:05

Milen A. Radev