节点postgres和重复连接字段名称

我正在编写一个使用pg包访问PostgreSQL数据库的node.js应用程序。 我遇到的问题是,如果我做这样的查询:

select * from posts p inner join blogs b on b.id = p.blog_id 

当我得到结果时,它们都在同一个命名空间中,所以博客表中重复的任何字段都将覆盖posts表中的那些字段。

我的问题是,将这些结果绑定到对象的最好方法是什么?

理想情况下,我想要一个像这样的结果:

 { id: 1, name: 'A post name', published_at: (some date object), blog_id: 1, b: { id: 1, name: 'A blog name' } } 

但我打开任何方便的解决scheme,手动添加每个列的别名。

http://www.postgresql.org/docs/9.3/static/functions-json.html http://www.postgresql.org/docs/9.4/static/functions-aggregate.html

你可能想看看Postgres的json特性。 如果我正确地理解了你,没有一个testing数据库这样的东西可能接近你正在寻找的东西:

 SELECT p.*, /* Select all the post fields */ row_to_json(blogs.*) as b /* Use the row_to_json function on the blogs results */ FROM posts p INNER JOIN blogs ON (blogs.id=p.blog_id); /* Join blogs on the proper fields */ 

返回:

 { id: 3, name: 'test', published_at: 2015-10-08, blog_id: 2, b: { id:2, name:"test 2" } } 

这里有一个很好的教程: http : //bender.io/2013/09/22/returning-hierarchical-data-in-a-single-sql-query/

如果你改变你的查询

 'SELECT * FROM posts, blogs WHERE posts.id = blogs.id;' 

你应该有你的列名前缀'职位'或'博客'

如果你想要一个如上所述的嵌套结果,你将不得不运行一些手动处理。

 res.map(d => { return { id: d.posts_id b : { id: d.blogs_id } }; });