This is what finally worked. I needed to use a SELECT * FROM
instead of VALUES
let query = sql`
INSERT INTO users
(${sql.join(identifiers, sql`, `)})
SELECT * FROM
${sql.unnest(values, values_types)}
RETURNING *
`
Here is the whole function:
const keys = [
'username',
'email',
];
const identifiers = keys.map((key) => {
return sql.identifier([key]);
});
const values = [
['nilesh', '[email protected]'], // single full record
['bailey', '[email protected]'], // single full record
]
const values_types = [`varchar`,`varchar`];
const main = async(connection = slonik) => {
let query = sql`
INSERT INTO users
(${sql.join(identifiers, sql`, `)})
SELECT * FROM
${sql.unnest(values, values_types)}
RETURNING *
`
try {
const results = await connection.query(query)
console.log(results);
return results
} catch (error) {
console.error(error);
}
}
main()
This is what the query now expands to:
{
sql: '\n' +
'INSERT INTO users\n' +
' ("username", "email")\n' +
'SELECT * FROM\n' +
' unnest($1::"varchar"[], $2::"varchar"[])\n' +
'RETURNING *\n',
type: 'SLONIK_TOKEN_SQL',
values: [
[ 'nilesh', 'bailey' ],
[ '[email protected]', '[email protected]' ]
]
}
CLICK HERE to find out more related problems solutions.