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


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.