পোস্টগ্রিসে একটি "ট্রানজিশন টেবিল" কী?


12

পোস্টগ্রিস 10-এ নতুন কী রয়েছে তা বর্ণনা করা পৃষ্ঠায় " ট্রিগারদের জন্য ট্রানজিশন টেবিলগুলি" উল্লেখ করা হয়েছে।

ট্রিগারগুলির জন্য ট্রানজিশন টেবিল

এই বৈশিষ্ট্যটি AFTER STATEMENTকোয়েরিতে পুরানো এবং নতুন সারিগুলিকে যথাযথ হিসাবে উদ্ভাসিত করে কার্যকর এবং পারফরম্যান্স উভয়কে ট্রিগার করে তোলে । এই বৈশিষ্ট্যটির আগে, AFTER STATEMENTট্রিগারগুলির এগুলিতে সরাসরি অ্যাক্সেস ছিল না, এবং কাজের ক্ষেত্রগুলি বাইজেন্টাইন ছিল এবং খারাপ অভিনয় ছিল। AFTER STATEMENTপ্রতিটি সারি ট্র্যাগারগুলির জন্য প্রতিটি সারিতে ব্যয়বহুল প্রসঙ্গ সুইচগুলি করার প্রয়োজনীয়তা এড়িয়ে এখন অনেক ট্রিগার যুক্তি যুক্ত করা যেতে পারে ।

একটি রূপান্তর টেবিল কি?

উত্তর:


12

তুমি জানো আছে কিভাবে OLDএবং NEWজন্য রেকর্ড ভেরিয়েবল FOR EACH ROWট্রিগার?

রূপান্তর টেবিল FOR EACH STATEMENTসমতুল্য। তারা পুরানো এবং নতুন টিউপস সহ টেবিল, যাতে আপনার ট্রিগাররা কি পরিবর্তন হয়েছে তা দেখতে পান।


9

ক্রেগের বৈশিষ্ট্যটির ব্যাখ্যাটি আমি সত্যিই পছন্দ করি। এসকিউএল-২০১১ স্পেস তাদের ট্রিগার প্রসঙ্গে এটিকে সংজ্ঞায়িত করে যে "সারিগুলির একটি মুছা মুছে ফেলা, sertedোকানো বা প্রতিস্থাপনের একটি সংক্রমণ টেবিল হিসাবে পরিচিত।" ডক্সে অনুরূপ ব্যাখ্যা সরবরাহ করা হয়েছে,

AFTERট্রিগারগুলির জন্য রূপান্তরের টেবিলগুলি REFERENCINGস্ট্যান্ডার্ড উপায়ে ক্লজটি ব্যবহার করে নির্দিষ্ট করা থাকলেও FOR EACH ROWট্রিগারগুলিতে ব্যবহৃত সারি ভেরিয়েবলগুলি ক্লজটিতে নির্দিষ্ট করা যায় না REFERENCING। এগুলি এমন উপায়ে পাওয়া যায় যা ভাষার উপর নির্ভরশীল যেখানে ট্রিগার ফাংশন লেখা হয়। কিছু কিছু ভাষা কার্যকরভাবে আচরণ করে যেমন একটি REFERENCINGধারা রয়েছে thereOLD ROW AS OLD NEW ROW AS NEW.

মূলত তারা পুরো বিবৃতিটির পরিবর্তনগুলি আপনার কাছে উপলভ্য করে যা অতি কার্যকর। রেফারেন্সের জন্য, ট্রিগার তৈরির ডিডিএল রূপান্তর টেবিলগুলির সাথে দেখতে এ রকম দেখাচ্ছে

REFERENCING OLD TABLE AS oldtable NEW TABLE AS newtable

আপনি এখানে একটি উদাহরণ দেখতে পারেন , এবং এখানে পরীক্ষা স্যুট থেকে একটি ,

CREATE TABLE transition_table_base (id int PRIMARY KEY, val text);

CREATE FUNCTION transition_table_base_ins_func()
  RETURNS trigger
  LANGUAGE plpgsql
AS $$
DECLARE
  t text;
  l text;
BEGIN
  t = '';
  FOR l IN EXECUTE
           $q$
             EXPLAIN (TIMING off, COSTS off, VERBOSE on)
             SELECT * FROM newtable
           $q$ LOOP
    t = t || l || E'\n';
  END LOOP;

  RAISE INFO '%', t;
  RETURN new;
END;
$$;

CREATE TRIGGER transition_table_base_ins_trig
  AFTER INSERT ON transition_table_base
  REFERENCING OLD TABLE AS oldtable NEW TABLE AS newtable
  FOR EACH STATEMENT
  EXECUTE PROCEDURE transition_table_base_ins_func();

কিছু অতিরিক্ত নোট

  1. এগুলি কেবল AFTERট্রিগারগুলিতে উপলব্ধ ।
  2. তারা মত জিনিস বিবেচনা ON CONFLICT

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

লেখক প্রতিক্রিয়া জানিয়েছিলেন - মনে হচ্ছে আবার ভাল হচ্ছে ,.

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