PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como atualizar linhas de duas tabelas que possuem restrições de chave estrangeira


No Postgres, você pode usar um CTE gravável para atualizar as duas tabelas em uma única instrução.

Assumindo esta configuração de tabela:
create table a (rid integer primary key, ride text, qunta integer);
create table b (kid integer primary key, rid integer references a, date date);

O CTE seria:
with new_a as (
  update a 
    set rid = 110
  where rid = 1
)
update b 
  set rid = 110 
where rid = 1;

Como as chaves estrangeiras (não adiáveis) são avaliadas no nível da instrução e tanto a chave primária quanto a estrangeira são alteradas na mesma instrução , isso funciona.

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