Tag: plpgsql

如何从按距离排序的JPA实体获得结果?

我目前正在编写一个移动应用程序,用户必须从列表中选择一个位置。 使用来自Play应用程序的JPA将所有位置存储在Postgres数据库中。 我想要做的是在应用程序中获取用户位置,然后请求获取离该用户最近的前20或50个位置。 如果我使用自己的数据结构,我会使用KD-Tree。 但是,我对JPA / Play / PostgreSQL很新,所以我不确定如何手动处理数据持久性。 我能用现有的知识来思考的唯一事情就是查看每个位置并确定它的距离,但是在如此庞大的数据库中,这个速度会非常慢。 有没有一个查询我可以说“给我X的第一个结果按照这个纬度和经度的距离排序? 编辑:我正在使用Heroku,因为应用程序处于开发的早期阶段,如果你想在你的应用程序中使用PostGIS,我宁愿不必支付每天200美元的Heroku费用。

Postgresql JDBC表值参数

MSSQL有一个很棒的function叫做Table Valued Parameters 。 它允许您将自定义数据表传递给存储过程和函数。 我想知道PostgreSQL中的等价物,如果存在,使用JDBC? 我知道将数组作为函数参数传递的选项,但这似乎仅限于PostgreSQL数据类型。 考虑以下PL / pgSQL代码: CREATE TYPE number_with_time AS( _num float, _date timestamp ); 和这个函数头: CREATE OR REPLACE FUNCTION myfunc(arr number_with_time[]) 任何人都可以使用JDBC驱动程序发布Java代码,使用用户定义数据类型的数组调用该函数吗?

从PL / pgSQL函数返回行

我在PostgreSQL中有一个过程: CREATE OR REPLACE FUNCTION get_geom_difference() RETURNS void AS $$ BEGIN SELECT filedata.num,st_area(ST_Difference(ST_TRANSFORM(filedata.the_geom,70066),filedata_temp.the_geom)) FROM filedata, filedata_temp Where filedata.num=filedata_temp.num end; $$ LANGUAGE ‘plpgsql’ 我在Java中调用它并希望获得此过程的结果。 如何更改此过程以使结果成为可能? 以及如何在JDBC中使用它? 现在我用这个: Integer fileId; Class.forName(“org.postgresql.Driver”); Connection connect= null; connect = DriverManager.getConnection(“jdbc:postgresql://localhost:5432/postgis”,”postgres”,”123456″); java.sql.CallableStatement proc = connect.prepareCall(“{?=call get_geom_difference()}”); proc.registerOutParameter(1, java.sql.Types.Integer); proc.execute(); ResultSet results = (ResultSet) proc.getObject(1); while (results.next()) { fileId=r.getInt(“num”); } proc.close(); connect.close(); […]