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_id
và column_a
và 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 $2
và $3
cả hai đều có hai mục nhập, làm thế nào mục nhập đầu tiên của $2
chỉ có thể được chèn với mục nhập đầu tiên $3
và 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ì?