পোস্টগ্রিসে ইউআইডি কলামের জন্য ডিফল্ট মান


67

ইন Postgres 9.x টাইপ একটি কলামের জন্য UUIDকেমন করে আমার UUID কোনো সারি জন্য একটি ডিফল্ট মান সন্নিবেশ যেমন স্বয়ংক্রিয়ভাবে উত্পন্ন নির্দিষ্ট করব?

উত্তর:


92

TL; ড

ওএসএসপি ইউইড ফাংশনগুলির DEFAULTমধ্যে একটিতে কলামটি নির্ধারণ করার সময় কল করুন । পোস্টগ্র্রেস সার্ভারটি প্রতিবার একটি সারি isোকানোর পরে স্বয়ংক্রিয়ভাবে ফাংশনটি শুরু করবে।

CREATE TABLE tbl 
(
  pkey UUID NOT NULL DEFAULT uuid_generate_v1() , 
  CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)

ইউইউডি তৈরির জন্য প্লাগইন প্রয়োজন

যদিও Postgres আউট-অফ-বক্স সমর্থন সংরক্ষণকারী UUID (সর্বজন অনন্য সনাক্তকারী) তাদের নেটিভ মান 128-বিট ফর্ম, উৎপাদিত UUID মান একটি প্লাগ ইন প্রয়োজন। পোস্টগ্রিসে, একটি প্লাগ-ইন একটি হিসাবে পরিচিত extension

একটি এক্সটেনশন ইনস্টল করতে, কল করুন CREATE EXTENSION। পুনরায় ইনস্টল এড়াতে, যুক্ত করুন IF NOT EXISTS। দেখুন আমার ব্লগ পোস্ট আরো বিস্তারিত জানার জন্য, অথবা Stackoverflow এই পাতাটি

আমরা যে এক্সটেনশনটি চাই তা হ'ল ইউডিইউএস , ওএসএসপি ইউইডের সাথে কাজ করার জন্য সি-তে নির্মিত একটি ওপেন-সোর্স লাইব্রেরি । পোস্টগ্রিসের জন্য এই লাইব্রেরির একটি বিল্ডিং প্রায়শই পোস্টগ্রিসের ইনস্টলেশন যেমন এন্টারপ্রাইজ ডিবি দ্বারা সরবরাহিত গ্রাফিকাল ইনস্টলারগুলির সাথে পোস্টগ্র্রেএসকিউএল এর জন্য অ্যামাজন আরডিএসের মতো ক্লাউড সরবরাহকারীদের দ্বারা অন্তর্ভুক্ত থাকে ।

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

বিভিন্ন ধরণের ইউইউডি তৈরি করা

দেখুন এক্সটেনশগুলির ডক UUID মান বিভিন্ন ধরণের জেনারেট করার জন্য প্রদত্ত একাধিক কমান্ডের তালিকা দেখতে। কম্পিউটারের ম্যাক ঠিকানা প্লাস বর্তমান তারিখ-সময় প্লাস একটি ছোট এলোমেলো মান থেকে তৈরি ইউআইডি-র মূল সংস্করণ পেতে uuid_generate_v1()

SELECT uuid_generate_v1();

672124b6-9894-11e5-be38-001d42e813fe

এই থিমটিতে পরবর্তীকালের বৈচিত্রগুলি ইউআইডিগুলির বিকল্প ধরণের জন্য বিকাশ করা হয়েছিল। কিছু লোক সার্ভারের প্রকৃত MAC ঠিকানা রেকর্ড করতে নাও পারে, উদাহরণস্বরূপ, সুরক্ষা বা গোপনীয়তার উদ্বেগগুলির জন্য। পোস্টগ্র্যাস এক্সটেনশানটি পাঁচ ধরণের ইউইউডি উত্পন্ন করে, সাথে "শূন্য" ইউআইডিও তৈরি করে 00000000-0000-0000-0000-000000000000

ডিফল্ট মান হিসাবে ইউআইডি

যে কোনও নতুন rowোকানো সারিটির জন্য একটি ডিফল্ট মান উত্পন্ন করতে সেই পদ্ধতি কলটি স্বয়ংক্রিয়ভাবে করা যেতে পারে। কলামটি সংজ্ঞায়িত করার সময়, উল্লেখ করুন:

