27

मैं रेल मुझे दे रही है की इस समस्या को दूर करने trange किया गया है "तालिका के लिए अज्ञात प्राथमिक कुंजी ...", तब भी जब तालिका के आईडी नहीं है।"तालिका के लिए अज्ञात प्राथमिक कुंजी" हो रही है, जबकि आईडी है वहाँ

मैं एक से दूसरे Heroku app से डेटाबेस कॉपी किया है, मूल databse पर वहाँ कोई समस्या नहीं है और नया मुझे एक डाटाबेस त्रुटि देता है।

ProductsController# (ActionView::Template::Error) "Unknown primary key for table collections in model Collection." 

/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/reflection.rb:366:in `primary_key' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/reflection.rb:480:in `association_primary_key' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/association_scope.rb:58:in `block in add_constraints' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/association_scope.rb:39:in `each' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/association_scope.rb:39:in `each_with_index' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/association_scope.rb:39:in `add_constraints' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/association_scope.rb:31:in `scope' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/association.rb:98:in `association_scope' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/association.rb:87:in `scoped' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/collection_association.rb:573:in `first_or_last' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/collection_association.rb:105:in `last' 
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/collection_proxy.rb:46:in `last' 
/app/app/helpers/likes_helper.rb:62:in `significant_liker' 

लाइन का कारण बनता है कि यह:

product.collections.last.try :user 

और टेबल:

d8apjspa441pad=> \d collections 
            Table "public.collections" 
    Column  |   Type   |      Modifiers       
----------------+------------------------+---------------------------------------------------------- 
id    | integer    | not null default nextval('collections_id_seq'::regclass) 
name   | character varying(255) | 
user_id  | integer    | 
permalink  | character varying(255) | 
category_id | integer    | 
products_count | integer    | 
is_featured | boolean    | 
Indexes: 
    "index_lists_on_user_id_and_permalink" UNIQUE, btree (user_id, permalink) 

किसी भी विचार यह क्यों होना चाहिए

यह त्रुटि है?

धन्यवाद!

+0

लगता प्राथमिक कुंजी सूचकांक संग्रह से याद आ रही है काम किया। – Debadatt

+0

क्या आप मेरे और दूसरे के लाभ के लिए साझा कर सकते हैं कि इसे उत्तर में कैसे स्थापित किया जाए? – hakunin

उत्तर

25

लगता है कि तालिका संग्रह के लिए प्राथमिक कुंजी गुम है।

3,2 रेल करने से पहले,

class Collection < ActiveRecord::Base 
    set_primary_key "my_existing_column" 
end 

रेल में 3.2+ और रेल 4 की तरह मॉडल में प्राथमिक कुंजी सेट,

class Collection < ActiveRecord::Base 
    self.primary_key = "my_existing_column" 
end 

की तरह मॉडल में प्राथमिक कुंजी सेट या

हम तालिका एक को बदल सकते हैं d की तरह

आईडी के लिए प्राथमिक कुंजी सेट प्राथमिक कुंजी

class AddPrimaryKeyToCollections < ActiveRecord::Migration 
def change 
    execute "ALTER TABLE collections ADD PRIMARY KEY (id);" 
end 
end 
+0

हम्म, मैंने सोचा कि आप डीबी में प्राथमिक कुंजी सेट करना चाहते हैं, जो मैंने किया है और हालांकि यह पहले से सेट की जा रही कुंजी के बारे में शिकायत करता है, ऐप ने काम करना शुरू कर दिया। क्या आप समझा सकते हैं कि मैं 'set_primary_key' का उपयोग क्यों करूंगा, भले ही आईडी केवल डिफ़ॉल्ट 'आईडी' है? शायद आसान हो सकता है। – hakunin

+0

Porbably आपके संग्रह तालिका डीबी में एक प्राथमिक कुंजी सूचकांक याद आती है। प्रत्येक तालिका में प्राथमिक कुंजी होनी चाहिए। चूंकि यहां तालिका प्राथमिक कुंजी खो देती है जिसे हमें इसे सेट अप करने की आवश्यकता होती है। लेकिन डिफ़ॉल्ट आईडी प्राथमिक कुंजी के रूप में स्थापित नहीं हो सका ..तो यह excepition बढ़ाता है। – Debadatt

+0

तो मूल रूप से, मेरे पास दो विकल्प थे - स्पष्ट रूप से रेल बताएं, या डीबी विशेषता सही ढंग से सेट करें, है ना? यदि आप विशेषता सेट अप करने के लिए पीएसक्यूएल जोड़ते हैं तो मैं आपका जवाब स्वीकार करूंगा। – hakunin

13

मैं एक ऐसी ही समस्या हो रही थी और यह केवल पेज मैं मिल सकता था स्थापित करने के लिए एक प्रवास फ़ाइल बनाएँ। तो बस के मामले में यह किसी और के लिए मदद की हो जाएगा ...

मैं अचानक एक जोड़ी टेबल पर प्राथमिक कुंजी संदेश लापता हो रही शुरू कर दिया। मैं अनुमान लगा रहा हूं, लेकिन यह सुनिश्चित नहीं है कि डेटा को धक्का देने के बाद यह शुरू हो रहा है (pg_dump स्थानीय, heroku pg:restore)

प्रश्न में प्राथमिक कुंजी दोनों टेबलों पर थीं जिनका नाम बदल दिया गया था ताकि पकी नाम तालिका के नाम से मेल न हो - लेकिन दूसरी ओर कई अन्य नामित टेबल एक ही नाव में थे और उन्हें कोई समस्या नहीं थी।

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

