postgres SELECT 查询 returns 无法使用的结果
postgres SELECT query returns unusable result
我有一个简单的 SELECT 查询 return 结果不可用。我在 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()', [title]);
} catch (err) {
data = err;
}
res.send(data);
};
编辑
我 运行 手动查询而不是通过函数查询,并且数据 return 正确编辑,这意味着我的 TABLE() return 有问题.什么可能导致此问题?
images = await db.many(`
SELECT
p.id,
p.img,
p.type,
p.title
FROM photos p
WHERE p.type = '${type}';
`, [type]);
因为该函数被定义为返回一个 table,所以您需要像 table 一样使用它:
SELECT * FROM function_name()
使用func作为查询方式:
data = await db.func('function_name', [title]);
它假定您 return 和 table,因此默认情况下会为您工作。
对于存储过程,有 proc 方法。
此外,您的图像查询参数格式错误,请参见Named Parameters:
IMPORTANT: Never use the reserved ${}
syntax inside ES6 template strings ...
我有一个简单的 SELECT 查询 return 结果不可用。我在 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()', [title]);
} catch (err) {
data = err;
}
res.send(data);
};
编辑
我 运行 手动查询而不是通过函数查询,并且数据 return 正确编辑,这意味着我的 TABLE() return 有问题.什么可能导致此问题?
images = await db.many(`
SELECT
p.id,
p.img,
p.type,
p.title
FROM photos p
WHERE p.type = '${type}';
`, [type]);
因为该函数被定义为返回一个 table,所以您需要像 table 一样使用它:
SELECT * FROM function_name()
使用func作为查询方式:
data = await db.func('function_name', [title]);
它假定您 return 和 table,因此默认情况下会为您工作。
对于存储过程,有 proc 方法。
此外,您的图像查询参数格式错误,请参见Named Parameters:
IMPORTANT: Never use the reserved
${}
syntax inside ES6 template strings ...