PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wstawianie wielu rekordów z pg-promise

Jestem autorem pg-promise .

Istnieją dwa sposoby wstawiania wielu rekordów. Pierwszym i najbardziej typowym sposobem jest transakcja, aby upewnić się, że wszystkie rekordy są wstawione poprawnie lub żaden z nich.

Z pg-promise odbywa się to w następujący sposób:

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
    });

Transakcję inicjujesz za pomocą metody tx , a następnie utwórz wszystkie INSERT obietnice zapytań, a następnie rozwiąż je wszystkie jako partie .

Drugie podejście polega na połączeniu wszystkich wstawianych wartości w jednym INSERT zapytanie, które szczegółowo wyjaśniam w Zwiększenie wydajności . Zobacz też:Wkładka wielorzędowa z pg-promise .

Więcej przykładów znajdziesz w Zadania i Transakcje .

Dodanie

Warto zaznaczyć, że w większości przypadków nie wstawiamy rekordu id , raczej generuj go automatycznie. Czasami chcemy odzyskać nowe identyfikatory, a w innych nie obchodzi nas to.

Powyższe przykłady rozwiązywane są za pomocą tablicy null -s, ponieważ partia rozwiązuje się z tablicą pojedynczych wyników i metodą none rozwiązuje z null , zgodnie z jego API.

Załóżmy, że chcemy wygenerować nowe identyfikatory i że chcemy je wszystkie odzyskać. Aby to osiągnąć, zmienilibyśmy kod na następujący:

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
    });

czyli zmiany to:

  • nie wstawiamy id wartości
  • zamieniamy metodę brak z jeden , aby uzyskać jeden wiersz/obiekt z każdej wstawki
  • dodajemy RETURNING id do zapytania, aby uzyskać wartość
  • dodajemy a => +a.id aby wykonać automatyczną transformację wiersza. Zobacz też pg-promise zwraca liczby całkowite jako ciągi aby zrozumieć, co to + jest dla.

AKTUALIZACJA-1

Dla wysokowydajnego podejścia za pomocą jednej INSERT zapytanie patrz Wstawianie wielu wierszy z pg-promise .

AKTUALIZACJA-2

Artykuł, który trzeba przeczytać:Import danych .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekazywanie tabeli jako parametru

  2. (psycopg2.DataError) nieprawidłowa składnia wejściowa dla liczby całkowitej:importowanie z pliku csv?

  3. Samozarządzające tablice partycji PostgreSQL

  4. Określ kraj na podstawie adresu IP - IPv6

  5. Automatycznie twórz superużytkownika dla każdego schematu django