Sobes.tech
Junior — Middle

Aké správanie databázy PostgreSQL sa pozoruje, ak pri odstraňovaní záznamu, ktorý je spojený s inou tabuľkou cez cudzí kľúč, nie je uvedená žiadna explicitná akcia?

sobes.tech AI

Odpoveď od AI

V PostgreSQL, ak pri odstraňovaní záznamu, ktorý je spojený s inou tabuľkou cez cudzí kľúč, nie je uvedená žiadna explicitná akcia (napríklad ON DELETE CASCADE alebo ON DELETE SET NULL), predvolené správanie je ON DELETE NO ACTION.

To znamená, že pokus o odstránenie záznamu, na ktorý odkazuje iná tabuľka, spôsobí chybu obmedzenia cudzieho kľúča a odstránenie nebude vykonané.

Týmto spôsobom databáza zabraňuje narušeniu integrity dát tým, že zakazuje odstránenie rodičovského záznamu, pokiaľ existujú s ním spojené detské záznamy.

Príklad:

-- Tabuľka objednávok s cudzím kľúčom na tabuľku zákazníkov
CREATE TABLE customers (
    id SERIAL PRIMARY KEY
);

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

-- Pokus o odstránenie zákazníka, ktorý má objednávky, bez `ON DELETE CASCADE`
DELETE FROM customers WHERE id = 1; -- spôsobí chybu

Pre umožnenie mazania s automatickým odstraňovaním súvisiacich záznamov je potrebné pri vytváraní cudzieho kľúča explicitne uviesť ON DELETE CASCADE.