DEFAULT uuid_generate_v1()

নীচের উদাহরণ সারণী সংজ্ঞাতে ব্যবহৃত কমান্ডটি দেখুন।

CREATE TABLE public.pet_
(
  species_ text NOT NULL,
  name_ text NOT NULL,
  date_of_birth_ text NOT NULL,
  uuid_ uuid NOT NULL DEFAULT uuid_generate_v1(),  -- <====
  CONSTRAINT pet_pkey_ PRIMARY KEY (uuid_)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.pet_
  OWNER TO postgres;

ইউআইডি সংস্করণ

UUID-ossp প্লাগইন তৈরি করতে পারেন UUID বিভিন্ন সংস্করণ

  • uuid_generate_v1()
    বর্তমান কম্পিউটার + বর্তমান মুহুর্তের ম্যাক ঠিকানা রয়েছে । সাধারণভাবে ব্যবহৃত হয়, তবে আপনি যদি আপনার ডাটাবেস সার্ভারের ম্যাকটি প্রকাশের বিষয়ে বা এই মানটি উত্পন্ন হওয়ার সময়টি সম্পর্কে সংবেদনশীল হন তবে এড়িয়ে চলুন। সংস্করণ 1 ইউআইডি হিসাবে নির্দিষ্টকরণ দ্বারা সংজ্ঞায়িত ।
  • uuid_generate_v1mc()
    সংস্করণ 1 এর মতো , তবে আসল ম্যাক ঠিকানার পরিবর্তে এলোমেলো মাল্টিকাস্ট ম্যাক ঠিকানা সহ। স্পষ্টতই সংস্করণ 1 ব্যবহার করার উপায় তবে আপনি যদি সেই সত্যটি প্রকাশের বিষয়ে সংবেদনশীল হন তবে আপনার ডাটাবেস সার্ভারের প্রকৃত ম্যাকের পরিবর্তে অন্য কোনও ম্যাকের পরিবর্তে।
    একটি 'এলোমেলো মাল্টিকাস্ট ম্যাক' কী? আমি ঠিক জানি নাআরএফসি 4122 এর বিভাগ 4.1.6 পড়ার পরে , আমার সন্দেহ হয় যে এটি ম্যাকের জায়গায় ব্যবহার করা হয়েছে তবে সাধারণ ইউনিকাস্টের চেয়ে মাল্টিকাস্ট ম্যাক ঠিকানা নির্দেশ করার জন্য বিটস সেট রয়েছে যাতে সংস্করণ 1 এর এই প্রকরণটি স্বাভাবিকের থেকে আলাদা করতে পারে বাস্তব-ম্যাক সংস্করণ 1 ইউইউডি।
  • uuid_generate_v3( namespace uuid, name text )
    আপনার সরবরাহিত পাঠ্যের একটি এমডি 5 হ্যাশ রয়েছে । হিসেবে স্পেসিফিকেশন দ্বারা সংজ্ঞায়িত সংস্করণ 3 UUID , নামস্থান UUID ভিত্তি করে।
  • uuid_generate_v4()
    128 বিটের 121-122 এর জন্য এলোমেলোভাবে উত্পন্ন ডেটা ভিত্তিতে। সংস্করণ এবং বৈকল্পিক নির্দেশ করতে ছয় বা সাত বিট ব্যবহৃত। এই জাতীয় ইউআইডিটি কেবলমাত্র যদি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী র্যান্ডম জেনারেটরের সাথে প্রয়োগ করা হয় তবে তা ব্যবহারিক । সংস্করণ 4 ইউআইডি হিসাবে নির্দিষ্টকরণ দ্বারা সংজ্ঞায়িত ।
  • uuid_generate_v5( namespace uuid, name text )
    সংস্করণ 3 হিসাবে একই তবে SHA1 হ্যাশিং ব্যবহার করে । সংস্করণ 5 ইউআইডি হিসাবে স্পেসিফিকেশন দ্বারা সংজ্ঞায়িত ।
  • uuid_nil()
    একটি বিশেষ কেস, সমস্ত বিট শূন্য সেট করা 00000000-0000-0000-0000-000000000000। অজানা ইউআইডি মানটির জন্য পতাকা হিসাবে ব্যবহৃত। নীল ইউইউডি হিসাবে পরিচিত ।

ধরণের তুলনা করতে, প্রশ্নটি দেখুন, কোন ইউআইডি সংস্করণটি ব্যবহার করবেন?

যদি আপনি সংস্করণ 3 এবং 5 সম্পর্কে আগ্রহী হন তবে এই প্রশ্নটি দেখুন, ভি 5 ইউআইডি তৈরি হচ্ছে Gene নাম এবং নামস্থান কী?

আরও আলোচনার জন্য, আমার অনুরূপ প্রশ্নের উত্তর এবং জেডিবিসি থেকে পোস্টগ্রিসে আমার ব্লগ পোস্ট ইউআইডি মানগুলি দেখুন


ইউআইডি টাইপের কলামগুলি কীভাবে তৈরি করতে হয় তার জন্য গুগলে 1,000,000 হিট। জিরো কীভাবে পিকে দ্বারা ক্যোয়ারী সারিগুলি ফ্র্যাঙ্ক করা যায় তার জন্য হিট করে !! : - @
ক্লিন্ট ইস্টউড

@ ক্লিন্টইস্টউড অনুরূপ প্রশ্নের আমার উত্তর এবং জেডিবিসি থেকে পোস্টগ্রিসের জন্য আমার ব্লগ পোস্ট ইউআইডি মানগুলি আপনাকে সে ক্ষেত্রে সহায়তা করতে পারে। যদি সেগুলি অপর্যাপ্ত প্রমাণিত হয় তবে একটি নতুন প্রশ্ন পোস্ট করুন। আমি এটির জন্য আরও ছুরিকাঘাত করতে পেরে খুশি হব। আমি বুঝতে পারছি তোমার হতাশা!
তুলিল বাউরক

@ ক্লিন্টইস্টউড: একটি ইউইউডি কলামের সাথে একটি মানের তুলনা করার সিনট্যাক্সটি ম্যানুয়ালটিতে নথিভুক্ত ধ্রুবকগুলির জন্য বাক্য গঠনটি অনুসরণ করে: postgresql.org/docs/current/static/… এবং টাইপ কাস্টস: postgresql.org/docs/current/static/…
a_horse_with_no_name

1
@ বাসিলবাউরক: আপনি যে ফলাফলটি getObject()ব্যবহার করতে পারেন তা কাস্ট করা সত্যই দরকার নেইUUID id = rs.getObject("uuid_", UUID.class);
a_horse_with_no_name

1
@ রোকিট এলোমেলো সংখ্যা জেনারেটরের শক্তি যাচাই করতে, এই উত্তরগ্রন্থের ওএসএসপি ইউইড লাইব্রেরী প্রকল্পটি আমার উত্তর হিসাবে উল্লিখিত হিসাবে অন্তর্নিহিত ওপেন-সোর্স বাস্তবায়নটি দেখুন Post এবং মনে রাখবেন, সংস্করণ 4 ইউআইডিগুলি কেবল সর্বশেষ অবলম্বন হিসাবে ব্যবহার করা উচিত, যদি কোনও কারণে আপনি অন্য ধরণের পছন্দ করতে না পারেন। সাধারণত, আপনার প্রথম পছন্দ কলিং হয় এর, সংস্করণ 1 ধরনের হওয়া উচিত uuid_generate_v1বা uuid_generate_v1mc
তুলিল বাউরক

7

pgcrypto এক্সটেনশন

বাসিলের খুব বিস্তারিত উত্তরের সাথে একটি সামান্য সংযোজন:

যেহেতু বর্তমানে বেশিরভাগ পিজক্রিপ্টো ব্যবহার করছেন , পরিবর্তে uuid_generate_v1()আপনি সংস্করণ 4 ইউআইডি মানটিরgen_random_uuid() জন্য ব্যবহার করতে পারেন ।

প্রথমে আপনার পোস্টগ্রিসে পিজক্রিপ্টো সক্ষম করুন ।

CREATE EXTENSION "pgcrypto";

সবেমাত্র একটি কলামের ডিফল্ট সেট করুন DEFAULT gen_random_uuid()

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