Postgres রেকর্ড সন্নিবেশ আদেশ সংরক্ষণ করে?


19

উদাহরণস্বরূপ যখন আমি কোয়েরিটি ব্যবহার করি যা রেকর্ড আইডিগুলি দেয়

INSERT INTO projects(name)
VALUES (name1), (name2), (name3) returning id;

যা উত্পাদন করে:

1
2
3

এই আইডিগুলি কি সন্নিবেশ করা মানগুলিকে নির্দেশ করবে?

1 -> name1
2 -> name2
3 -> name3

4
প্রকৃত উত্তর একদিকে (যা আমি বিশ্বাস করি না) আপনি আপনার প্রশ্নের মধ্যে যে নির্দিষ্ট করেছেন তার চেয়ে অন্য কোনও আদেশের উপর নির্ভর করা উচিত নয়।
dezso

উত্তর:


17

এই সাধারণ মামলার উত্তর হ্যাঁ । সারিগুলি সরবরাহ করা ক্রমের সাথে VALUESঅভিব্যক্তিতে সন্নিবেশ করা হয় । এবং যদি আপনার idকলামটি কোনও serialপ্রকার হয় তবে অন্তর্নিহিত ক্রম থেকে মানগুলি সেই ক্রমে আনা হবে।

তবে এটি বাস্তবায়নের বিশদ এবং এর কোনও গ্যারান্টি নেই। বিশেষত, WHEREশর্ত বা যোগদানের সাথে আরও জটিল প্রশ্নগুলিতে অর্ডার অগত্যা রক্ষণ করা হয় না ।

একইসাথে একই টেবিলে একই সাথে একই সময়ে লেনদেনের লিখন থাকলে আপনি ফাঁক বা অন্যান্য সারি মিশ্রিত করতে পারেন। অসম্ভব, তবে সম্ভব।

একটি ডাটাবেস সারণীতে কোনও "প্রাকৃতিক" অর্ডার নেই। সারিগুলির শারীরিক ক্রম (যা সিস্টেম কলামেctid প্রতিফলিত হয় ) প্রাথমিকভাবে তাদের theirোকানো ক্রমের সাথে সামঞ্জস্য করবে, এটি যে কোনও সময় পরিবর্তন হতে পারে। UPDATE, DELETE, VACUUMএবং অন্যান্য কমান্ড সারির শারীরিক ক্রম পরিবর্তন করতে পারেন। তবে এর জন্য উত্পন্ন মানগুলি idস্থিতিশীল এবং কোনওভাবেই এর সাথে সংযুক্ত নয়, অবশ্যই।


আমি মনে করি সের্গেই এই প্রশ্নের আরও উল্লেখ করেছেন যে প্রথম সারিতে সর্বদা
আইড

@a_horse_with_no_name: উত্তর দেওয়ার জন্য যে : এটা একটি পুনশ্চ তৈরি হয়, তার একটি কারণ হবে serialকলাম - একই লেনদেনে আদর্শভাবে।
এরউইন ব্র্যান্ডস্টেটার

যদি প্রশ্নটি হয় "নামের আইডিটি সর্বদা নাম 1 এর চেয়ে বড় হবে", তবে কি সর্বদা সঠিক হবে? (আপনার ২ য় অনুচ্ছেদের বিষয়ে)
লুলালালা

@ লুলালালা: যোগসূত্র এবং WHEREশর্তাবলী নিয়ে আরও জটিল প্রশ্নগুলির জন্য প্রয়োজনীয় নয় । যদিও আমি সরল WHEREঅবস্থার কথা ভাবতে পারি না যা সারিগুলির ক্রম বদলে দেবে, অবশ্যই এতে যোগ দিতে পারে।
এরউইন ব্র্যান্ডসেটেটার

3

কিছুটা ক্ষেত্রে এরউইন ব্র্যান্ডস্টেটারের উত্তর সঠিক নাও হতে পারে।

আমরা একটি কাজ করেছি INSERT INTO ... SELECT bar,baz FROM foo ORDER BY bar এবং আমরা দেখতে পেলাম যে SELECT ctid,* FROM foo টেবিলের সারিগুলির দৈহিক ক্রম সন্নিবেশ ক্রমের সাথে ঠিক মেলে না, এটি কিছুটা আপ্লুত হয়েছে বলে মনে হয়। নোট করুন যে আমাদের টেবিলটিতে অত্যন্ত পরিবর্তনশীল ডেটা আকারের সাথে একটি জসনব কলাম রয়েছে। সন্নিবেশের সময় পরীক্ষামূলকভাবে jsonb ডেটা ছাঁটাইয়ের ফলে সন্নিবেশ ক্রমটি সঠিক হতে পারে।


3
হিসাবে @Erwin নির্দিষ্ট মধ্যে প্রথম বাক্য সে কেবল "হ্যাঁ" ঐ বিশেষ একক প্রশ্নে উল্লেখ করা ইনস্ট্যান্সের মধ্যে বলছে। @ ডেসো যেমন তাঁর মন্তব্যে বলেছিলেন , কখনই "সন্নিবেশ" আদেশের উপর নির্ভর করবেন না; আপনি যদি কোনও উদ্দেশ্যে সেই আদেশের উপর নির্ভর করে থাকেন তবে আপনার সর্বদা বাছাই বিবৃতিতে আদেশটি নির্দিষ্ট করা উচিত।
ম্যাক্স ভার্নন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.