heroku - postgres - оператора не существует - PullRequest
0 голосов
/ 09 июня 2011

Я решил попробовать heroku (чтобы сэкономить время), но обнаружил, что они используют PostgreSQL, о котором я мало что знаю. geocoder gem прекрасно работает с MySQL, но PostgreSQL выдает ошибку.

Я думаю, что эта ошибка говорит о том, что lat не определен?

ActiveRecord::StatementInvalid (PGError: ERROR:  operator does not exist: numeric - character varying
LINE 1: ...58.755864232 * 2 * ASIN(SQRT(POWER(SIN((37.358151 - lat) * P...

Полный лог

2011-06-07T09:18:52-07:00 heroku[nginx]: GET /api/v1/locations.json?point=37.358151%2C%20-121.628265%20&radius=24.374397 HTTP/1.1 | 66.192.149.18 | 963 | http | 500
2011-06-07T16:19:12+00:00 app[web.1]: 
2011-06-07T16:19:12+00:00 app[web.1]: 
2011-06-07T16:19:12+00:00 app[web.1]: Started GET "/api/v1/locations.json?point=37.358151%2C%20-121.628265%20&radius=24.374397" for 66.192.149.18 at Tue Jun 07 09:19:12 -0700 2011
2011-06-07T16:19:12+00:00 app[web.1]: 
2011-06-07T16:19:12+00:00 app[web.1]: ActiveRecord::StatementInvalid (PGError: ERROR:  operator does not exist: numeric - character varying
2011-06-07T16:19:12+00:00 app[web.1]: LINE 1: ...58.755864232 * 2 * ASIN(SQRT(POWER(SIN((37.358151 - lat) * P...
2011-06-07T16:19:12+00:00 app[web.1]:                                                              ^
2011-06-07T16:19:12+00:00 app[web.1]: HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
2011-06-07T16:19:12+00:00 app[web.1]: : SELECT  *, 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((37.358151 - lat) * PI() / 180 / 2), 2) + COS(37.358151 * PI() / 180) * COS(lat * PI() / 180) * POWER(SIN((-121.628265 - lng) * PI() / 180 / 2), 2) )) AS distance, CAST(DEGREES(ATAN2( RADIANS(lng - -121.628265), RADIANS(lat - 37.358151))) + 360 AS decimal) % 360 AS bearing FROM "locations" WHERE (lat BETWEEN 37.0053760059938 AND 37.7109259940062 AND lng BETWEEN -122.072086383576 AND -121.184443616424) GROUP BY locations.id,locations.name,locations.bounding_box,locations.created_at,locations.updated_at,locations.street,locations.postal,locations.city,locations.state,locations.country,locations.description,locations.lat,locations.lng,locations.phone,locations.has_lights,locations.is_free,locations.is_outdoors,locations.are_pads_required,locations.has_concrete,locations.has_wood,locations.cd_page_id HAVING 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((37.358151 - lat) * PI() / 180 / 2), 2) + COS(37.358151 * PI() / 180) * COS(lat * PI() / 180) * POWER(SIN((-121.6
2011-06-07T16:19:12+00:00 app[web.1]: 28265 - lng) * PI() / 180 / 2), 2) )) <= 24.374397 ORDER BY 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((37.358151 - lat) * PI() / 180 / 2), 2) + COS(37.358151 * PI() / 180) * COS(lat * PI() / 180) * POWER(SIN((-121.628265 - lng) * PI() / 180 / 2), 2) )) ASC LIMIT 100):

Ответы [ 3 ]

1 голос
/ 12 января 2012

У меня была похожая ошибка. Это было вызвано тем, что я указал сторонние идентификаторы в моих миграциях в виде строк вместо целых чисел.

Чтобы исправить это, я изменил:

create_table :these_objects do |t|
  t.string:user_id
end

до

create_table :these_objects do |t|
  t.integer :user_id
end
1 голос
/ 09 июня 2011

Вам нужно разыграть его:

37.358151 - lat::numeric
0 голосов
/ 20 декабря 2013

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

create_table :place do |t|
  t.text :name
  t.float :latitude
  t.float :longitude
  t.timestamps
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...