Postgresql PostGIS地理查询返回一个字符串值
我有一个奇怪的问题。我的应用程序上的lonlat列在开发服务器上运行良好–它的输出是POINTX Y格式的。但是当我将数据移动到生产服务器时,输出是奇怪的 ActionView::Template::错误未定义0101000020E61000541B9C887E7A52C02920ED7F80614440的方法“lon”:字符串: lonlat值(使用SRID:4326编码)将作为字符串读取。我几乎可以肯定,在将数据从开发迁移到生产过程中,数据存在损坏,因为在迁移之前,这不是一个问题Postgresql PostGIS地理查询返回一个字符串值,postgresql,postgis,Postgresql,Postgis,我有一个奇怪的问题。我的应用程序上的lonlat列在开发服务器上运行良好–它的输出是POINTX Y格式的。但是当我将数据移动到生产服务器时,输出是奇怪的 ActionView::Template::错误未定义0101000020E61000541B9C887E7A52C02920ED7F80614440的方法“lon”:字符串: lonlat值(使用SRID:4326编码)将作为字符串读取。我几乎可以肯定,在将数据从开发迁移到生产过程中,数据存在损坏,因为在迁移之前,这不是一个问题 有人知道数
有人知道数据库架构或列可能导致此问题吗?几何体字段将其数据存储为WKB。要查看WKT表示,您需要将查询更改为
select ST_Astext(the_geom) as geometry from table
然而,我不知道为什么在您的开发中,在WKB二进制数据和WKT字符串之间有某种隐式转换。?您使用的是什么版本的postgres和postgis
你的应用服务器中有什么语言
你正在使用的是ActiveRecord吗?我建议你试试类似的东西
float ST_X(geometry a_point);
确保您能够正确读取数据,并确定问题是在数据字段还是其他地方
如果确定问题出在geometry列上,我也会尝试一步完成pg_转储
您可以将pg_dump与选项一起使用
--exclude-table-data=reg_expresion_ _tablename_
--exclude-table-data=schema.reg_expresion_ _tablename_
这将带来所有架构定义,但不包括表数据,只从表中带来所需的数据。结果表明,当我终止与服务器的连接以迁移数据时,Rails没有设置架构搜索路径,这意味着在重新连接时没有发现postgis扩展。我必须重新启动服务器才能解决此问题。是的,它是ActiveRecord。我在我的应用服务器上使用RubyonRails。它被部署到Heroku。难道postgis没有添加到搜索路径中?因为这是我注意到的唯一问题,尽管我不知道为什么我的数据迁移脚本不会导出搜索路径……PostGIS版本是2.1.2。Postgresql版本是9.3。如何在服务器之间移动数据?在新服务器中,列仍然是几何体?在你的应用程序中,你如何阅读专栏?我分两步移动数据。首先,我转储数据库pg_dump-schema only-C-C的模式,并使用psql在远程服务器中恢复该模式。其次,我使用pg_dump-data only-C转储数据,并执行与上面相同的操作来恢复数据。远程服务器上的lonlat列仍然键入geometryPoint,4326。我只记得我做了另一件事。在移动数据之前,我关闭了与服务器的所有其他连接,包括Rails应用程序的连接。不确定这是否造成了我的问题。我的感觉是模式搜索路径与此有关。如果重新建立连接时postgis不在搜索路径中,应用程序将无法使用postgis功能,对吗?但在本地,当我终止连接时,应用程序似乎可以正常运行。所以…我仍然不确定发生了什么。将Postgis函数安装到template1中是一个好主意,这样可以确保任何新的dbs在默认情况下都会有这些函数,并且可以避免您在搜索路径中看到的一些问题。@JohnBarç一个好主意!非常感谢。