Document_importer bringt "duplicate key violation"

Hallo!
Ich habe paperless-ngx auf einem Raspberry PI in Anlehnung der Masterclass erstellt und lade da jetzt seit über einer Woche Dokumente aus meiner PDF-Sammlung rein.
Inzwischen sind so 7500 Dokumente zusammen gekommen.

Ich habe mir zusätzlich auf meinem Linux Mint ebenfalls paperless-ngx installiert und wollte nun hier einen Export wieder einspielen.
Dazu habe ich den Zielcontainer runtergefahren und alle Dateien in data, media und pgdata gelöscht und dann den Container wieder hochgefahren.

Beim Import bekomme ich dann aber folgende Meldungen:

$ sudo docker-compose exec webserver document_importer ../export
Checking the manifest
Database import failed
No version information present
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "django_content_type_app_label_model_76bd3d3b_uniq"
DETAIL:  Key (app_label, model)=(documents, document) already exists.


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/paperless/src/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/paperless/src/documents/management/commands/document_importer.py", line 180, in handle
    raise e
  File "/usr/src/paperless/src/documents/management/commands/document_importer.py", line 161, in handle
    call_command("loaddata", manifest_path)
  File "/usr/local/lib/python3.11/site-packages/django/core/management/__init__.py", line 194, in call_command
    return command.execute(*args, **defaults)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/core/management/commands/loaddata.py", line 102, in handle
    self.loaddata(fixture_labels)
  File "/usr/local/lib/python3.11/site-packages/django/core/management/commands/loaddata.py", line 163, in loaddata
    self.load_label(fixture_label)
  File "/usr/local/lib/python3.11/site-packages/django/core/management/commands/loaddata.py", line 253, in load_label
    if self.save_obj(obj):
       ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/core/management/commands/loaddata.py", line 209, in save_obj
    obj.save(using=self.using)
  File "/usr/local/lib/python3.11/site-packages/django/core/serializers/base.py", line 288, in save
    models.Model.save_base(self.object, using=using, raw=True, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 877, in save_base
    updated = self._save_table(
              ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 1020, in _save_table
    results = self._do_insert(
              ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 1061, in _do_insert
    return manager._insert(
           ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 1805, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1822, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
  File "/usr/local/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.IntegrityError: Problem installing fixture '/usr/src/paperless/export/manifest.json': Could not load contenttypes.ContentType(pk=11): duplicate key value violates unique constraint "django_content_type_app_label_model_76bd3d3b_uniq"
DETAIL:  Key (app_label, model)=(documents, document) already exists.

Auf beiden Rechnern habe ich die selbe Paperless-Version (2.1.2) und auch die selbe Postgress-Version 15.

Wenn ich ein Filesystem-Backup einspiele (also aller Verzeichnisse inkl. Datenbank, aber ohne config, da die Pfade etwas anders sind), funktioniert es auch auf dem Linux Mint und alle Daten scheinen da zu sein, aber das ist ja eigentlich nicht der richtige Weg.

Hat jemand von euch ne Idee, wie ich diese UniqueViolation identifizieren kann?
Ich habe im Manifest-File schon nach dem PK=11 bei contenttypes.contenttype gesucht (ist wie in der Fehlermeldung angegeben documents,document), da ist aber nichts doppelt.

Gruß
Frank

Hallo Frank,
das hatte ich vor ein paar Tagen auch, aber noch nicht wiederholt.
Ich glaube man muss ein neues, anders benanntes Verzeichnis für Paperless erstellen, in config das.yml und.env anpassen und starten. Dann sollte es mit dem Importer klappen.
Es bleiben, obwohl man die Container löscht und auch das Verzeichnis löscht und neu anlegt, dennoch irgendwelche „Leichen“ im System, die dann genau diese Fehlermeldung verusacht.
Gruß
Mario

paperless-ngx nutzt unter der Haube Django, ein Python-Framework.

Aus dem Log lese ich heraus, dass Django versucht, einen neuen Tag zu importieren, den es allerdings schon gibt.

Das ist der Fall, wenn du auch deine alte Datenbank umgezogen hast. Das macht so auch nicht viel Sinn, denn der exporter und importer macht genau das, dass er dir deine alte Datenbank in ein Zwischenformat speichert, das du dann wieder in die neue DB importieren kannst.

Wenn du nach der Masterclass vorgegangen bist, kannst du auf dem neuen Rechner einfach den Inhalt (nicht den Ordner selbst!) von pgdata löschen. Damit ist die Datenbank weg und Django baut sie selbst neu auf. Dann kannst du importieren.

Hallo Stefan,
Kurioser Weise habe ich es so gemacht und habe dennoch die Fehlermeldung bekommen.
Habe sogar das ganze Verzeichnis einmal gelöscht, alle Ordner neu erstellt, die Docker images gelöscht, nur meine config-dateien wieder in config eingefügt, und… Habe immer noch den Fehlercode bekommen. :joy::joy:
Gruß
Mario

Ich hatte tatsächlich überlesen, was im ersten Post stand:

Wenn du es auf dem Raspberry Pi bereits nach der Masterclass installiert hast, kannst du einfach den gesamten Ordner nehmen, nach Linux Mint kopieren und direkt nutzen.
Da kannst du dir den Weg über den Importer sparen.

Ja, so werde ich es wohl dann auch machen müssen, obwohl mir die Export/Import-Methode sympathischer wäre.

Das Löschen habe ich schon versucht, hat nicht funktioniert. Ich vermute ja fast, dass der beim ersten Start schon einige Objekte anlegt, die dann beim Import Probleme machen.
Ich halte das für einen Bug. Werde da wohl mal ein Issue im Github aufmachen, möchte da aber vorher auch mal direkt in die DB schauen.

Habe paperless mal ohne -d hochgefahren, dann schreibt er sogar das Statement auf den Bildschirm:

2023-12-19 08:38:50.771 UTC [81] ERROR:  duplicate key value violates unique constraint "django_content_type_app_label_model_76bd3d3b_uniq"
db_1         | 2023-12-19 08:38:50.771 UTC [81] DETAIL:  Key (app_label, model)=(documents, document) already exists.
2023-12-19 08:38:50.771 UTC [81] STATEMENT:  INSERT INTO "django_content_type" ("id", "app_label", "model") VALUES (11, 'documents', 'document') RETURNING "django_content_type"."id"

Nutzt du bei beiden Instanzen die gleiche Version?

Wenn nicht, könnte das ein Problem sein, da sich die Datenbank-Struktur gerne mit neuen Features ändert.

Ja, ist die selbe Version, sowohl paperless-ngx (2.1.2) als auch postgres (15)

Ich dachte eigentlich, für ein Backup wäre die Export/Import-Methode sinnvoller als ein kompletter Verzeichnis-Backup. Wenn aber die Gefahr besteht, dass man die Daten nicht mehr importieren kann, scheidet das definitiv aus.

Also:

  • Container runterfahren
  • Komplettes Verzeichnis in ein tgz sichern
  • Container wieder hochfahren

Beim EInspielen auf ein Zielsystem evtl den config-Ordner nicht überschreiben, falls da andere Verzeichnisse sind.
Soll mir dann auch recht sein.

Ich bedanke mich für die Tipps und bin irgendwie froh, dass ich nicht der Einzige bin, der das Problem hat.

Gruß
Frank