BiorącCzy INSERT [...] ON CONFLICT może być użyte do naruszenia klucza obcego?
=> select * from referenced;
referenced_id | name
---------------+-------
1 | one
2 | two
3 | three
i
=> select * from entries;
entry_id | referenced_id | name
----------+---------------+------------------
1 | 3 | references three
gdzie referenced_id
i entry_id
są klucze podstawowe.
Chcę wstawić instrukcję dla entries
, która pomija wstawianie, jeśli już istnieje entry_id
lub pozycja, do której nie istnieje odwołanie. Pierwszy z nich jest łatwy do wykonania:
INSERT INTO entries
VALUES (1, 2, 'references two')
ON CONFLICT (entry_id) DO NOTHING;
Czy można tu również sprawdzić istnienie klucza obcego?
To działa bardzo ładnie, bardzo doceniane. Dziękuję również za wyjaśnienie dotyczące klauzuli "ON CONFLICT". – peterwimsey
Czy ta praca przy wstawianiu do tej samej tabeli próbuję się odwoływać? więc coś w stylu 'INSERT INTO entries ... JOIN entries'? –
@JuanCarlosOropeza: Możesz dołączyć do tej samej tabeli w ten sam sposób, po prostu upewnij się, że warunek łączenia może pasować tylko do * pojedynczego * wiersza. W przeciwnym razie musisz użyć innej techniki. –