PostgreSQL tiene una interpretación tan extendida de los VALUES
cláusula que puede usarse como una subconsulta por sí misma.
Por lo que puede expresar su consulta en este formulario:
WITH new_invoice AS (
INSERT INTO ...
RETURNING id
),
v(a,b,c,d) AS (values
($27,$28,$29,$30),
($31,$32,$33,$34),
...
)
INSERT INTO invoiceItems (invoice_id, name, qty, price, description)
SELECT new_invoice.id, a,b,c,d FROM v, new_invoice;
Eso supone que desea insertar el producto cartesiano de new_invoice
y los valores, que en su mayoría tiene sentido si new_invoice
es en realidad un valor de una sola fila.