Tôi đã được chỉ ra một cách tuyệt vời để bulkinsert với ví dụ này:
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
Tuy nhiên, tôi cần chèn nhiều hàng từ nhiều mảng, vì vậy tôi đã thử cú pháp này:
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
Tôi có một khóa chính parent_table_idvà column_avà khi tôi cố gắng thực hiện truy vấn này, Postgres phàn nàn về vi phạm khóa trùng lặp.
Làm thế nào các mảng nên được mở ra để chúng tạo thành các hàng riêng lẻ?
Nói cách khác, nếu $2và $3cả hai đều có hai mục nhập, làm thế nào mục nhập đầu tiên của $2chỉ có thể được chèn với mục nhập đầu tiên $3và giống nhau cho các mục nhập thứ hai tương ứng?
Nếu điều này là không thể, tôi có thể xây dựng một mảng nhiều chiều không? Nếu vậy, làm thế nào nó được truyền với nhiều loại mảng và cú pháp mảng đa chiều là gì?