ট্রিগার: মুছে ফেলা সারিগুলি সংরক্ষণাগার সারণীতে সরিয়ে নিন


18

restrictionsআমার পোস্টগ্রিজ এসকিউএল ডাটাবেসে কল করা একটি ছোট (~ 10 সারি) সারণী রয়েছে , যেখানে মানগুলি মুছে ফেলা হয় এবং প্রতিদিনের ভিত্তিতে সন্নিবেশ করা হয়।

আমি একটি টেবিল কল করতে চাই restrictions_deleted, যেখানে মুছে ফেলা প্রতিটি সারিটি restrictionsস্বয়ংক্রিয়ভাবে সংরক্ষণ করা হবে। যেহেতু restrictionsএকটি সিরিয়াল আইডি রয়েছে, কোনও নকল থাকবে না।

পোস্টগ্র্রেএসকিউএলে আমি কীভাবে এই জাতীয় ট্রিগার লিখব?

উত্তর:


16

পুরানো ডেটা restrictions_deletedমুছে ফেলার আগে আপনাকে কেবল টেবিলের মধ্যে সরাতে হবে। এটি OLDডেটা টাইপ দিয়ে সম্পন্ন হয় । আপনি একটি নিয়মিত INSERTবিবৃতি ব্যবহার করতে পারেন এবং OLDসন্নিবেশ করা মান হিসাবে মানগুলি ব্যবহার করতে পারেন ।

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
আপনি কলাম মানসমূহের সুস্পষ্ট তালিকাটির মতোVALUES((OLD).*)
— কয়েস

1
সূক্ষ্ম কাজ করে, তবে create functionআগে কল করা দরকার create trigger। এবং VALUES((OLD).*)কয়েস প্রস্তাবিত কৌশলটি দুর্দান্ত।
— mivk

8

আপনি যদি অন্য কোনও পদ্ধতির জন্য উন্মুক্ত হন, আপনি কি টেবিলটিতে 'মুছে ফেলা' বুলিয়ান পতাকা বা তার পরিবর্তে একটি 'মুছে ফেলা_আট' টাইমস্ট্যাম্প যুক্ত করার কথা বিবেচনা করেছেন?

বা আরও ভাল, আপনার ডাটাবেস টেবিলগুলিতে সিআরইউডি অ্যাক্সেস অস্বীকার করুন এবং আপনার ট্রানজেকশনাল এপিআইতে অডিট ট্রেলটি হ্যান্ডেল করুন :)


+1 ধন্যবাদ - আমার ক্ষেত্রে কাজ করবে না, তবে এটি একটি দুর্দান্ত পদ্ধতি যা কেবলমাত্র একটি একক টেবিল ব্যবহার করে।
— অ্যাডাম মতান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.