পোস্টগ্রেএসকিউএল পদ্ধতিগত ভাষা - পিএল / পিজিএসকিউএল এবং এসকিউএল এর মধ্যে পার্থক্য


20

কেউ দয়া করে এর মধ্যে পার্থক্যগুলি সংক্ষিপ্ত বিবরণ দিতে পারেন:

http://www.postgresql.org/docs/9.1/static/xfunc-sql.html

এবং

http://www.postgresql.org/docs/9.1/static/plpgsql.html

?

আসল কথা:

  • ধারণামূলক পার্থক্য
  • একটি সমস্যা পরিবার দেওয়া, ব্যবহারের সুবিধার্থে
  • রাজনৈতিক বিষয়গুলো

1
প্রথমত, এসকিউএল (ওরফে ক্যোয়ারী ল্যাঙ্গুয়েজ) ফাংশন পোস্টগ্র্রেএসকিউএল প্রক্রিয়াগত কোনও ভাষা জড়িত না। দ্বিতীয়ত, আপনি ইতিমধ্যে সর্বোত্তম উত্সটি খুঁজে পেয়েছেন যেখানে কেউ আপনার প্রশ্নের উত্তর খুঁজে পেতে পারে (শেষটি ব্যতীত - 'রাজনৈতিক বিষয়গুলি দ্বারা আপনি কি সঠিকভাবে কাজ করবেন?)
ডিজেসো

আমি সমস্ত মূল ইস্যু সংক্ষিপ্ত করতে বললাম , প্রয়োজনীয়ভাবে আমি যে পেস্ট করেছি তা নথিভুক্ত নয়, তবে ব্যক্তিগত ছাপ ব্যবহার করে। এই লিঙ্কগুলি এখানে রয়েছে তা নিশ্চিত হওয়ার জন্য যে প্রশ্নটি কী তা প্রত্যেকে বুঝতে পারে।
গিসমো রানাস

এটিকে আক্রমণ হিসাবে গ্রহণ করবেন না, তবে একবার আপনি সেগুলি পড়লে আপনি নিজেরাই সংক্ষিপ্ত করতে পারেন :) অন্যথায়, আপনার প্রশ্নটি কিছুটা বিস্তৃত, তবে কিছুটা সময় দেওয়ার পরে আমি কয়েকটি চিন্তা সংগ্রহ করার চেষ্টা করব।
dezso

1
অন্যান্য পদ্ধতিগত ভাষাগুলি অবহেলা করবেন না। বিশেষত PL / PgSQL খুব সীমিত এমন অঞ্চলের জন্য PL / পার্ল অত্যন্ত কার্যকর; পিএথন পছন্দ করলেও পিএল / পাইথনু কাজটি করে তবে পিএল / পার্লের মতো সুরক্ষা মডেল অফার না করে। অ্যাড-অন হিসাবে পিএল / ভি 8 (জাভাস্ক্রিপ্ট) রয়েছে।
ক্রেগ রিঞ্জার

1
হাই কাতাল্ডো - আমি আপনাকে এখানে স্বাগতম জানাতে চাই কারণ এখানে এটিই আপনার প্রথম প্রশ্ন। পোস্ট করার জন্য ধন্যবাদ এবং আমি আশা করি আপনি কাছাকাছি থাকবেন।
জ্যাক ডগলাস

উত্তর:


27

পিএল / পিজিএসকিউএল এবং প্লেইন এসকিউএল ফাংশন দুটি বৃহত্তর সরঞ্জাম সেটের অংশ, এবং সেই প্রসঙ্গে দেখা উচিত। আমি আরোহী জটিলতা এবং ব্যয়ের সাথে মিলে যাওয়া বিদ্যুতের একটি আরোহণের স্কেল হিসাবে বিবেচনা করি, যেখানে আপনার কাজটি ভালভাবে সম্পাদন করতে পারে এমন সহজতম সরঞ্জামটি ব্যবহার করা উচিত:

  • যেখানে সম্ভব দেখুন দর্শন ব্যবহার করুন
  • যেখানে দৃশ্যটি উপযুক্ত নয়, সেখানে একটি এসকিউএল ফাংশন ব্যবহার করুন
  • যেখানে কোনও এসকিউএল ফাংশন উপযুক্ত নয়, সেখানে PL / PgSQL ব্যবহার করুন।
  • যেখানে পিএল / পিজিএসকিউএল খুব সীমাবদ্ধ বা যথেষ্ট পরিমাণে মত প্রকাশযোগ্য নয়, সেখানে পিএল / পার্ল, পিএল / পাইথন, পিএল / ভি 8, পিএল / জাভা বা আপনার পছন্দগুলি যা ব্যবহার করুন
  • ... এবং যেখানে কোনও পিএল কাজ করবে না, কোনও বাহ্যিক প্রোগ্রাম এবং সম্ভবত LISTENএবং NOTIFYএটির সাথে কথা বলার জন্য ব্যবহার করবে।

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

