Görünüyor: Burada
usta ekstra satırı silmek tetik sonra birlikte bir örnektir WHERE ifadesi olmayan tek bir RULE.
ref2
ref3
başka bir seçenek 'uygulamalar' bölümlenmiş tablo, o zaman başarılı bir satır güncelleştirme belirtmek için YENİ satır dışarı dönmek bir görünüm oluşturmak olabilir
ref1
olmadan yanlışlıkla ana masaya fazladan istenmeyen satır ekleyerek.
create view tablename_view as select * from tablename; -- create trivial wrapping view
CREATE OR REPLACE FUNCTION partitioned_insert_trigger() -- partitioned insert trigger
RETURNS TRIGGER AS $$
BEGIN
IF (NEW.partition_key>= 5500000000 AND
NEW.partition_key < 6000000000) THEN
INSERT INTO tablename_55_59 VALUES (NEW.*);
ELSIF (NEW.partition_key >= 5000000000 AND
NEW.partition_key < 5500000000) THEN
INSERT INTO tablename_50_54 VALUES (NEW.*);
ELSIF (NEW.partition_key >= 500000000 AND
NEW.partition_key < 1000000000) THEN
INSERT INTO tablename_5_9 VALUES (NEW.*);
ELSIF (NEW.partition_key >= 0 AND
NEW.partition_key < 500000000) THEN
INSERT INTO tablename_0_4 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'partition key is out of range. Fix the trigger function';
END IF;
RETURN NEW; -- RETURN NEW in this case, typically you'd return NULL from this trigger, but for views we return NEW
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER insert_view_trigger
INSTEAD OF INSERT ON tablename_view
FOR EACH ROW EXECUTE PROCEDURE partitioned_insert_trigger(); -- create "INSTEAD OF" trigger
ref: http://www.postgresql.org/docs/9.2/static/trigger-definition.html
tek seçenek aynı zamanda, silme ve güncelleme için tetikler "yerine" önemsiz tanımlamaktır görünümü sarıcı rotayı giderse, o zaman sadece ismini kullanabilirsiniz tüm işlemlerde tabloyu normal tablonuzun yerine görüntüleyin.
Görünümü kullanan başka bir seçenek, ana tablodaki tüm eklerin [tetikleyicisini kullanan] görünüme geçmesini sağlamak için bir ekleme kuralı oluşturmaktır; ex (yukarıdaki partitioned_insert_trigger
ve tablename_view ve insert_view_trigger öğelerinin yukarıda listelendiği gibi oluşturulduğunu varsayarak)
create RULE use_right_inserter_tablename AS
ON INSERT TO tablename
DO INSTEAD insert into tablename_view VALUES (NEW.*);
Daha sonra yeni çalışma görünümü sarmalayıcı ekinizi kullanacaktır. hazırda yoluyla doküman eklerken aramanın çok o
aşağıda gösterildiği gibi güncellenen satırlar bunun yerine sorunu çözmek hangi tetik prosedüründe yeniye boş değişimin onu bir iade edilmesi gerektiğini bekliyor bulundu sonra
Hazırda bekletme 3.5 için başka çözümler var mı? –