我正在为一些“多边形内的点”查询使用“地理”类型的列。它们太少太简单,无法捆绑 GIS gem,我在 SQL 级别处理所有这些。
但是,每次 Rails 启动(rake 任务、控制台等)时,都会发出以下警告:
unknown OID 17227: failed to recognize type of 'geography'. It will be treated as String.
我对“地理”被视为“字符串”很好,但是每次 cronjob 执行任何 rake 任务时警告都会触发警告邮件。
知道如何让这个警告消失吗?
感谢您的提示!
查看ActiveRecord的源码,我可以自己回答问题:
警告是硬编码的,因此不能通过 AR 配置消除。然而,
RUBYOPT=-W0
完全摆脱了警告。这当然是一个很大的斩波器,但由于我仍然在本地开发中收到这些警告,我可以接受一个完全没有警告的生产系统。
由于这是出现的第一个问题/答案,因为标题是错误的,所以我建议按照这个答案来修复它:What is the source of "unknown OID" errors in Rails?
查看在 Rails 控制台中执行的这个 postgresql 语句:
ActiveRecord::Base.connection.exec_query(
<<-SQL.squish
SELECT websearch_to_tsquery('simple', 'james m') AS some_named_value
SQL
).to_a.first['some_named_value']
运行时会在控制台显示这个错误:
unknown OID 3615: failed to recognize type of 'some_named_value'. It will be treated as String.
将
tsquery
的数据类型转换为 text
的数据类型可以消除这种情况下的错误。我假设你做了类似的事情!
ActiveRecord::Base.connection.exec_query(
<<-SQL.squish
SELECT websearch_to_tsquery('simple', 'james m')::text AS some_named_value
SQL
).to_a.first['some_named_value']