2

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]);
vitaly-t
  • 24,279
  • 15
  • 116
  • 138
Samuel Goldenbaum
  • 18,391
  • 17
  • 66
  • 104

1 Answers1

5

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-promise does not have any :array filter, see supported filters.
Community
  • 1
  • 1
vitaly-t
  • 24,279
  • 15
  • 116
  • 138