আপনি যখন দেখতে পান যে মুখ্য সময় আপনি কোনও ভিউ ব্যবহার করতে পারবেন না এবং কোনও এসকিউএল ফাংশনটি বিবেচনা করা উচিত তা কখন:

  • সাধারণ WHEREঅনুচ্ছেদের হিসাবে প্রকাশ করা যায় না এমন পরামিতিগুলি প্রয়োজন, যেমন একটি WITHঅভিব্যক্তির মধ্যে প্যারামিটারের মতো
  • আপনি কোনও SECURITY DEFINERক্রিয়াকলাপের মাধ্যমে সুরক্ষা বাধা চান , এবং security_barrierপোস্টগ্রিসকিউএল ৯.২ এবং এর চেয়ে উপরে দেখা আপনার প্রয়োজনের জন্য পর্যাপ্ত নয়;
  • আপনার এমন প্যারামিটারগুলি দরকার যা অপ্টিমাইজারের দ্বারা দৃশ্যের উপ-অনুচ্ছেদে নামানো হয় না এবং এটি আরও সরাসরি নিয়ন্ত্রণ করতে চান; অথবা
  • এখানে প্রচুর প্যারাম রয়েছে বা প্রচুর প্যারামগুলির পুনরাবৃত্তি রয়েছে, সুতরাং ক্যোয়ারীটিকে একটি ভিউ হিসাবে লিখতে পারা যায় না।

এই কাজের বেশিরভাগ ক্ষেত্রে একটি সরল এসকিউএল ফাংশন সূক্ষ্মভাবে কাজ করে এবং পিএল / পিজিএসকিউএল এর চেয়ে প্রায়শই পড়া সহজ হয়। এসকিউএল ফাংশন ঘোষিত STABLEবা IMMUTABLE(এবং এছাড়াও ঘোষিত STRICTবা SECURITY DEFINER) ও কলিং বিবৃতি মধ্যে inlined করা যেতে পারে। এটি ফাংশন কল ওভারহেড থেকে মুক্তি পায় এবং কলিং ফাংশনটিতে যখন কোনও শর্তটি অপ্টিমাইজারের দ্বারা এসকিউএল ফাংশনটিতে নামিয়ে আনে তখন কখনও কখনও বিশাল কর্মক্ষমতা বেনিফিটও পেতে পারে। এসকিউএল ফাংশনগুলি যখনই কাজের জন্য যথেষ্ট হয় তখন ব্যবহার করুন।

যখন আপনার প্রচুর যুক্তি প্রয়োজন তখন মূল সময় এসকিউএল ফাংশন কাজটি করে না। যদি / তারপরে / অন্য কোনও ক্রিয়াকলাপ যা আপনি CASEবিবৃতি হিসাবে প্রকাশ করতে পারবেন না , গণনা করা ফলাফলের প্রচুর পুনঃব্যবহার, খণ্ডগুলি থেকে মান তৈরি করা, ত্রুটি পরিচালনা করা ইত্যাদি PL পিএল / পিজিএসকিউএল তখন কাজে আসে। আপনি যখন এসকিউএল ফাংশনগুলি ব্যবহার করতে পারবেন না বা এগুলি যেমন একটি নিম্ন ফিট, তখন PL / PgSQL চয়ন করুন:

  • EXECUTEস্টেটমেন্টের মাধ্যমে ডায়নামিক এসকিউএল এবং গতিশীল ডিডিএল
  • আপনি যখন RAISEলগ বা ক্লায়েন্টের জন্য ত্রুটি / সতর্কতা করতে চান
  • যখন আপনার ব্যতিক্রম হ্যান্ডলিংয়ের দরকার হয় - EXCEPTIONপুরো লেনদেন ত্রুটিতে শেষ হওয়ার পরিবর্তে আপনি ব্লকগুলির সাথে ত্রুটিগুলি ফাঁদে ফেলতে এবং পরিচালনা করতে পারেন
  • জটিল শর্তসাপেক্ষ যুক্তি যা CASE ... WHENখুব ভাল মানায় না
  • গণনা করা মানগুলির প্রচুর পুনরায় ব্যবহার যা আপনি WITHসিটিইতে ফিট করতে পারবেন না
  • গতিশীল রেকর্ড বিল্ডিং
  • ফলাফল সেট উত্পাদন করার পরে আপনাকে একটি ক্রিয়া সম্পাদন করতে হবে

সাধারণ টেবিল এক্সপ্রেশন (সিটিই) এর সাথে, বিশেষত লিখনযোগ্য সিটিই এবং WITH RECURSIVEআমি দেখতে পাই যে আমি পিএল / পিজিএসকিউএল ব্যবহারের চেয়ে অনেক কম ব্যবহার করি কারণ এসকিউএল অনেক বেশি অভিব্যক্তিপূর্ণ এবং শক্তিশালী। আমি এখন অনেক বেশি ভিউ এবং প্লেইন এসকিউএল ফাংশন ব্যবহার করি। এটি স্মরণে রাখার মতো যে প্লেইন এসকিউএল ফাংশনগুলিতে একাধিক বক্তব্য থাকতে পারে; শেষ বিবৃতিটি ফাংশনের ফলাফল।


খুব ভাল বলেছেন! (লিখিতযোগ্য সিটিই উল্লেখ করার জন্য অতিরিক্ত ভার্চুয়াল +1)
7'12

এই উত্তরগুলি আরও ব্যাখ্যা করে যে কেন কিছু ফাংশনগুলির জন্য অপ্টিমাইজেশন বেড়া প্রয়োজন
ইওনিল

8

plpgsqlভেরিয়েবল, লুপিং কনস্ট্রাক্টস ইত্যাদিসহ SQLএকটি সম্পূর্ণ প্রসেসারাল ল্যাঙ্গুয়েজ ভাষা A ফাংশনটি কেবল একটি subquery। একটি এসকিউএল ফাংশন, যদি এটি ঘোষিত হয় STABLEবা IMMUTABLEঘোষিত STRICTনা হয় তবে প্রায়শই কলিং কোয়েরিতে linedোকানো যেতে পারে , যেন প্রতিটি রেফারেন্সে এটি লিখিত থাকে।

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