我有一个奇怪的问题。我的应用程序上的lonlat列在开发服务器上运行良好 - 它的输出采用POINT(X Y)的形式。但是当我将数据移动到生产服务器时,输出很奇怪!
ActionView :: Template :: Error(未定义方法`lon'代表“0101000020E6100000541B9C887E7A52C02920ED7F80614440”:字符串):
使用SRID:4326编码的lonlat值将被读取为字符串。我几乎可以肯定,在将数据从开发迁移到生产期间,数据存在损坏,因为在迁移之前这不是问题。
有谁知道数据库架构或列可能导致此问题?
答案 0 :(得分:0)
几何字段将其数据存储为WKB。要查看WKT表示,您需要将查询更改为
select ST_Astext(the_geom) as geometry from table
但是,我不知道为什么在开发中你在WKB二进制数据和WKT字符串之间有某种隐式转换。 ¿你使用的是什么版本的postgres和postgis?
您的应用服务器中有哪些内容?
你正在使用ActiveRecord吗?
答案 1 :(得分:0)
我建议您尝试类似
的内容float ST_X(geometry a_point);
确保您可以正确读取数据并确定数据字段或其他地方是否存在问题。
如果确定问题与几何列有关,我也会尝试在一个步骤中执行pg_dump
。
您可以将pg_dump与选项
一起使用--exclude-table-data=reg_expresion_ _tablename_
--exclude-table-data=schema.reg_expresion_ _tablename_
这将带来所有架构定义,但排除表数据并仅带来您需要的表中的数据。
答案 2 :(得分:0)
事实证明,当我杀死与服务器的连接以迁移数据时,Rails在重新连接时没有设置架构搜索路径(意味着没有发现postgis扩展)。我不得不重新启动服务器来解决这个问题。