PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chèn nhiều bản ghi với pg-promise

Tôi là tác giả của pg-promise .

Có hai cách để chèn nhiều bản ghi. Cách đầu tiên và điển hình nhất là thông qua một giao dịch, để đảm bảo rằng tất cả các bản ghi đều được chèn chính xác hoặc không có bản ghi nào trong số chúng.

Với pg-promise nó được thực hiện theo cách sau:

db.tx(t => {
    const queries = lst.map(l => {
        return t.none('INSERT INTO table(id, key, value) VALUES(${id}, ${key}, ${value})', l);
    });
    return t.batch(queries);
})
    .then(data => {
        // SUCCESS
        // data = array of null-s
    })
    .catch(error => {
        // ERROR
    });

Bạn bắt đầu giao dịch bằng phương thức tx , sau đó tạo tất cả INSERT truy vấn lời hứa và sau đó giải quyết tất cả chúng dưới dạng .

Cách tiếp cận thứ hai là ghép tất cả các giá trị chèn vào một INSERT duy nhất truy vấn mà tôi giải thích chi tiết trong Tăng hiệu suất . Xem thêm: Chèn nhiều hàng với pg-promise .

Để biết thêm ví dụ, hãy xem Tasks Giao dịch .

Bổ sung

Cần chỉ ra rằng trong hầu hết các trường hợp, chúng tôi không chèn bản ghi id , thay vì nó được tạo tự động. Đôi khi chúng tôi muốn lấy lại id-s mới và trong những trường hợp khác, chúng tôi không quan tâm.

Các ví dụ trên giải quyết bằng một mảng null -s, bởi vì giải quyết bằng một loạt các kết quả riêng lẻ và phương pháp không có giải quyết bằng null , theo API của nó.

Giả sử rằng chúng ta muốn tạo id-s mới và chúng ta muốn lấy lại tất cả. Để thực hiện điều này, chúng tôi sẽ thay đổi mã thành như sau:

db.tx(t => {
    const queries = lst.map(l => {
        return t.one('INSERT INTO table(key, value) VALUES(${key}, ${value}) RETURNING id',
                       l, a => +a.id);
    });
    return t.batch(queries);
})
    .then(data => {
        // SUCCESS
        // data = array of new id-s;
    })
    .catch(error => {
        // ERROR
    });

tức là những thay đổi là:

  • chúng tôi không chèn id giá trị
  • chúng tôi thay thế phương pháp không có với một , để lấy một hàng / đối tượng từ mỗi lần chèn
  • chúng tôi thêm RETURNING id vào truy vấn để nhận giá trị
  • chúng tôi thêm a => +a.id để thực hiện chuyển đổi hàng tự động. Xem thêm pg-promise trả về số nguyên dưới dạng chuỗi để hiểu điều đó + dành cho.

CẬP NHẬT-1

Để có cách tiếp cận hiệu suất cao thông qua một INSERT duy nhất truy vấn xem Chèn nhiều hàng với pg-promise .

CẬP NHẬT-2

Bài viết phải đọc: Nhập dữ liệu .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pandas - write_frame to sqlite - datetime64 [ns]

  2. Cách giải quyết Phương pháp org.postgresql.jdbc.PgConnection.createBlob () chưa được triển khai

  3. PostgreSQL bỏ qua dấu gạch ngang khi đặt hàng

  4. Truy cập máy chủ PostgreSQL từ mạng LAN

  5. Thay đổi kế hoạch thực thi của truy vấn trong postgresql theo cách thủ công?