sql >> Database teknologi >  >> RDS >> PostgreSQL

Kan INSERT [...] ON CONFLICT bruges til krænkelser af fremmednøgler?

Ja, tilføj dine inputrækker til den refererede tabel, og fjern derved rækker uden match i FK-kolonnen:

INSERT INTO entries(entry_id, referenced_id, name) SELECT val.entry_id, val.referenced_id, val.name FROM ( VALUES (1, 2, 'references two') -- more? ) val (entry_id, referenced_id, name) JOIN referenced USING (referenced_id) -- drop rows without matching FK ON CONFLICT (entry_id) DO NOTHING; -- drop rows with duplicate id

Selve UPSERT (INSERT ... ON CONFLICT DO NOTHING ) reagerer kun på unikke overtrædelser. Manualen:

ON CONFLICT kan bruges til at angive en alternativ handling til at rejse en unik begrænsnings- eller ekskluderingsbegrænsningsfejl. (Se ON CONFLICT-klausulen nedenfor.)

Siden VALUES udtryk er nu ikke knyttet til en INSERT direkte afledes kolonnetyper ikke fra måltabellen. Du skal muligvis caste inputværdier eksplicit, når der arbejdes med ikke-grundlæggende typer. Se:

  • Caster NULL-typen ved opdatering af flere rækker



  1. Forbinder Oracle til PostgreSQL

  2. fange DB-undtagelse i JSF+EJB-applikation

  3. Forbind ODBC-applikationer på Windows til QuickBooks Online

  4. Data fra oracle i utf-8 med php