0

これは、mysql を使用した開発では問題なく動作している郵便番号検索ですが、heroku にデプロイすると爆発します。

ActiveRecord::StatementInvalid (PG::Error: ERROR:  syntax error at end of input
LINE 9:                             <= 6.21371192)
                                                  ^
: SELECT "zip_codes"."zip_code" FROM "zip_codes"  WHERE ((latitude BETWEEN 37.68949912779737
                        AND 37.869158872202625)
                        AND (longitude BETWEEN -122.53280459311426
                        AND -122.30549540688574)
                        AND sqrt(pow(69.172 *
                            (latitude-37.779329),2) +
                            pow(54.67189446319151 *
                            (longitude--122.41915),2))
                            <= 6.21371192)
4

2 に答える 2

1

postgres で問題を引き起こしていたのは二重否定でした。座標を括弧内に配置すると、問題が修正されました。

SELECT "zip_codes"."zip_code" 
FROM "zip_codes"
WHERE ((latitude BETWEEN 37.68949912779737
        AND 37.869158872202625)
        AND (longitude BETWEEN -122.53280459311426
        AND -122.30549540688574)
        AND sqrt(pow(69.172 *
            (latitude - (37.779329)),2) +
             pow(54.67189446319151 *
             (longitude - (-122.41915)),2))
             <= 6.21371192)
于 2013-08-04T20:32:31.673 に答える
0

最後に追加の閉じ括弧があると思います。以下は、一般に閉じ括弧が開き括弧と整列するようにフォーマットされたコードです。

SELECT "zip_codes"."zip_code"
FROM "zip_codes" 
WHERE ((latitude BETWEEN 37.68949912779737 AND 37.869158872202625
       ) AND
       (longitude BETWEEN -122.53280459311426 AND -122.30549540688574
       ) AND
       sqrt(pow(69.172 * (latitude-37.779329),2
               ) +
            pow(54.67189446319151 * (longitude--122.41915),2
               )
           ) <= 6.21371192
      ))
-------^ this one is extra.  Get rid of it.

MySQL がこれを処理する理由はわかりませんが、Postgres は処理しません。おそらく、サーバーを切り替えるときに誤って括弧が追加された可能性があります。

于 2013-08-04T14:28:43.690 に答える