কোনও "সমাপ্তি" সময় সেট করার কোনও উপায় আছে, যার পরে পোস্টগ্রেএসকিউএলে কোনও ডেটা এন্ট্রি স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়?


115

PostgreSQL এ ডেটা এন্ট্রিগুলিতে কোনও ধরণের "মেয়াদোত্তীকরণ" সময় সেট করার কোনও উপায় আছে কি ? আমি EXPIREরেডিসের সমতুল্য কিছু সম্পর্কে ভাবছি ।

আমি কোনও টাইমস্ট্যাম্প সংরক্ষণ করার জন্য খুঁজছি না এবং তারপরে কোন এন্ট্রিগুলির মেয়াদ শেষ হয়ে গেছে তা পরীক্ষা করার জন্য ম্যানুয়ালি ক্রোন জবের কোনও ধরণের কোড কোড করব ।

পোস্টগ্র্রেএসকিউএলে কোনও জাতীয় বৈশিষ্ট্য রয়েছে যা এই ধরণের কার্যকারিতা সরবরাহ করবে বা ভবিষ্যতের প্রকাশের জন্য এই জাতীয় বৈশিষ্ট্যটির জন্য অনুরোধ করা যদি বোধগম্য হয় তা আমি অনুসন্ধান করার চেষ্টা করছি।


4
সেখানে PostgreSQL মেইলিং লিস্টে আলোচনা ছিল postgresql.org/message-id/...
vonPetrushev

উত্তর:


110

মেয়াদোত্তীকরণ বৈশিষ্ট্যে কোনও অন্তর্নির্মিত নেই তবে যদি আপনার লক্ষ্যটি স্বয়ংক্রিয়ভাবে ক্ষেত্রগুলির মেয়াদ শেষ হয় এবং আপনার ডাটাবেসের মধ্যে যুক্তি থাকে (এবং এইভাবে কোনও ক্রোন কাজের মতো কোনও বাইরের নির্ভরতা না থাকে) তবে আপনি সর্বদা ট্রিগার লিখতে পারেন। নীচে এমন ট্রিগারটির উদাহরণ দেওয়া আছে যা 1 মিনিটেরও বেশি পুরানো টাইমস্ট্যাম্প রয়েছে এমন একটি টেবিল থেকে সারিগুলি সরিয়ে দেয়। এটি একই টেবিলে যখনই একটি নতুন সারি isোকানো হয় তখন তা কার্যকর করা হয়। আপনি অবশ্যই অন্যান্য শর্তে এবং বিভিন্ন মেয়াদ শেষ হওয়ার তারিখগুলির প্রয়োজন অনুসারে কার্যকর করতে ট্রিগার সেট করতে পারেন। আমি নীচের ওয়েবসাইটটিকে এর ভিত্তি হিসাবে ব্যবহার করেছি: http://www.the-art-of-web.com/sql/trigger-delete-old/

CREATE TABLE expire_table (
    timestamp timestamp NOT NULL DEFAULT NOW(),
    name TEXT NOT NULL
);

INSERT INTO expire_table (name) VALUES ('a');
INSERT INTO expire_table (name) VALUES ('b');
INSERT INTO expire_table (name) VALUES ('c');

select * from expire_table;
         timestamp          | name 
----------------------------+------
 2014-09-26 15:33:43.243356 | a
 2014-09-26 15:33:45.222202 | b
 2014-09-26 15:33:47.347131 | c
(3 rows)

CREATE FUNCTION expire_table_delete_old_rows() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
BEGIN
  DELETE FROM expire_table WHERE timestamp < NOW() - INTERVAL '1 minute';
  RETURN NEW;
END;
$$;

CREATE TRIGGER expire_table_delete_old_rows_trigger
    AFTER INSERT ON expire_table
    EXECUTE PROCEDURE expire_table_delete_old_rows();

INSERT INTO expire_table (name) VALUES ('d');

select * from expire_table;
         timestamp          | name 
----------------------------+------
 2014-09-26 15:36:56.132596 | d
(1 row)

4
@ Caeus সম্ভবত ক্যাচিং এবং সূচকের উপর নির্ভর করে
নিমরোড

49
-1। ইমো, ট্রিগারগুলি যেভাবে আপনার হারিয়ে যাওয়া ডাটাবেস বৈশিষ্ট্যগুলির সাথে ডিল করা উচিত নয়, কারণ ট্রিগারগুলি পরীক্ষা করা শক্ত, বজায় রাখা কঠিন এবং পাছায় কেবল একটি ব্যথা। সৎ হন এবং এটি আপনার প্রয়োগে প্রয়োগ করুন। :)
বাস্তিয়ান ভয়েট

4
সম্মত হন, আমি মনে করি যে পুরানো রেকর্ডগুলি পরীক্ষা করে দেখুন এবং প্রতিটি সন্নিবেশে এটি মুছে ফেলা পারফরম্যান্সের দিক থেকে সত্যই ভয়ানক সমাধান। উদাহরণস্বরূপ, সিআরএন জব স্ক্রিপ্টের মতো এমন কিছু সেটআপ করাও কঠিন নয় যা এসকিউএল প্রয়োজন হয়।
জারকোন

মেয়াদোত্তীর্ণ সময়ে কোনও সূচি থাকলে পারফরম্যান্স মোটামুটি ভাল হওয়া উচিত।
জেসেন

4
ব্রেটের সমাধানটি +1 করুন। সেশন টেবিলের মতো এমন কোনও কিছুর জন্য যেখানে আপনি কেবল কোনও ব্যবহারকারীকেই একটি একক অধিবেশন রাখতে চান, আমি মনে করি যে কোনও ব্যবহারকারীর কেবল একটি সেশন রয়েছে তা নিশ্চিত করার জন্য সেশন টেবিলের যে কোনও INSERT- এ ট্রিগার, একটি সঠিক বৈধ ব্যবহারের ক্ষেত্রে । লোকেরা যদি কিছু "পরীক্ষণযোগ্য" হয় তা নিয়ে তারা উদ্রেক করে তাই তারা আরও সাধারণ সমাধানগুলি লেখেন (যার পরে ভারী পরীক্ষার প্রয়োজন হয় ) বরং এমন কিছু সাধারণ ক্রিয়া যা তারা আত্মবিশ্বাসী হতে পারে তা ভেঙে না।
করিসিম্মন্স

7

না। এর মতো কোনও বৈশিষ্ট্য নেই।

এটি (১) কেবলমাত্র একটি "মেয়াদোত্তীর্ণ" টাইমস্ট্যাম্প বা (2) টাইমস্ট্যাম্প + ক্রোন-জব / পিজিয়েন্টের চেয়ে বেশি কিছু করে তা আমি দেখতে পাচ্ছি না।

এটি কোনও সাধারণ বৈশিষ্ট্যের মতো শোনাচ্ছে না যা মূলটিতে যুক্ত হবে। আপনি ক্রোন-জব বা সম্ভবত কোনও ব্যাকগ্রাউন্ড-কর্মী প্রক্রিয়া থেকে কল করা টিক দিয়ে এই ধরণের জিনিস পরিচালনা করতে খুব সহজেই একটি এক্সটেনশনের কোড করতে পারেন ।

আমি পিজিএক্সএন- তে কিছু দেখতে পাচ্ছি না , সম্ভবত সম্ভবত এটির জন্য এখনও তেমন চাহিদা হয়নি।


4
আমি জানি এই উত্তরটি পুরানো তবে আইএমও এটি একটি অবিশ্বাস্যরূপে কার্যকর বৈশিষ্ট্য, যেমন: ডকস.মোংডব.ম্যানুয়াল
ইন্ডেক্স-

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