Mit diesem Beispiel wurde mir eine großartige Möglichkeit zum Bulkinsert gezeigt :
WITH p AS (
INSERT INTO parent_table (column_1)
SELECT $1
RETURNING id)
INSERT INTO child_table (parent_table_id, column_a)
SELECT p.id, a
FROM p, unnest($2::text[]) AS a
Ich muss jedoch mehrere Zeilen aus mehreren Arrays einfügen, daher habe ich diese Syntax ausprobiert:
WITH p AS (
INSERT INTO parent_table (column_1)
SELECT $1
RETURNING id)
INSERT INTO child_table (parent_table_id, column_a, column_b)
SELECT p.id, a, b
FROM p, unnest($2::text[]) AS a, unnest($3::bigint[]) AS b
Ich habe einen Primärschlüssel auf parent_table_id
und column_a
, und wenn ich versuche , diese Abfrage auszuführen, Postgres klagt über eine doppelte Schlüsselverletzung.
Wie sollen die Arrays entpackt werden, damit sie einzelne Zeilen bilden?
Mit anderen Worten, wenn $2
und $3
beide zwei Einträge haben, wie kann der erste Eintrag von $2
nur mit dem ersten Eintrag von $3
und derselbe für die jeweiligen zweiten Einträge eingefügt werden ?
Wenn dies nicht möglich ist, kann ich ein mehrdimensionales Array erstellen? Wenn ja, wie sollte es mit mehreren Array-Typen übergeben werden und wie lautet die mehrdimensionale Array-Syntax?
quelle