Sobes.tech
Junior — Middle

Ce comportament al bazei de date PostgreSQL se observă dacă, la ștergerea unei înregistrări legate de o altă tabelă printr-o cheie externă, nu se specifică o acțiune explicită?

sobes.tech AI

Răspuns de la AI

În PostgreSQL, dacă la ștergerea unei înregistrări legate de o altă tabelă printr-o cheie externă nu se specifică o acțiune explicită (de exemplu, ON DELETE CASCADE sau ON DELETE SET NULL), comportamentul implicit este ON DELETE NO ACTION.

Aceasta înseamnă că o încercare de a șterge o înregistrare la care se face referire dintr-o altă tabelă va duce la o eroare de restricție a cheii externe, iar ștergerea nu va fi efectuată.

Astfel, baza de date previne încălcarea integrității datelor, împiedicând ștergerea unei înregistrări părinte atâta timp cât există înregistrări copil legate.

Exemplu:

-- Tabelul comenzilor cu o cheie externă către tabelul clienți
CREATE TABLE customers (
    id SERIAL PRIMARY KEY
);

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INT REFERENCES customers(id)
);

-- Încercarea de a șterge un client care are comenzi, fără ON DELETE CASCADE
DELETE FROM customers WHERE id = 1; -- va genera o eroare

Pentru a permite ștergerea cu eliminarea automată a înregistrărilor legate, trebuie specificat explicit ON DELETE CASCADE la crearea cheii externe.