मौजूदा अभिलेखों में फ़ील्ड्स को रिकॉर्ड करना, यह निर्धारित करने के लिए रिकॉर्ड ID का उपयोग करके किधर जाता है


1

परिदृश्य

मेरे पास एक पोस्टग्रेजल डेटाबेस है जिसमें उत्पाद वेरिएंट की एक सूची है, जो कि स्वचालित रूप से आबादी है, हालांकि, भाग संख्या के बिना। मैंने प्रत्येक उत्पाद संस्करण के लिए भाग संख्याएँ बनाने के लिए कुछ सूत्रों को चलाने के लिए तालिका का निर्यात किया। इससे मुझे संबंधित रिकॉर्ड आईडी और संबद्ध भाग संख्या वाली तालिका मिली।

जिसे मैं पूरा करने की कोशिश कर रहा हूं

अब जब मेरे पास गायब होने वाली जानकारी के साथ मेरी तालिका है, तो मुझे वह जानकारी वापस पोस्टग्रैस्क्ल तालिका में कैसे मिलेगी?

Postgresql टेबल से नमूना डेटा

   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

मैंने क्या कोशिश की है

ठीक है, मैं डेटाबेस में एक ODBC कनेक्शन सेटअप करता हूं, जो MS Access 2010 में तालिका को जोड़ता है product_templ_id क्षेत्र और द्वारा क्रमबद्ध idमेरे एक्सेल स्प्रेडशीट में जो कुछ भी था उसे मैच करने के लिए फिर, मैंने भाग संख्याओं की प्रतिलिपि बनाई default_code कॉलम और शुरुआती बिंदु पर चिपकाने की कोशिश की, लेकिन एक त्रुटि प्राप्त की, जिसमें कहा गया कि मैं बहुत अधिक जानकारी चिपकाने की कोशिश कर रहा था। मैं इकट्ठा हूं, क्लिप क्लिपबोर्ड सामग्री को एकल कक्ष में चिपकाने की कोशिश कर रहा था। वह व्यवहार नहीं जिसके लिए मैं उम्मीद कर रहा था।

बेहतर मार्ग क्या है?

इस विशेष उत्पाद में 1440 संस्करण हैं, जिनमें से प्रत्येक का अपना भाग संख्या और बीओएम है। मैं वास्तव में अपना सारा समय लाइन में लगाकर नहीं बिताना चाहता। मैं हमेशा लोगों को बता रहा हूं कि डेटा डेटा है, और आप डेटा के साथ कुछ भी कर सकते हैं। यह सिर्फ काम करने की बात है कि कैसे।

--EDIT--

मैं अपनी तालिका pgAdmin से निर्यात कर सकता हूं, लेकिन किसी कारण से जब मैं आयात करने का प्रयास करता हूं, तो कुछ भी नहीं होता है।

परिणामस्वरूप मैंने निम्नलिखित कमांड की कोशिश की:

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.

तो अब, मुझे लगता है कि मैं टेबल को गिरा सकता हूं और इसका पुनर्निर्माण कर सकता हूं। दुर्भाग्य से इस तालिका के साथ निर्भरता सेटअप हैं, इसलिए इसे गिराया नहीं जा सकता।

अगर मुझे पता था कि पोस्टग्रैक्स्ल में रिकॉर्ड मूल्य को कैसे संपादित किया जाए, तो मैं उसके अनुसार सभी 1400 पृष्ठों को संपादित करने के लिए आवश्यक कमांड उत्पन्न करने के लिए एक स्क्रिप्ट लिख सकता हूं।

जवाबों:


1

आपको अपना डेटा CSV प्रारूप में निर्यात करना चाहिए, और अपने डेटा को आयात करने के लिए पोस्टग्रैज़ में pgAdmin या एक कच्चे COPY कमांड का उपयोग करना चाहिए:

ऐसा करने के बारे में जानकारी के लिए इस पोस्ट को देखें: https://stackoverflow.com/questions/19400173/how-should-i-import-data-from-csv-into-a-postgres-table-using-pgadmin-3

--EDIT--

निम्नलिखित ये पद निम्न SQL क्वेरी उत्पन्न करने के लिए आप अपने स्क्रिप्टिंग कौशल का उपयोग कर सकते हैं:

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;

फिर pgAdmin का उपयोग करके, अपने डेटाबेस से कनेक्ट करें और क्वेरी चलाएँ। यह रिकॉर्ड्स के माध्यम से पार्स करेगा product_product तालिका और अद्यतन default_code रिश्तेदार के अनुरूप रिकॉर्ड का क्षेत्र id मूल्य। अगर द id मान आपकी सूची में नहीं है, यह केवल रखता है default_code मूल्य।

ये पद एक अतिरिक्त विवरण के साथ प्रश्न समाप्त करता है:

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

इस विशेष मामले में, विशिष्ट को सूचीबद्ध करने की आवश्यकता नहीं है id मान। इसके अलावा, ए IN 1440 मूल्यों के ऊपर की सूची एक त्रुटि उत्पन्न करेगी। यह ठीक है क्योंकि ELSE default_code स्टेटमेंट एक कैथेल, हैंडलिंग का काम करता है id मूल्य हमारे में नहीं case सूची।

इस समाधान का परीक्षण और सत्यापन ओपी द्वारा किया गया है।


मैं pgAdmin से निर्यात करने में सक्षम था, लेकिन आयात नहीं। मैंने अपने प्रश्न को आगे बढ़ाते हुए संपादित किया है। उस लिंक को साझा करने के लिए धन्यवाद। यह मददगार था।
Sirach Matthews

1
@SirachMatthews फ़ॉलो कर रहे हैं ये पद वे आपको एक नई तालिका में आयात करने की सलाह देते हैं, और लक्ष्य तालिका में प्रविष्टियों को बदलने के लिए मौजूदा SQL का उपयोग करते हैं। यह भी देखें ये पद
FrankerZ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.