PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So aktualisieren Sie Zeilen von zwei Tabellen mit Fremdschlüsselbeschränkungen

In Postgres können Sie einen beschreibbaren CTE verwenden, um beide Tabellen in einer einzigen Anweisung zu aktualisieren.

Angenommen, dieser Tabellenaufbau:

create table a (rid integer primary key, ride text, qunta integer);
create table b (kid integer primary key, rid integer references a, date date);

Der CTE wäre:

with new_a as (
  update a 
    set rid = 110
  where rid = 1
)
update b 
  set rid = 110 
where rid = 1;

Da (nicht aufschiebbare) Fremdschlüssel auf Anweisungsebene ausgewertet werden und sowohl der Primär- als auch der Fremdschlüssel in derselben Anweisung geändert werden , das funktioniert.

SQLFiddle:http://sqlfiddle.com/#!15/db6d1/1