কোনটি যায় তা নির্ধারণের জন্য রেকর্ড আইডি ব্যবহার করে পোস্টগ্রেস্কেলে বিদ্যমান রেকর্ডে ক্ষেত্রগুলি স্থাপন করা


1

পরিস্থিতি

আমার কাছে পোস্টগ্রেসকিএল ডাটাবেস রয়েছে যা পণ্যের বৈকল্পিকের একটি তালিকা রয়েছে, যা অংশ নম্বর ছাড়াই স্বয়ংক্রিয়ভাবে পপুলেশিত হয়েছে। আমি প্রতিটি পণ্যটির বৈকল্পিকের জন্য পার্ট সংখ্যা তৈরি করতে কিছু সূত্র চালানোর জন্য টেবিলটি রফতানি করেছি। এটি আমাকে প্রাসঙ্গিক রেকর্ড আইডি এবং সম্পর্কিত অংশ নম্বরযুক্ত একটি সারণী দিয়েছে gave

আমি যা অর্জন করার চেষ্টা করছি

যেহেতু আমার কাছে আমার টেবিলটি নেই এমন তথ্য রয়েছে যা আমি অনুপস্থিত, আমি কীভাবে সেই তথ্য পোস্টগ্রিস্কল টেবিলটিতে ফিরে পাব?

পোস্টগ্র্যাস্কিল টেবিলের থেকে নমুনা ডেটা [product_prodct]

   id   create_date       weight    default_code     product_templ_id   ...
    1   2016-12-15 18:57       0    000-000000-000                  1   ...
    2   2016-12-16 19:00       0    000-000000-000                  2   ...
    3   2016-12-16 20:42       0    000-000000-000                 31   ...
    4   2016-12-16 20:43       0    000-000000-000                 31   ...
    5   2016-12-16 20:44       0    000-000000-000                 31   ...
    6   2016-12-16 20:45       0                                   31   ...
  ...   ................     ...    ..............                 31   ...
 1603   2016-12-16 21:51       0                                   31   ...
 1604   2016-12-16 21:52       0                                   31   ...

গণনা করা অংশের নমুনার তালিকা

  id  default_code  
   6  000-000000-000
 ...  ..............
1604  000-000000-000

আমি কি চেষ্টা করেছি

আচ্ছা, আমি সেটআপ মাইক্রোসফট এক্সেস 2010 ডাটাবেসের সাথে একটি ODBC সংযোগ, টেবিল লিঙ্ক আমি ফিল্টার product_templ_idক্ষেত্র ও অনুসারে সাজানো idঅর্ডার কি আমি আমার এক্সেল স্প্রেডশীট ছিল মেলে। তারপরে, আমি default_codeকলামটি থেকে অংশের সংখ্যাগুলি অনুলিপি করেছি এবং প্রারম্ভিক পর্যায়ে আটকানোর চেষ্টা করেছি, তবে আমি খুব বেশি তথ্য আটকানোর চেষ্টা করছি বলে উল্লেখ করে একটি ত্রুটি পেয়েছি। আমি জড়ো হয়েছি, অ্যাক্সেসটি ক্লিপবোর্ডের সামগ্রীগুলিকে একক ঘরে আটকে দেওয়ার চেষ্টা করছিল। আমি যে আচরণের জন্য আশা করছিলাম তা নয়।

এর চেয়ে ভাল রুট কী?

এই নির্দিষ্ট পণ্যটির 1440 ভেরিয়েন্ট রয়েছে যার প্রত্যেকটির নিজস্ব অংশ নম্বর এবং বিওএম রয়েছে। আমি লাইন দিয়ে সমস্ত লাইন তৈরি করতে আমার সময় ব্যয় করতে চাই না। আমি সবসময় লোকদের বলি যে ডেটা ডেটা, এবং আপনি ডেটা দিয়ে যে কোনও কিছু করতে পারেন। এটি কীভাবে কাজ করার তা কেবল বিষয়।

--EDIT--

আমি আমার টেবিলটি পিজএডমিন থেকে রফতানি করতে পারি তবে কিছু কারণে যখন আমি আমদানির চেষ্টা করি তখন কিছুই ঘটে না।

ফলস্বরূপ আমি নিম্নলিখিত আদেশটি চেষ্টা করেছিলাম:

