代码之家  ›  专栏  ›  技术社区  ›  nitecoder

为什么PostgreSQL不能像这样使用geokit?

  •  1
  • nitecoder  · 技术社区  · 15 年前

    我刚开始玩geokit和rails的应用程序 建筑物。我有我的记录被地理编码,但当我去的时候 进入控制台,看看我能用什么来做,它就爆炸了。 包括以下内容:用户是一个用户对象,具有来自my的lat和lng 数据库

    >> Restaurant.find(:all, :origin => user) 
    
      Restaurant Load (0.0ms)   PGError: ERROR: operator does not exist: 
    numeric - character varying 
    LINE 1: ...*, SQRT(POW(111.1819*(-33.872517-restauran... 
     ^ 
    HINT: No operator matches the given name and argument type(s). You 
    might need to add explicit type casts. 
    : SELECT *, SQRT(POW(111.1819*(-33.872517-restaurants.lat),2)+ 
     POW(76.7136337302943*(151.205536-restaurants.lng),2)) 
     AS distance FROM "restaurants" 
    ActiveRecord::StatementInvalid: PGError: ERROR:  operator does not 
    exist: numeric - character varying 
    LINE 1: ...*,                   SQRT(POW(111.1819*(-33.872517- 
    restauran... 
                                                                 ^ 
    HINT:  No operator matches the given name and argument type(s). You 
    might need to add explicit type casts. 
    : SELECT *,                   SQRT(POW(111.1819*(-33.872517- 
    restaurants.lat),2)+ 
                      POW(76.7136337302943*(151.205536-restaurants.lng), 
    2)) 
     AS distance FROM "restaurants" 
            from /Users/chris/projects/mine/lunchdecider/vendor/rails/ 
    activerecord/lib/active_record/connection_adapters/abstract_adapter.rb: 
    212:in `log' 
            from /Users/chris/projects/mine/lunchdecider/vendor/rails/ 
    activerecord/lib/active_record/connection_adapters/ 
    postgresql_adapter.rb:538:in `execute' 
            from /Users/chris/projects/mine/lunchdecider/vendor/rails/ 
    activerecord/lib/active_record/connection_adapters/ 
    postgresql_adapter.rb:1019:in `select_raw' 
            from /Users/chris/projects/mine/lunchdecider/vendor/rails/ 
    activerecord/lib/active_record/connection_adapters/ 
    postgresql_adapter.rb:1006:in `select' 
            from /Users/chris/projects/mine/lunchdecider/vendor/rails/ 
    activerecord/lib/active_record/connection_adapters/abstract/ 
    database_statements.rb:7:in `select_all_without_query_cache' 
            from /Users/chris/projects/mine/lunchdecider/vendor/rails/ 
    activerecord/lib/active_record/connection_adapters/abstract/ 
    query_cache.rb:62:in `select_all' 
            from /Users/chris/projects/mine/lunchdecider/vendor/rails/ 
    activerecord/lib/active_record/base.rb:661:in `find_by_sql' 
            from /Users/chris/projects/mine/lunchdecider/vendor/rails/ 
    activerecord/lib/active_record/base.rb:1548:in `find_every' 
            from /Users/chris/projects/mine/lunchdecider/vendor/rails/ 
    activerecord/lib/active_record/base.rb:615:in `find' 
            from /Users/chris/projects/mine/lunchdecider/vendor/plugins/geokit- 
    rails/lib/geokit-rails/acts_as_mappable.rb:138:in `find' 
            from (irb):10 
    

    有什么办法可以解决这个问题吗?不幸的是,谷歌没有太多 当我试图搜索错误消息时帮助…

    1 回复  |  直到 15 年前
        1
  •  6
  •   Dave Pirotte    15 年前

    在您的迁移中,您可能创建了restaurants.lat和restaurants.lng作为字符串(字符变化),而它们应该是浮动的。Postgres不会帮你投的。改变列类型,你就可以了。