PostgreSQL 8 में बाद में ड्रॉप किए बिना निम्न तालिका में दोनों विदेशी कुंजी को "कैस्केड हटाने पर" जोड़ना संभव है?"डिलीट कैस्केड" बाधाओं को कैसे जोड़ा जाए?
# \d pref_scores
Table "public.pref_scores"
Column | Type | Modifiers
---------+-----------------------+-----------
id | character varying(32) |
gid | integer |
money | integer | not null
quit | boolean |
last_ip | inet |
Foreign-key constraints:
"pref_scores_gid_fkey" FOREIGN KEY (gid) REFERENCES pref_games(gid)
"pref_scores_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
दोनों संदर्भित टेबल में नीचे हैं - यहाँ:
# \d pref_games
Table "public.pref_games"
Column | Type | Modifiers
----------+-----------------------------+----------------------------------------------------------
gid | integer | not null default nextval('pref_games_gid_seq'::regclass)
rounds | integer | not null
finished | timestamp without time zone | default now()
Indexes:
"pref_games_pkey" PRIMARY KEY, btree (gid)
Referenced by:
TABLE "pref_scores" CONSTRAINT "pref_scores_gid_fkey" FOREIGN KEY (gid) REFERENCES pref_games(gid)
और यहाँ:
# \d pref_users
Table "public.pref_users"
Column | Type | Modifiers
------------+-----------------------------+---------------
id | character varying(32) | not null
first_name | character varying(64) |
last_name | character varying(64) |
female | boolean |
avatar | character varying(128) |
city | character varying(64) |
login | timestamp without time zone | default now()
last_ip | inet |
logout | timestamp without time zone |
vip | timestamp without time zone |
mail | character varying(254) |
Indexes:
"pref_users_pkey" PRIMARY KEY, btree (id)
Referenced by:
TABLE "pref_cards" CONSTRAINT "pref_cards_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_catch" CONSTRAINT "pref_catch_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_chat" CONSTRAINT "pref_chat_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_game" CONSTRAINT "pref_game_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_hand" CONSTRAINT "pref_hand_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_luck" CONSTRAINT "pref_luck_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_match" CONSTRAINT "pref_match_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_misere" CONSTRAINT "pref_misere_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_money" CONSTRAINT "pref_money_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_pass" CONSTRAINT "pref_pass_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_payment" CONSTRAINT "pref_payment_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_rep" CONSTRAINT "pref_rep_author_fkey" FOREIGN KEY (author) REFERENCES pref_users(id)
TABLE "pref_rep" CONSTRAINT "pref_rep_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_scores" CONSTRAINT "pref_scores_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
TABLE "pref_status" CONSTRAINT "pref_status_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id)
और यह भी मुझे आश्चर्य है कि अगर यह पूर्व मेज पर 2 index'es जोड़ने के लिए समझ में आता है ?
अद्यतन: लिए धन्यवाद, और भी मैं मेलिंग सूची पर सलाह की कोई जरूरत नहीं एक सौदे मिल गया है, कि मैं इसे 1 बयान में प्रबंधन कर सकते हैं और इस प्रकार:
ALTER TABLE public.pref_scores
DROP CONSTRAINT pref_scores_gid_fkey,
ADD CONSTRAINT pref_scores_gid_fkey
FOREIGN KEY (gid)
REFERENCES pref_games(gid)
ON DELETE CASCADE;
थोड़ा ओटी, लेकिन मुझे लगता है कि आपने कॉलम संदर्भ देने पर इंडेक्स नहीं बनाए हैं (उदाहरण के लिए, 'pref_scores.gid')। यदि आप उन तालिकाओं में कई पंक्तियां प्राप्त करते हैं, तो संदर्भित तालिका पर हटाए गए लोगों के बिना लंबा समय लगेगा। कुछ डेटाबेस स्वचालित रूप से संदर्भ कॉलम पर एक अनुक्रमणिका बनाते हैं; PostgreSQL आपको छोड़ देता है, क्योंकि कुछ ऐसे मामले हैं जहां यह सार्थक नहीं है। – kgrittn
धन्यवाद! मैंने वास्तव में देखा कि हटाए जाने में लंबा समय लगता है, लेकिन यह नहीं पता था कि –
क्या कारण होगा, जब विदेशी कुंजी पर इंडेक्स सार्थक नहीं होंगे? –