2017-12-10 117 views
13

से बहाल मैं से एक Heroku postgres डेटासंग्रह उपयोग करने के लिए एक एक स्थानीय postgres डेटाबेस मैं की बहाल की कोशिश कर मुद्दों में चल रहा हूँ। पुनर्स्थापित पोस्टग्रेज़ डेटाबेस का उपयोग करना Django सामान्य के रूप में चलता है। यह सभी वस्तुओं को पुनर्प्राप्त करता है और बिना किसी समस्या के अपने क्षेत्र, प्राइम कुंजी आदि का उपयोग करता है।IntegrityError: सभी मॉडलों के लिए स्तंभ "आईडी" में शून्य मान/postgres के बाद ForeignKey साथ क्षेत्रों डंप

लेकिन जब यह डेटाबेस के लिए लिखने के लिए आता है, मैं एक ही त्रुटि बोर्ड भर में, मॉडल (रों) की परवाह किए बिना मिलता है।

psycopg2.IntegrityError: null value in column "id" violates not-null constraint

जब मैं उसकेोकू डेटाबेस को रीसेट करता हूं और रिक्त स्लेट से ऑब्जेक्ट्स बना देता हूं तो कोई समस्या नहीं होती है। लेकिन अगर मैं एक बहाल डेटाबेस पर किसी भी वस्तु बनाने के लिए प्रयास करते हैं, मैं हमेशा इस एक कॉपी/पेस्ट किया स्टैक ट्रेस null value in column "id" violates not-null constraint


यहाँ Django व्यवस्थापक में एक बुनियादी मॉडल बनाने के लिए कोशिश कर रहा से मिलता है। मैंने इस मॉडल उदाहरण को चुना क्योंकि इसे बनाने के लिए कोई अतिरिक्त कोड नहीं है। कोई संकेत या कुछ भी नहीं।

Django Version: 2.0 Python Version: 3.6.3

Traceback:

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute 85. return self.cursor.execute(sql, params)

The above exception (null value in column "id" violates not-null constraint DETAIL: Failing row contains (null, Special Class, special-class).) was the direct cause of the following exception:

File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner 35. response = get_response(request)

File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 128. response = self.process_exception_by_middleware(e, request)

File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 126. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py" in wrapper 574. return self.admin_site.admin_view(view)(*args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapped_view 142. response = view_func(request, *args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 44. response = view_func(request, *args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/sites.py" in inner 223. return view(request, *args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py" in add_view 1553. return self.changeform_view(request, None, form_url, extra_context)

File "/app/.heroku/python/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapper 62. return bound_func(*args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapped_view 142. response = view_func(request, *args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/utils/decorators.py" in bound_func 58. return func.get(self, type(self))(*args2, **kwargs2)

File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py" in changeform_view 1450. return self._changeform_view(request, object_id, form_url, extra_context)

File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py" in _changeform_view 1490. self.save_model(request, new_object, form, not add)

File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/options.py" in save_model 1026. obj.save()

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py" in save 729. force_update=force_update, update_fields=update_fields)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py" in save_base 759. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py" in _save_table 842. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py" in _do_insert 880. using=using, raw=raw)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method 82. return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/query.py" in _insert 1125. return query.get_compiler(using=using).execute_sql(return_id)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/sql/compiler.py" in execute_sql 1280. cursor.execute(sql, params)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py" in execute 100. return super().execute(sql, params)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py" in execute 68. return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute_with_wrappers 77. return executor(sql, params, many, context)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute 85. return self.cursor.execute(sql, params)

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py" in exit 89. raise dj_exc_value.with_traceback(traceback) from exc_value

File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute 85. return self.cursor.execute(sql, params)

Exception Type: IntegrityError at /admin/fantasy/raceclass/add/ Exception Value: null value in column "id" violates not-null constraint DETAIL: Failing row contains (null, Special Class, special-class).


स्टैक ट्रेस से मॉडल (ध्यान में रखना इस त्रुटि हर मॉडल, बस इस [बहुत ही बुनियादी] नहीं है। के लिए होता)

class RaceClass(models.Model): 
    title = models.CharField(max_length=140) 
    slug = models.SlugField(unique=True) 

    def __str__(self): 
     return self.title 

    class Meta: 
     ordering = ['title'] 

