PostgreSQL এ কীভাবে একটি বাইট পূর্ণসংখ্যা সংরক্ষণ করবেন?


14

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

  1. পোস্টগ্র্রেএসকিউএল-তে কোনও বাইট ইন্টিজার ডেটা টাইপ ব্যবহার করার কোনও এক্সটেনশন বা উপায় আছে?
  2. NUMERIC (1,0) কত বাইট?

উত্তর:


16

না , পোস্টগ্রাসের মান বিতরণে কোনও 1-বাইট পূর্ণসংখ্যা নেই। সমস্ত অন্তর্নির্মিত সংখ্যার ধরণের স্ট্যান্ডার্ড পোস্টগ্রিজ 2 বা ততোধিক বাইট দখল করে।

এক্সটেনশন পেগুইন্ট

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

বিভিন্ন স্বাক্ষরযুক্ত পূর্ণসংখ্যার প্রকারের পাশাপাশি এটি আপনাকে সন্ধান করা 1-বাইট পূর্ণসংখ্যাও সরবরাহ করে:

int1 (signed 8-bit integer)
uint1 (unsigned 8-bit integer)
uint2 (unsigned 16-bit integer)
uint4 (unsigned 32-bit integer)
uint8 (unsigned 64-bit integer)

সম্ভাব্য জটিলতাগুলি ব্যাখ্যা করে, লিঙ্কযুক্ত সাইটে "আলোচনা" অধ্যায়টি পড়তে ভুলবেন না। আরও পূর্ণসংখ্যার ধরণের প্রবর্তন করার সময় আপনার টাইপ কাস্ট এবং সংখ্যাসূচক অক্ষরের সাথে যত্ন নেওয়া দরকার ...

কার্যসংক্রান্ত

একটি সম্ভাব্য, সহজ কাজটি হ'ল 1-বাইট পূর্ণসংখ্যার মানগুলি এনকোড করা যেমন "char""অভ্যন্তরীণ" সরল 1-অক্ষর প্রকার, যা আসলে স্টোরেজের একক বাইট ব্যবহার করে , একটি স্বাক্ষরিত 1-বাইট পূর্ণসংখ্যার বাইট মান, উপরের অর্ধেক হিসাবে উপস্থাপিত হয় ASCII অক্ষর।

আপনি -128 থেকে 127 এর মধ্যে মানের এনকোড করতে পারেন । ডেমো:

SELECT i
     , i::"char"
     , i::"char"::int
FROM   generate_series(-128,127) i;

প্রদর্শনের জন্য নয় এমন বেশ কয়েকটি অক্ষর রয়েছে। সুতরাং আপনি প্রদর্শন করার আগে সংরক্ষণ এবং ডিকোড করার আগে এনকোড করুন ...

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

আমার প্রাথমিক পরামর্শগুলি অযত্নে এই ধারণার উপর ভিত্তি করে ছিল যে আমরা স্বাক্ষরবিহীন 1-বাইট পূর্ণসংখ্যা (0-255) এবং আমরা textপদবিন্যাস পাথর হিসাবে ব্যবহার করতে পারি cover ইভান আমার পথের ত্রুটিগুলি নির্দেশ করে: এটি কেবল 1 - 127 সংখ্যার জন্য কাজ করে এবং বাকি অংশে ব্যর্থ হয়। পরিবর্তে, পূর্ণসংখ্যা পরিসীমা -128 থেকে 127 ব্যবহার করুন এবং উভয় সমস্যা সমাধানের জন্য "char"এবং integerসরাসরি castালাই করুন ।

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