Tetikleyici: silinmiş satırları arşiv tablosuna taşıma


18

Ben restrictionsdeğerleri silinir ve günlük olarak eklenir PostgreSQL veritabanımda denilen küçük (~ 10 satır) tablo var .

restrictions_deletedSilinen her satırın restrictionsotomatik olarak depolanacağı bir tabloya sahip olmak istiyorum . Yana restrictionsbir seri kimliğine sahipse, hiçbir çiftleri olacaktır.

PostgreSQL'de böyle bir tetikleyiciyi nasıl yazarım?

Yanıtlar:


16

Eski verileri restrictions_deletedsilinmeden önce tabloya taşımanız yeterlidir . Bu OLDveri tipi ile yapılır . Bir regulat INSERTifadesi kullanabilir ve OLDdeğerleri, eklenecek değerler olarak kullanabilirsiniz .

CREATE TRIGGER moveDeleted
BEFORE DELETE ON restrictions 
FOR EACH ROW
EXECUTE PROCEDURE moveDeleted();


CREATE FUNCTION moveDeleted() RETURNS trigger AS $$
    BEGIN
       INSERT INTO restrictions_deleted VALUES(OLD.column1, OLD.column2,...);
       RETURN OLD;
    END;
$$ LANGUAGE plpgsql;

2
Sütun değerlerinin açık listesiniVALUES((OLD).*)
KayEss

1
İyi çalışıyor, ancak create functiondaha önce çağrılması gerekiyor create trigger. Ve VALUES((OLD).*)Kayess önerdiği hile güzel.
mivk

8

Farklı bir yaklaşıma açıksanız, tabloya 'silinmiş' Boole bayrağı veya bunun yerine 'deleted_at' zaman damgası eklemeyi düşündünüz mü?

Ya da daha iyisi, veritabanı tablolarınıza CRUD erişimini engelleyin ve işlem API'nizdeki denetim izini kullanın :)


+1 Teşekkürler - benim durumum için işe yaramaz, ama sadece tek bir tablo kullanan hoş bir yaklaşım.
Adam Matan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.