如何解决node-postgres 传递自定义类型的数组
我有一个 Postgres 函数,它接受一个自定义类型的数组:
CREATE TYPE "metric_type" AS (
"type" TEXT,"value" TEXT
);
CREATE FUNCTION metric_create(
_metrics metric_type[]
)
RETURNS TEXT
LANGUAGE plpgsql
AS $$
BEGIN
-- actual inserting omitted for brevity
return _metrics::text;
END;
$$;
我可以直接调用 Postgres 函数,它成功并插入我的记录:
select metric_create(
array[
row('FOO','123'),row('BAR','456')
]::metric_type[]
);
但是,我需要从 JavaScript 中调用该函数,为此我使用 node-postgres。在 JavaScript 中,我的查询如下所示:
const metrics = [{
type: 'FOO',value: '123',},{
type: 'BAR',value: '456',]
const statement = {
name: 'metricCreate',text: 'SELECT * FROM metric_create($1)',values: [
metrics.map(p => [
p.type,p.value
])
],}
await client.query(statement)
然而,这会导致以下错误:
error: malformed record literal: "FOO"
at Parser.parseErrorMessage (node_modules/pg-protocol/src/parser.ts:369:69)
at Parser.handlePacket (node_modules/pg-protocol/src/parser.ts:188:21)
at Parser.parse (node_modules/pg-protocol/src/parser.ts:103:30)
at Socket.<anonymous> (node_modules/pg-protocol/src/index.ts:7:48)
at Socket.emit (events.js:315:20)
at addChunk (_stream_readable.js:309:12)
at readableAddChunk (_stream_readable.js:284:9)
at Socket.Readable.push (_stream_readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:188:23) {
length: 119,severity: 'ERROR',code: '22P02',detail: 'Missing left parenthesis.',hint: undefined,position: undefined,internalPosition: undefined,internalQuery: undefined,where: undefined,schema: undefined,table: undefined,column: undefined,dataType: undefined,constraint: undefined,file: 'rowtypes.c',line: '156',routine: 'record_in'
}
使用自定义定义类型的数组从 JavaScript 调用 pg 函数的正确方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。