यहाँ है कैसे मैं Heroku के लिए खत्म हो बहाल (घ) स्थानीय डेटा:

मैं अपने स्थानीय Postgres डेटाबेस डंपिंग कर रहा हूँ (वी ersion 10.0) का उपयोग कर आदेश:

PGPASSWORD=mypassword pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dump 

फिर एडब्ल्यूएस पर अपलोड करने, और एक Postgres डेटास्टोर में बहाल (संस्करण 9.6.5) Heroku का उपयोग कर आदेश पर:

heroku pg:backups:restore 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' DATABASE_URL 

ये हैं दोनों सीधे Heroku प्रलेखन से: https://devcenter.heroku.com/articles/heroku-postgres-import-export


साइड नोट: मैं संस्करण का उपयोग कर रहा 10.0 Postgres स्थानीय और Heroku डेटास्टोर 9.6.5

है
+0

कृपया आप त्रुटि के लिए पूर्ण स्टैक ट्रेस, और कोड है कि जब त्रुटि होता है (जो भी मॉडल आप को बचाने के लिए कोशिश कर रहे हैं के लिए) चलाता है पोस्ट कर सकते हैं , और संबंधित मॉडल वर्ग। इसे देखने से, ऐसा लगता है कि समस्या आपके डेटाबेस पुनर्स्थापन के साथ नहीं है, लेकिन आप डेटाबेस में लिखने की कोशिश कर रहे हैं। – solarissmoke

+0

@solarissmoke एक स्टैक ट्रेस और मॉडल कोड जोड़ा गया। सबसे बुनियादी बात के साथ मैं पाया क्योंकि समस्या उन सभी के साथ होती है। आशा है कि आप मदद कर सकते हैं! – taylor

उत्तर

5

मैं काफी यकीन है कि यह इसलिए है क्योंकि आप Postgres 10 से निर्यात कर रहे हैं और 9. यह पूरी तरह नाकाम रहने नहीं है, लेकिन स्कीमा परिभाषा के कुछ में आयात (इस मामले में स्वत: वृद्धि की जाती आईडी क्षेत्रों) सही तरीके से आयात नहीं किया जा रहा हूँ ।

मैं दो विकल्प के बारे में सोच सकते हैं: इस लोड करने के लिए

PGPASSWORD=mypassword pg_dump --no-acl --no-owner -h localhost -U myuser mydb > mydb.sql 

आप pg_restore का उपयोग नहीं कर सकते हैं - के बजाय आप चलाने के लिए है:

  1. एक कस्टम प्रारूप के बजाय कच्चे एसक्यूएल डंपिंग का प्रयास करें मैन्युअल रूप से psql का उपयोग कर क्वेरी। इस तरह कुछ काम करना चाहिए:

    heroku pg:psql < mydb.sql 
    

    यहां चेतावनी यह है कि आपको पहले मौजूदा डेटाबेस को खाली करने की आवश्यकता है।

  2. यदि यह भी विफल रहता है तो आपको पोस्टग्रेज़ के उसी बड़े संस्करण से निर्यात करने की आवश्यकता है जिसे आप आयात करना चाहते हैं।

3

कुंजी त्रुटि यह है:

I'm using Version 10.0 Postgres locally and Heroku Datastore is 9.6.5

होने की प्रतीक्षा कर रहा एक समस्या है यही कारण है कि। मैं दोनों पर एक ही संस्करण का उपयोग करने की कोशिश करता हूं। कम से कम एक ही प्रमुख संस्करण।

इन दोनों के साथ विशेष रूप से मानक-एसक्यूएल IDENTITY columns in Postgres 10 का परिचय है, जो मुख्य रूप से सीरियल कॉलम को प्रतिस्थापित करने के लिए हैं। आपने टेबल परिभाषाओं का खुलासा नहीं किया है, इसलिए मैं केवल अनुमान लगा सकता हूं। पोस्टग्रेस 10 में IDENTITY सुविधा पोस्टग्रेस 9.6 पर वापस अनुवाद नहीं करेगी, जो आपके त्रुटि संदेशों में उल्लंघन करने वाले नल मानों को बहुत अच्छी तरह से समझा सकती है।

संबंधित:

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