Nasıl Ekle "ardarda sil&; kısıtlamaları"?
PostgreSQL 8.4.9 "" aşağıdaki tabloda hem yabancı anahtarlar w/tablo bırakarak Ç? silmek cascades eklemek mümkün
# \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)
Hem başvurulan tablolar aşağıda belirtilmiştir:
# \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)
Ve ayrıca makul bir eski Tablo 2 dizin altılı eklemek için yapar mı acaba?
GÜNCELLEME:Teşekkür ederim, ve ayrıca 1 bildiriminde idare edebileceğimi ve bir işlem gerekir böylece hiçbir e-posta listesi de tavsiyesi var:
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;
CEVAP
Sadece varolan yabancı anahtar kısıtlaması on delete cascade
ekleyemezsiniz eminim. Kısıtlamasını atarsın, sonra da eklemek doğru sürümü. Standart SQL, bunu yapmak için en kolay yolu olduğuna inanıyorum
- bir hareketi başlatmak
- yabancı anahtar, bırak
- ** 9, ve son olarak bir yabancı anahtar ekleyin
- hareketi tamamlamak
Değiştirmek istediğiniz her yabancı anahtar için tekrarlayın.
Ama PostgreSQL sana tek bir SQL deyimi içinde birden çok kısıtlama maddeleri kullanım sağlayan bir standart olmayan bir uzantısı vardır. Örneğin
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;
Eğer adını bilmiyorum. yabancı anahtar kısıtlaması istiyorsan bırak da bak bu kadar pgAdminİİİ (sadece tablonun adı ve bak DDL veya genişletmek hiyerarşi görene kadar "Kısıtlamalar"), ya da query the information schema.
select *
from information_schema.key_column_usage
where position_in_unique_constraint is not null
Nasıl "yinelenen OLMADAN birden f...
HTML / input type="düğme"?Re...
Ekle " nasıl Bash, emin [E/H]"...
Nasıl Ekle "veya" switch ifa...
Hata: &; INSERT EXEC deyimi iç içe olm...