আমাকে কিছুটা ভিন্ন কাঠামো সহ একটি পুরানো ডাটাবেস থেকে নতুন একটিতে আমদানি করা দরকার need উদাহরণস্বরূপ, পুরানো ডাটাবেসে, একটি টেবিল রেকর্ডিং কর্মচারী এবং তাদের সুপারভাইজার রয়েছে:
CREATE TABLE employee (ident TEXT PRIMARY KEY, name TEXT, supervisor_name TEXT)
এখন, নতুন ডাটাবেসটি নিম্নরূপ:
CREATE TABLE person (id BIGSERIAL PRIMARY KEY, name TEXT, old_ident TEXT);
CREATE TABLE team (id BIGSERIAL PRIMARY KEY);
CREATE TABLE teammember (person_id BIGINT, team_id BIGINT, role CHAR(1));
তা হ'ল, তাদের সুপারভাইজারদের নাম সহ কর্মচারীদের সরল টেবিলের পরিবর্তে, নতুন (আরও জেনেরিক) ডাটাবেসটি মানুষের দল তৈরি করতে সক্ষম করে। কর্মীরা ভূমিকা সহ সদস্য, ভূমিকা 'e'
সহ সুপারভাইজার 's'
।
প্রশ্নটি কীভাবে সহজেই employee
নতুন স্ট্রাকচার থেকে ডেটা মাইগ্রেট করা যায় , প্রতি কর্মী-তত্ত্বাবধায়ক জুটির জন্য একটি দল। উদাহরণস্বরূপ, কর্মীরা
employee: ('abc01', 'John', 'Dave'), ('abc02', 'Kyle', 'Emily')
হিসাবে স্থানান্তরিত করা হয়
person: (1, 'John', 'abc01'), (2, 'Dave', NULL), (3, 'Kyle', 'abc02'), (4, 'Emily', NULL)
team: (1), (2)
teammember: (1, 1, 'e'), (2, 1, 's'), (3, 2, 'e'), (4, 2, 's')
আমি ডেটা-সংশোধনকারী সিটিই ব্যবহার করে প্রথমে কর্মচারী এবং সুপারভাইজারদের সন্নিবেশ করানোর পরে তার মধ্যে দলগুলি বিবেচনা করব। তবে, সিটিই কেবল সন্নিবেশ করা সারণি সারি থেকে ডেটা ফেরত দিতে পারে। এইভাবে, আমি কে সুপারভাইজার ছিল তা মেলতে পারছি না।
আমি দেখতে পাচ্ছি একমাত্র সমাধানটি ব্যবহার করা plpgsql
, যা কেবল ডেটা দিয়ে পুনরাবৃত্তি করতে পারে, একটি অস্থায়ী ভেরিয়েবলের মধ্যে teamোকানো টিম আইডি ধরে রাখে এবং তারপরে উপযুক্ত teammember
সারি সন্নিবেশ করায় । তবে আমি সহজ বা আরও মার্জিত সমাধান আছে কিনা তা জানতে আগ্রহী।
সেখানে প্রায় কয়েকশ থেকে কয়েক হাজার কর্মচারী থাকবে। যদিও এটি সাধারণত একটি ভাল অনুশীলন, আমার ক্ষেত্রে, পুরানো আইডিগুলির মতো স্ট্রিং হওয়ায় আমি পুরানোগুলির উপর ভিত্তি করে নতুন আইডি তৈরি করতে চাই না *.GM2
। আমি এগুলি old_ident
রেফারেন্সের জন্য কলামে সঞ্চয় করি ।
team
যাতে কোনও ব্যক্তির আইডি ধারণ করে যার জন্য দলটি তৈরি হয়েছিল তা সমস্যার সমাধান করবে। যদিও এর চেয়ে আরও মার্জিত (অর্থাত্ কোনও ডিডিএল ব্যবহার না করা) সমাধান রয়েছে কিনা তা নিয়ে আমি এখনও আগ্রহী।