Que comportamento da base de dados PostgreSQL é observado se, ao excluir um registo relacionado com outra tabela através de uma chave estrangeira, não for especificada uma ação explícita?
sobes.tech IA
Resposta da IA
No PostgreSQL, se ao eliminar um registo relacionado com outra tabela através de uma chave estrangeira não for especificada uma ação explícita (por exemplo, ON DELETE CASCADE ou ON DELETE SET NULL), o comportamento padrão é ON DELETE NO ACTION.
Isto significa que uma tentativa de eliminar um registo ao qual há referências noutra tabela resultará num erro de restrição de chave estrangeira, e a eliminação não será efetuada.
Assim, a base de dados impede a violação da integridade dos dados, impedindo a eliminação de um registo pai enquanto existam registos filhos relacionados.
Exemplo:
-- Tabela de encomendas com uma chave estrangeira para a tabela de clientes
CREATE TABLE customers (
id SERIAL PRIMARY KEY
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT REFERENCES customers(id)
);
-- Tentativa de eliminar um cliente que tem encomendas, sem ON DELETE CASCADE
DELETE FROM customers WHERE id = 1; -- irá gerar um erro
Para permitir a eliminação com remoção automática de registos relacionados, deve-se especificar explicitamente ON DELETE CASCADE ao criar a chave estrangeira.