मैं पोस्टग्रेज 9.5.0 का उपयोग कर रहा हूं। मेरे पास निम्न तालिका है:
myproject=> \d my_objects;
Table "public.my_objects"
Column | Type | Modifiers
---------------------+-----------------------------+-------------------------------------
name | character varying |
day | date |
distance | double precision |
user_id | integer |
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
distance_unit_id | integer |
import_completed | boolean |
id | character varying | not null default uuid_generate_v4()
linked_my_object_time_id | character varying |
web_crawler_id | integer |
address_id | character varying |
Indexes:
"my_objects_pkey" PRIMARY KEY, btree (id)
"index_my_objects_on_user_id_and_day_and_name" UNIQUE, btree (user_id, day, name)
"index_my_objects_on_user_id" btree (user_id)
"index_my_objects_on_web_crawler_id" btree (web_crawler_id)
Foreign-key constraints:
"fk_rails_5287d445c0" FOREIGN KEY (address_id) REFERENCES addresses(id) ON DELETE CASCADE
"fk_rails_970b2325bf" FOREIGN KEY (distance_unit_id) REFERENCES distance_units(id)
"fk_rails_dda3297b57" FOREIGN KEY (linked_my_object_time_id) REFERENCES my_object_times(id) ON DELETE CASCADE
"fk_rails_ebd32625bc" FOREIGN KEY (web_crawler_id) REFERENCES web_crawlers(id)
"fk_rails_fa07601dff" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
अभी, प्रत्येक my_object में एक पता फ़ील्ड है। मैं जो चाहता हूं वह यह है कि जब मैं my_object हटाता हूं, तो संबंधित पता प्रविष्टि भी हटा दी जाती है। my_objects तालिका से address_id कॉलम को स्थानांतरित किए बिना, क्या कुछ ऐसा सेट करना संभव है कि जब मैं my_objects तालिका से एक पंक्ति हटाता हूं, तो कोई भी संबंधित पता डेटा भी हटा दिया जाता है? जाहिर है, मैंने जो विदेशी कुंजी स्थापित की है, उससे काम नहीं चलेगा।
1 उत्तर
आप इसे ट्रिगर के साथ कर सकते हैं:
CREATE OR REPLACE FUNCTION remove_address() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
DELETE FROM public.addresses WHERE id = OLD.address_id;
RETURN OLD;
END;$$;
CREATE TRIGGER remove_address
AFTER DELETE ON public.my_objects FOR EACH ROW
EXECUTE PROCEDURE remove_address()
संबंधित सवाल
नए सवाल
postgresql
PostgreSQL एक खुला-स्रोत, रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है जो लिनक्स, यूनिक्स, विंडोज और ओएस एक्स सहित सभी प्रमुख प्लेटफार्मों के लिए उपलब्ध है। प्रश्न पूछते समय कृपया अपने पोस्टग्रेज के संस्करण का उल्लेख करें। प्रशासन या उन्नत सुविधाओं से संबंधित प्रश्न dba.stackexchange.com के लिए सर्वोत्तम हैं।
my_objects
में शामिल किया जाए?adresses
प्रविष्टि को संदर्भित करने वाली एक से अधिकmy_objects
प्रविष्टियां हैं?