SORU
27 NİSAN 2012, Cuma


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
27 NİSAN 2012, Cuma


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chilla Frilla™

    Chilla Frill

    7 Aralık 2006
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • paikimchung

    paikimchung

    12 Mayıs 2006