2014-05-18 39 views
0

我想从使用nodejs的启用PostGIS的PostgreSQL数据库中获得一个随机几何,但是当我尝试甚至执行第一个查询时,为了在数据集中获得'max'自动生成的顺序标识,它会抛出上述错误。我意识到错误是因为它期望一个字符串而不是一个数值,但由于'gid'字段是数字,我不知道如何解决这个问题。node.js和PostgreSQL查询 - 抛出新的TypeError('第一个参数必须是字符串或缓冲区');

任何帮助解释问题/修复它,所以我可以从数据库中获得我的随机对象将是非常有益的。提前致谢。

var db = new pg.Client(conString); 
db.connect(); 

function getRandObj(){ 
    var max = db.query(" SELECT MAX(`gid`) FROM `buildings` "); 
    //var min = db.query(" SELECT MIN(`gid`) FROM `buildings` "); 
    //var random = mt_rand(min , max); 
    //var result = db.query(" ST_AsGeoJSON(geom) FROM `buildings` WHERE `gid` >= random LIMIT 0,1 "); 
    //return result 
} 

回答

1

我还没有搞砸node.js太多,但是,我已经尝试了一点。看看你的代码在这里:

var max = db.query(" SELECT MAX(`gid`) FROM `buildings` "); 

我看到一些潜在的问题。首先,反引号。我认为他们是一个错误。更改查询阅读:

var max = db.query(" SELECT MAX(gid) FROM buildings "); 

或者,如果你真的想看到在那里的报价,你应该用“名”引号,如:

var max = db.query(' SELECT MAX("gid") FROM "buildings" '); 

的第二件事就是返回值。我不认为你会得到那样的直接回报。你有没有尝试过这样的事情:

var max = -1; 
q = db.query(' SELECT MAX("gid") FROM "buildings" as mx '); 

q.on('row', function (row) { 
    console.log(row); 
    max = row.mx; 
}; 
console.log("max is %d", max); 

-g

+0

谢谢。我只是刚刚开始使用节点,并且一直在努力让我的头脑变得圆满。删除反引号将我的查询问题排除在外,我认为你的回报是正确的,但我将不得不按照它的外观做更多的研究。再次感谢。 – hansolo

相关问题