পোস্টগ্রিস: "এরিআরআর: ক্যাশেড প্ল্যানের ফলাফলের ধরণের পরিবর্তন করা উচিত নয়"


114

এই ব্যতিক্রম পোস্টগ্র্রেএসকিউএল 8.3.7 সার্ভারটি আমার অ্যাপ্লিকেশনটিতে ফেলেছে। কেউ কি জানেন যে এই ত্রুটিটির অর্থ কী এবং আমি এটি সম্পর্কে কী করতে পারি?

ERROR:  cached plan must not change result type
STATEMENT:  select code,is_deprecated from country where code=$1

আপনি কি দয়া করে পোস্টরেএসকিউএল এর সঠিক সংস্করণটি ভাগ করতে পারেন? 8.3.X?

উত্তর:


189

এই ত্রুটিটি কী কারণে ঘটছে তা আমি আবিষ্কার করেছি।

আমার অ্যাপ্লিকেশন একটি ডাটাবেস সংযোগ খুলেছে এবং কার্যকর করার জন্য একটি নির্বাচনী বিবৃতি প্রস্তুত করে।

এদিকে, অন্য একটি স্ক্রিপ্ট উপরের SELECT বিবৃতিতে ফিরিয়ে দেওয়া কলামগুলির মধ্যে একটির ডেটা টাইপ পরিবর্তন করে ডাটাবেস টেবিলটি পরিবর্তন করছে।

ডাটাবেস টেবিলটি সংশোধন করার পরে আমি অ্যাপ্লিকেশনটি পুনরায় চালু করে সমাধান করেছি। এটি প্রস্তুত বিবৃতিটিকে ত্রুটি ছাড়াই কার্যকর করতে মঞ্জুরি দিয়ে ডাটাবেস সংযোগটি পুনরায় সেট করে।


4
আমি পোস্টগ্ররেএসকিউএল 9.0.4 এ পেয়েছি, রুবেলে রেলগুলিতে 3.1-প্রি 5 রয়েছে। দেখে মনে হচ্ছে এটি অ্যাক্টিভেকর্ড দ্বারা স্বয়ংক্রিয়ভাবে পরিচালনা করা উচিত, না?
ডকচ্যাট

3
হ্যাঁ, আমি আশা করি অ্যাক্টিভেকর্ড শেষ পর্যন্ত এটির যত্ন নেবে। আমি বিশ্বাস করি যে আপনি পুনরায় আরম্ভ করতে না চাইলে মাইমোডেল.রেসেট_ক্লোম_মিনফর্মেশনকে কল করা স্বল্প মেয়াদে জিনিসগুলি ঠিক করবে।
গ্রান্ট হাচিনস

1
আমি কী ভুল হয়েছে তা ভেবে এক ঘন্টা নষ্ট করেছি। আপনার উত্তর আমাকে বাঁচায়!
শ্রী হর্ষ কাপালা

3
আপনি কি জানেন যে কোনও সমাধানের জন্য সমস্ত অ্যাপ্লিকেশন বা পোস্টগ্রিজ সার্ভার পুনরায় চালু করার প্রয়োজন নেই? ত্রুটি দেখা দেওয়ার পরে ম্যানুয়ালি সাফ ক্যাশেড পরিকল্পনার কোনও সমাধান রয়েছে?
জেসেক জিজেল

1
বসন্ত + জেপিএ অ্যাপ্লিকেশনের জন্য ইউএনআইটি পরীক্ষা চালানোর সময় পোস্টগ্রিস 10 এও আমার একই সমস্যা হয়েছিল। ব্যতিক্রম বার্তা: org.postgresql.util.PSQLException: ERROR: cached plan must not change result type। এবং সমস্ত পরীক্ষাগুলি কবজির মতো কাজ করে তবে কেবল Repository.findById()। আমি আমার পরীক্ষাগুলিতে স্কিমা পরিবর্তন করি না, তবে আমি @FlywayTestপ্রতিটি পরীক্ষার জন্য একটি পরীক্ষা আরম্ভের ডাটাবেস প্রস্তুত করতে ব্যবহার করছি । যদি আমি @FlywayTestটীকা মুছে ফেলি তবে এটি ভালভাবে কাজ করে।
বিনাকোট

25

আমি ERROR: cached plan must not change result typeযখন জাভা / জেডিবিসি অ্যাপ্লিকেশন প্রসঙ্গে সমস্যাটি সমাধান করার চেষ্টা করছি তখন গুগল করে যে কেউ এখানে অবতরণ করছে তাদের জন্য আমি এই উত্তরটি যুক্ত করছি ।

স্কিমা আপগ্রেডগুলি (অর্থাত্ ডিডিএল বিবৃতি) চালিয়ে আমি ডিবি ব্যবহার করে এমন আমার ব্যাক-এন্ড অ্যাপ্লিকেশন চলমান অবস্থায় আমি ত্রুটিটি বিশ্বস্তভাবে পুনরুত্পাদন করতে সক্ষম হয়েছি। অ্যাপ্লিকেশনটি যদি কোনও টেবিলটি অনুসন্ধান করে যা স্কিমা আপগ্রেড দ্বারা পরিবর্তিত হয়েছিল (যেমন অ্যাপ্লিকেশন পরিবর্তিত টেবিলের উপরে আপগ্রেডের আগে এবং পরে অনুসন্ধান করেছিল) - পোস্টগ্রিস ড্রাইভারটি এই ত্রুটিটি ফিরিয়ে দেবে কারণ স্পষ্টতই এটি কিছু স্কিমার বিবরণ ক্যাশে করে।

