DOMAINS সম্পর্কে আলোচনা আকর্ষণীয় তবে সেই প্রশ্নের একমাত্র সম্ভাব্য উত্সের সাথে প্রাসঙ্গিক নয়। স্বাক্ষরবিহীন ints জন্য আকাঙ্ক্ষা একই সংখ্যা বিট সঙ্গে ints এর পরিসীমা দ্বিগুণ করা, এটি একটি দক্ষতার যুক্তি, নেতিবাচক সংখ্যা বাদ দেওয়ার ইচ্ছা নয়, প্রত্যেকে কীভাবে চেক সীমাবদ্ধতা যুক্ত করতে জানে knows
এটি সম্পর্কে কারও কাছে জিজ্ঞাসা করা হলে টম লেন বলেছিলেন:
মূলত, এটির শূন্যতার সম্ভাবনা রয়েছে যদি না আপনি তাদের সংখ্যার প্রচারের স্তরক্রমের মধ্যে ফিট করার কোনও উপায় খুঁজে না পান যা প্রচুর বিদ্যমান অ্যাপ্লিকেশনগুলিকে ভঙ্গ করে না। আমরা এটিকে একাধিকবার দেখেছি, যদি মেমরিটি পরিবেশন করে, এবং এমন একটি কার্যক্ষম নকশা নিয়ে আসতে ব্যর্থ হয়েছে যা পোলা লঙ্ঘন বলে মনে হয় না।
"পোলা" কি? গুগল আমাকে 10 টি ফলাফল দিয়েছে যা অর্থহীন । নিশ্চিত নয় যে এটি রাজনৈতিকভাবে ভুল ধারণা এবং তাই সেন্সর করা হয়েছে। কেন এই অনুসন্ধান শব্দটি কোনও ফল দেয় না? যাই হোক.
আপনি খুব বেশি ঝামেলা ছাড়াই এক্সটেনশন প্রকার হিসাবে স্বাক্ষরযুক্ত ইনটগুলি প্রয়োগ করতে পারেন। আপনি যদি এটি সি-ফাংশন দিয়ে করেন তবে কোনও পারফরম্যান্স জরিমানা হবে না। আক্ষরিক ব্যবহারের জন্য আপনাকে পার্সার বাড়ানোর প্রয়োজন হবে না কারণ পিজিএসকিউএল এর স্ট্রিটগুলিকে আক্ষরিক হিসাবে ব্যাখ্যা করার মতো সহজ উপায় আছে, কেবল '4294966272' :: uint4 আপনার আক্ষরিক হিসাবে লিখুন। বর্ণগুলিও একটি বিশাল চুক্তি হওয়া উচিত নয়। আপনার এমনকি পরিসীমা ব্যতিক্রম করার দরকার নেই, আপনি কেবল '4294966273' :: uint4 :: int -1024 হিসাবে শব্দার্থক আচরণ করতে পারেন। অথবা আপনি একটি ত্রুটি নিক্ষেপ করতে পারেন।
আমি যদি এটি চাই, আমি এটা করতে হবে। তবে যেহেতু আমি এসকিউএল এর অন্য দিকে জাভা ব্যবহার করছি, আমার কাছে এটি খুব কম মূল্যহীন, যেহেতু জাভাতে সেই স্বাক্ষরযুক্ত স্বাক্ষরগুলি নেই gers সুতরাং আমি কিছুই লাভ। আমি যদি একটি বিগিন্ট কলাম থেকে একটি বিগইন্টেজার পাই তবে আমি এটির মধ্যে আগেই বিরক্ত হয়েছি যখন এটি দীর্ঘস্থায়ী হয়।
আরেকটি জিনিস, যদি আমার 32 বিট বা 64 বিট প্রকারের সংরক্ষণের প্রয়োজন হয় তবে আমি যথাক্রমে পোস্টগ্র্যাস এসকিউএল ইনট 4 বা ইনট 8 ব্যবহার করতে পারি, কেবল মনে আছে যে প্রাকৃতিক আদেশ বা পাটিগণিত নির্ভরযোগ্যভাবে কাজ করবে না। কিন্তু সংরক্ষণ এবং পুনরুদ্ধার এটি দ্বারা প্রভাবিত হয় না।
এখানে আমি কীভাবে একটি সাধারণ স্বাক্ষরবিহীন ইন্ট 8 প্রয়োগ করতে পারি:
প্রথম আমি ব্যবহার করব
CREATE TYPE name (
INPUT = uint8_in,
OUTPUT = uint8_out
[, RECEIVE = uint8_receive ]
[, SEND = uint8_send ]
[, ANALYZE = uint8_analyze ]
, INTERNALLENGTH = 8
, PASSEDBYVALUE ]
, ALIGNMENT = 8
, STORAGE = plain
, CATEGORY = N
, PREFERRED = false
, DEFAULT = null
)
সর্বনিম্ন 2 ফাংশন uint8_in
এবং uint8_out
আমি অবশ্যই প্রথমে সংজ্ঞায়িত করব।
CREATE FUNCTION uint8_in(cstring)
RETURNS uint8
AS 'uint8_funcs'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION uint64_out(complex)
RETURNS cstring
AS 'uint8_funcs'
LANGUAGE C IMMUTABLE STRICT;
এটি সি uint8_funcs.c এ প্রয়োগ করতে হবে। তাই আমি এখান থেকে জটিল উদাহরণটি ব্যবহার করে এটিকে সহজ করে তুলি:
PG_FUNCTION_INFO_V1(complex_in);
Datum complex_in(PG_FUNCTION_ARGS) {
char *str = PG_GETARG_CSTRING(0);
uint64_t result;
if(sscanf(str, "%llx" , &result) != 1)
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
errmsg("invalid input syntax for uint8: \"%s\"", str)));
return (Datum)SET_8_BYTES(result);
}
আহ ভাল, বা আপনি এটি ইতিমধ্যে এটি সম্পন্ন দেখতে পারেন ।