COPY product_product (default_code) from '/csv/file/location/file.csv' CSV HEADER delimiter ';' null '/n';

যার ফলস্বরূপ:

ERROR:  extra data after last expected column
CONTEXT:  COPY product_product, line 2: "203;000-000000-000"

আমি চিত্রিত করছি, ঠিক আছে, আমি একটি ক্ষেত্র উল্লেখ করেছি, তবে আমার সিএসভিতে দুটি ক্ষেত্র রয়েছে। এটি কারণ আমি নিশ্চিত করতে চাই যে আমদানি করা default_codeক্ষেত্রটি সঠিক রেকর্ডের সাথে যুক্ত।

এরপরে, আমি চেষ্টা করেছি:

COPY product_product FROM '/csv/file/location/file.csv' CSV HEADER delimiter ';' null '\n';

এর ফলাফল:

ERROR:  duplicate key value violates unique constraint "product_product_pkey"
DETAIL:  Key (id)=(2) already exists.

সুতরাং এখন, আমি অঙ্কিত আমি পাশাপাশি টেবিল ফেলে এবং এটি পুনর্নির্মাণ করতে পারে। দুর্ভাগ্যক্রমে এই টেবিলটির সাথে নির্ভরতা সেটআপ রয়েছে, তাই এটি বাদ দেওয়া যায় না।

আমি যদি পোস্টগ্রেস্কলএল একটি রেকর্ড মান সম্পাদনা করতে জানতাম তবে আমি সেই অনুযায়ী সমস্ত 1440 রেকর্ড সম্পাদনা করার জন্য প্রয়োজনীয় কমান্ড উত্পন্ন করতে একটি স্ক্রিপ্ট লিখতে পারি।

উত্তর:


1

আপনার সিএসভি ফর্ম্যাটে আপনার ডেটা রফতানি করা উচিত, এবং আপনার ডেটা আবার আমদানি করতে পোস্টগ্র্যাসে pgAdmin বা একটি কাঁচা কপি কমান্ড ব্যবহার করা উচিত:

এটি কীভাবে করবেন সে সম্পর্কিত তথ্যের জন্য এই পোস্টটি দেখুন: https://stackoverflow.com

--EDIT--

এই পোস্ট অনুসরণ করে আপনি নিম্নলিখিত এসকিউএল কোয়েরি উত্পন্ন করতে আপনার স্ক্রিপ্টিং দক্ষতা ব্যবহার করতে পারেন:

UPDATE product_product
    SET default_code = CASE id
        WHEN 6 THEN 000-000000-000
        ...
        ...
        WHEN 1603 THEN 000-000000-000
        WHEN 1604 THEN 000-000000-000
        ELSE default_code
        END;

তারপরে পিজএডমিন ব্যবহার করে আপনার ডাটাবেসের সাথে সংযুক্ত হয়ে কোয়েরিটি চালান। এটি product_productসারণীতে রেকর্ডগুলির মাধ্যমে বিশ্লেষণ করবে default_codeএবং আপেক্ষিক idমানের সাথে সম্পর্কিত রেকর্ডের ক্ষেত্রটি আপডেট করবে । যদি idমান আপনার তালিকায় নয়, এটা কেবল রাখে default_codeমান।

এই পোস্টটি অতিরিক্ত বিবৃতি দিয়ে ক্যোয়ারী শেষ করে:

        ...
        END
    WHERE id IN(6,...,...,1603,1604);

এই বিশেষ ক্ষেত্রে, নির্দিষ্ট idমানগুলি তালিকাভুক্ত করার প্রয়োজন হয় না । এছাড়াও, IN1440 মানের উপরেের তালিকার একটি ত্রুটি তৈরি হবে। এটি ঠিক আছে কারণ ELSE default_codeবিবৃতিটি ক্যাচল হিসাবে কাজ করে, idমানগুলিকে আমাদের caseতালিকায় রাখে না।

এই সমাধানটি ওপি দ্বারা পরীক্ষা ও যাচাই করা হয়েছে।


আমি পিজএডমিন থেকে রফতানি করতে সক্ষম হয়েছি, তবে আমদানি করছি না। আমি যে পদক্ষেপ নিয়েছি তা আমার প্রশ্ন সম্পাদনা করেছে। এই লিঙ্কটি ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ। এটা সহায়ক ছিল।
সিরাচ ম্যাথিউ

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