আপনি নিজের pgjdbcড্রাইভারটি কনফিগার করে সমস্যাটি এড়াতে পারেন autosave=conservative। এই বিকল্পের সাহায্যে ড্রাইভারটি যা যা বিবরণ দিচ্ছে তা ফ্লাশ করতে সক্ষম হবে এবং আপনাকে আপনার সার্ভারটি বাউন্স করতে হবে না বা আপনার সংযোগের পুলটি বা আপনি যে কাজটি করতে এসেছেন তা ফ্লাশ করতে হবে না।

পোস্টগ্রিস 9.6 (এডাব্লুএস আরডিএস) এ পুনরুত্পাদন করা হয়েছে এবং আমার প্রাথমিক পরীক্ষার মাধ্যমে এই বিকল্পটি দিয়ে সমস্যার সম্পূর্ণ সমাধান করা হয়েছে বলে মনে হচ্ছে।

ডকুমেন্টেশন: https://jdbc.postgresql.org/docamentation/head/connect.html# সংযোগ- পরিমিতি

pgjdbc সমস্যাটির আরও বিশদ এবং ইতিহাসের জন্য আপনি গিথুব সংখ্যা 451 দেখতে পারেন look


জেআরবি অ্যাক্টিভেকর্ডস ব্যবহারকারীরা এটি দেখতে পান: https://github.com/jruby/activerecord-jdbc-adapter/blob/master/lib/arjdbc/postgresql/connication_methods.rb#L60


কর্মক্ষমতা উপর নোট:

উপরের লিঙ্কে উল্লিখিত পারফরম্যান্স ইস্যু অনুসারে - অন্ধভাবে এটি স্যুইচ করার আগে আপনার অ্যাপ্লিকেশনটির কিছু পারফরম্যান্স / লোড / ভেজানো পরীক্ষা করা উচিত।

আমার নিজের অ্যাপ্লিকেশনটিতে একটি এডাব্লুএস আরডিএস ইভেন্টে চলমান পারফরম্যান্স টেস্টিং Postgres 10করার পরে, conservativeসেটিংস সক্ষম করার ফলে ডাটাবেস সার্ভারে অতিরিক্ত সিপিইউ ব্যবহার হয় না in যদিও এটি খুব বেশি ছিল না, আমি কেবলমাত্র autosaveআমার লোড টেস্টটি ব্যবহার করে প্রতিটি ক্যোয়ারী টিউন করার পরে এবং ভারী পরীক্ষাকে শক্তভাবে চাপ দেওয়া শুরু করার পরে সিপিইউর একটি পরিমাপযোগ্য পরিমাণ ব্যবহার করার মতো কার্যকারিতাটি কেবলমাত্র দেখতে পেতাম ।


7
কেন এটি ডিফল্ট নয়?
সিডিএমকেই

1
বিজ্ঞাপন হিসাবে কাজ করে। আমার সাধারণ পরীক্ষাগুলি কোনও কার্যকারিতা প্রভাব দেখায় না।
সামুলি পাহাওজা

1
এটি রুবি পোস্টগ্রিস ড্রাইভারের সাথে কীভাবে কনফিগার করবেন?
হৃষি 27'19

@ হৃষি আপনার মন্তব্য আমাকে বুঝতে পেরেছিল যে আসল প্রশ্নটি আসলে জাভা নির্দিষ্ট করে নি (কারণ জাভা প্রসঙ্গে সমস্যাটি মোকাবেলা করার সময় আমি এটি খুঁজে পেয়েছিলাম)। আমি বলতে চাই আপনি একটি সম্পূর্ণ নতুন প্রশ্ন স্পষ্টভাবে একটি রুবি প্রসঙ্গে সমাধানের সন্ধান করতে পোস্ট করতে চান।
কর্তিত

@ সিডিএমকেয়ে কারণ এটি 9.4-ইশ টাইমফ্রেম সংস্করণটি ড্রাইভারের মধ্যে নতুন কার্যকারিতা প্রবর্তিত হয়েছিল। আমি একজনের জন্য খুব অসন্তুষ্ট হব যদি pgjdbc এর কোনও নতুন সংস্করণ আমার অ্যাপ্লিকেশনটি ভেঙে দেয় কারণ এটি ডিফল্ট-সক্ষম করেছে নতুন, অ-প্রমাণিত, কর্মক্ষমতা হ্রাসকারী কার্যকারিতা। (এটি বলেছিল, এটি এখন আমার "নতুন অ্যাপ্লিকেশন তৈরি করার সময় সর্বদা এটি করুন" চেকলিস্টে একটি নতুন এন্ট্রি)।
কর্তিত

0

আমাদের জন্য, আমরা একই রকম সমস্যার মুখোমুখি হয়েছি। আমাদের অ্যাপ্লিকেশন একাধিক স্কিমা নিয়ে কাজ করে। যখনই আমরা স্কিমা পরিবর্তন করছিলাম তখনই এই সমস্যাটি শুরু হয়ে গেল।

জেডিবিসি প্যারামিটারের ভিতরে রেডিট্রেসহোল্ড = 0 প্যারামিটার সেট আপ করা ডাটাবেস স্তরে স্টেটমেন্ট ক্যাচিং অক্ষম করে। এটি আমাদের জন্য এটি সমাধান করেছে।

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