Descrição
Temos uma tabela e dados abaixo:
Version: PostgreSQL 9.3
Table name: tree_data (id int, code text, name text, parent_id int)
Primary key: id
Foreign key: parent_id (refer to id)
e dados:
insert into tree_data (id, code, name, parent_id) values (1, 'aaa','aaa', null);
insert into tree_data (id, code, name, parent_id) values (2, 'bbb','bbb', 1);
insert into tree_data (id, code, name, parent_id) values (3, 'ccc','ccc', 1);
id | code | name | parent_id
1 aaa aaa null
2 bbb bbb 1
3 ccc ccc 1
Aqui nossa consulta e resultado que queremos, significa: ao excluir id = 1 (linha pai), a tabela definirá automaticamente parent_id = null nas linhas filhas (primeiro nível).
delete from tree_data where id = 1 ;
----> rows after deleting:
id | code | name | parent_id
2 bbb bbb null
3 ccc ccc null
Nossas perguntas:
Podemos usar as restrições do postgresql para fazer isso? Se não, como podemos fazer?
Exemplo SQLFiddle: http://sqlfiddle.com/#!15/b9a62/1
Ao criar uma chave estrangeira no postgres, defina
ON DELETE SET NULL
.