Chèn hàng loạt
Bạn có thể sửa đổi chèn hàng loạt ba cột bằng @Ketema:
INSERT INTO "table" (col1, col2, col3)
VALUES (11, 12, 13) , (21, 22, 23) , (31, 32, 33);
Nó trở thành:
INSERT INTO "table" (col1, col2, col3)
VALUES (unnest(array[11,21,31]),
unnest(array[12,22,32]),
unnest(array[13,23,33]))
Thay thế các giá trị bằng trình giữ chỗ:
INSERT INTO "table" (col1, col2, col3)
VALUES (unnest(?), unnest(?), unnest(?))
Bạn phải chuyển các mảng hoặc danh sách làm đối số cho truy vấn này. Điều này có nghĩa là bạn có thể thực hiện chèn số lượng lớn mà không cần nối chuỗi (và tất cả các rắc rối và nguy hiểm của nó:chèn sql và trích dẫn địa ngục).
Cập nhật hàng loạt
PostgreSQL đã thêm phần mở rộng FROM vào UPDATE. Bạn có thể sử dụng nó theo cách này:
update "table"
set value = data_table.new_value
from
(select unnest(?) as key, unnest(?) as new_value) as data_table
where "table".key = data_table.key;
Hướng dẫn sử dụng thiếu phần giải thích hay, nhưng có một ví dụ về danh sách gửi thư postgresql-admin. Tôi đã cố gắng giải thích thêm về nó:
create table tmp
(
id serial not null primary key,
name text,
age integer
);
insert into tmp (name,age)
values ('keith', 43),('leslie', 40),('bexley', 19),('casey', 6);
update tmp set age = data_table.age
from
(select unnest(array['keith', 'leslie', 'bexley', 'casey']) as name,
unnest(array[44, 50, 10, 12]) as age) as data_table
where tmp.name = data_table.name;
Ngoài ra còn có các bài đăng khác trên StackExchange giải thích về UPDATE...FROM..
sử dụng VALUES
mệnh đề thay vì một truy vấn con. Chúng có thể dễ đọc hơn, nhưng bị hạn chế ở một số hàng cố định.