Sobes.tech
Junior — Middle

Kāda ir PostgreSQL datu bāzes uzvedība, ja, dzēšot ierakstu, kas ir saistīts ar citu tabulu caur ārējo atslēgu, nav norādīta skaidra darbība?

sobes.tech AI

Atbilde no AI

PostgreSQL, ja, dzēšot ierakstu, kas ir saistīts ar citu tabulu caur ārējo atslēgu, nav norādīta skaidra darbība (piemēram, ON DELETE CASCADE vai ON DELETE SET NULL), pēc noklusējuma tiek piemērots ON DELETE NO ACTION.

Tas nozīmē, ka mēģinājums dzēst ierakstu, uz kuru atsaucas cita tabula, radīs ārējās atslēgas ierobežojuma kļūdu, un dzēšana netiks veikta.

Tādējādi datu bāze novērš datu integritātes pārkāpumu, neļaujot dzēst vecāku ierakstu, kamēr ir saistīti bērnu ieraksti.

Piemērs:

-- Pasūtījumu tabula ar ārējo atslēgu uz klientu tabulu
CREATE TABLE customers (
    id SERIAL PRIMARY KEY
);

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

-- Mēģinājums dzēst klientu, kuram ir pasūtījumi, bez `ON DELETE CASCADE`
DELETE FROM customers WHERE id = 1; -- radīs kļūdu

Lai ļautu automātisku saistīto ierakstu dzēšanu, ir skaidri jānorāda ON DELETE CASCADE ārējā atslēgā.