问题
Given a table with a column of type jsonb[], how do I insert a json array into the column?
Using the provided formatters :array, :json won't work in this instance - unless I am missing the correct combination or something.
const links = [
{
title: 'IMDB',
url: 'https://www.imdb.com/title/tt0076759'
},
{
title: 'Rotten Tomatoes',
url: 'https://www.rottentomatoes.com/m/star_wars'
}
];
const result = await db.none(`INSERT INTO tests (links) VALUES ($1:json)`, [links]);
回答1:
You do not need the library's :json filter in this case, as you need an array of JSON objects, and not a JSON with an array of JSON objects.
The former is formatted correctly by default, which then only needs ::json[] type casting:
await db.none(`INSERT INTO tests(links) VALUES($1::json[])`, [links]);
Other Notes
- Use pg-monitor or event query to output queries being executed, for easier diagnostics.
- Method none can only resolve with
null, no point storing the result in a variable. - Library
pg-promisedoes not have any:arrayfilter, see supported filters.
来源:https://stackoverflow.com/questions/58758254/how-to-insert-jsonb-data-into-column-using-pg-promise