postgres SELECT查询返回不可用的结果

布兰登

我有一个简单的SELECT查询,返回的结果不可用。我在node.js中使用pg-promise

[
  {
    "function_name": "(f10d1988-4db5-49de-97ab-0c8b15bedfa7,image.jpg,Image)"
  },
  {
    "function_name": "(f10d1988-4db5-49de-97ab-0c8b15bedfa7,image2.jpg,Image 2)"
  }
]

但是我期待像这样的基本json结构

[
  {
    id: '',
    title: '',
    image: ''
  },
  {...etc}
]

为什么这样做呢?如何获得标准化结果?

我的查询如下所示:

CREATE OR REPLACE FUNCTION get_photos(
  title_param     TEXT
)
RETURNS TABLE(
  id         UUID,
  image      varchar(200),
  title      varchar(200) 
) AS
$func$
BEGIN
  RETURN QUERY SELECT
    i.id,
    i.image,
    i.title
  FROM images AS i
  WHERE i.title = title_param;
END;
$func$ LANGUAGE PLPGSQL;

这是我的数据库连接器设置,几乎所有默认设置。

require('dotenv').config();
const Promise = require('bluebird');
const pg = require('pg-promise')({
  promiseLib: Promise
});

const config = {
  user: process.env.USER,
  host: process.env.HOST,
  database: process.env.DATABASE,
  password: process.env.PASSWORD
};

const db = pg(config);

export default db;

这是调用函数的快速端点:

export const getData = async (req, res) => {
  const { title } = req.query;
  let data;
  try {
    data = await db.many('SELECT function_name($1)', [title]);
  } catch (err) {
    data = err;
  }
  res.send(data);
};

编辑

我手动运行查询,而不是通过函数运行,并且数据正确返回,这意味着TABLE()返回存在问题。可能导致此问题的原因是什么?

images = await db.many(`
  SELECT
    p.id,
    p.img,
    p.type,
    p.title
  FROM photos p
  WHERE p.type = '${type}';
`, [type]);
生命力

使用func作为查询方法:

data = await db.func('function_name', [title]);

它假定您返回一个表,因此默认情况下将为您工作。

对于存储过程,有proc方法。


另外,您用于图片查询的参数格式错误,请参见命名参数

重要信息:切勿${}在ES6模板字符串中使用保留的语法...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章