बहुत विचार करते हुए कि pkey जानकारी नहीं सही schema.rb में दिखता है और सिर्फ काम 'माना जाता है, जो उन्हें परेशान?

वैसे भी, मेरे लिए क्या काम करता है (और इस प्रकार मैं पोस्ट कर रहा हूं) heroku pg:reset करना है और फिर डंप को फिर से लोड करना है। साइड नोट, मुझे heroku pg:reset की कोशिश की पहली बार दो बार 'आंतरिक सर्वर त्रुटि' मिली। लेकिन बाद में मैंने फिर कोशिश की और यह काम किया।

0

आप इस समस्या का निवारण करने की कोशिश कर रहे हैं, तो आप अपने लॉग ध्यान से जांच सुनिश्चित करें। मैंने एक जेएस परिसंपत्ति से संबंधित एक पूर्व त्रुटि देखी जो पूर्वकंपी नहीं जा रहा था। यह संदेश प्रस्तुत करने के ढेर में खो गया है।

एक बार मैं संपत्ति precompilation मुद्दा, 'तालिका के लिए अज्ञात प्राथमिक कुंजी' तय त्रुटि नहीं रह गया है फेंक दिया गया था।

यह 100% निश्चित रूप से केवल एक चीज है जिसे मैंने बदल दिया।

5

मैं हाल ही में इस त्रुटि का सामना किया था: "तालिका के लिए अज्ञात प्राथमिक कुंजी", और प्रश्न प्रश्नकर्ता तरह, यह एक Heroku एप्लिकेशन के लिए एक डेटाबेस कॉपी करने के बाद दिखाई दिया।

स्रोत डेटाबेस में कोई त्रुटि नहीं थी, इसलिए मुझे विश्वास था कि तालिका और प्राथमिक कुंजी ठीक थी।

मैं इस पृष्ठ पर कुछ सुझाव की कोशिश की, एक heroku pg:reset, पुराने डेटाबेस के नए pg_dump, और नए डेटाबेस में pgbackups:restore साथ शून्य से शुरू सहित, तो माइग्रेशन और बोने चल रहा है ... कुछ भी नहीं काम किया।

आखिरकार मेरी समस्या का समाधान आसान था: ऐप को पुनरारंभ करना। नए ऐप में कई डेटाबेस माइग्रेशन थे, और heroku restart चलाते हुए स्कीमा को फिर से लोड किया गया और स्कीमा परिवर्तनों को उठाया गया। Heroku के दस्तावेज़ से यह पृष्ठ बताता है:

Running Rake Commands

माइग्रेशन चलाने के बाद आप Heroku स्कीमा और पिक किसी भी स्कीमा परिवर्तन फिर से लोड करने को पुनः आरंभ के साथ अपने एप्लिकेशन को पुनः प्रारंभ करना चाहते हैं।

+1

कैपिस्ट्रानो तैनाती के बाद बस इस त्रुटि के साथ मेरे लिए भी काम करना शुरू कर दिया। – GSP

+0

'heroku pg: reset' फिर डीबी के लिए मेरे लिए काम किया। मैंने मैन्युअल रूप से उत्पादन डीबी पर एक इंडेक्स बनाया था और इसे स्टेजिंग डीबी – Josh

2

मेरे लिए क्या मदद की (Heroku के बाद एक डाटाबेस बहाल पर हुआ) प्राथमिक कुंजी सूचकांक reindexing है:

reindex index $primary_key_index_name

+0

पर सही ढंग से कॉपी नहीं किया जा रहा था, आप इसे कहां टाइप करते हैं? – Swards

+0

'psql' कंसोल में। –

+0

मुझे पुश के बाद उत्पादन (हेरोकू पर) में त्रुटि मिल रही थी। यकीन नहीं है कि मेरे पास डीबी कंसोल तक पहुंच है। फिरोकू को फिर से धक्का लगाना ठीक लग रहा था। मुझे सही दिशा बताने के लिए धन्यवाद। – Swards

0

मैं इस समस्या हो रही किया गया था और इस मुद्दे को पता चला मेरी मेज कि होने के लिए किसी भी तरह वास्तव में प्राथमिक कुंजी सूचकांक नहीं था। समाधान एक माइग्रेशन बनाना था जिसमें प्राथमिक कुंजी जोड़ा गया:

execute "ALTER TABLE appointment_reminder_text ADD PRIMARY KEY (id)" 
0

धन्यवाद मेरे लिए काम किए गए इंडेक्स को धन्यवाद। बस कैसे इस त्रुटि को स्पष्ट नजर वहाँ एक अधिक जटिल संबंध शामिल है, तो होगा के बारे में एक और एक संक्षिप्त संदेश:

ActiveRecord::StatementInvalid - PG::SyntaxError: ERROR: zero-length delimited identifier at or near """" 
LINE 1: ...CT "users".* FROM "users" WHERE "benefits"."" IN ('1'... 
1

मैं Heroku से अपने स्थानीय व्यवस्था करने के लिए डेटाबेस डंप को बहाल किया गया था और इस त्रुटि हो रही थी ..

ActiveRecord::UnknownPrimaryKey: ActiveRecord::UnknownPrimaryKey 

मैं मौजूदा डेटाबेस पर बहाल किया गया था, तो मैं डेटाबेस गिरा दिया, नया डेटाबेस बनाया और उसके बाद डंप को बहाल करने और इसके लिए मुझे

संबंधित मुद्दे