nextcloud / news

📰 RSS/Atom feed reader
https://apps.nextcloud.com/apps/news
GNU Affero General Public License v3.0
866 stars 185 forks source link

Database conversion errors with 'insert or update on table "oc_news_items" violates foreign key constraint "feed"' #1264

Closed Timoses closed 3 years ago

Timoses commented 3 years ago

IMPORTANT

Read and tick the following checkbox after you have created the issue or place an x inside the brackets ;)

Explain the Problem

What problem did you encounter? During database conversion an entry in table _oc_newsfeeds contains a feed id which no longer exists (probably because it has been removed previously). This leads to an unsuccessful database conversion (from SQLite to PostgreSQL).

Maybe this is an issue with the News App not cleaning up database entries after deleting a feed? There exists an issue in nextcloud as well: https://github.com/nextcloud/server/issues/26251

Steps to Reproduce

Explain what you did to encounter the issue

  1. php occ db:convert-type --port 5432 --password="mypw" pgsql nextcloud 127.0.0.1 nextcloud

System Information

Contents of nextcloud/data/nextcloud.log Is it relevant for this issue? ```json ```
Contents of Browser Error Console Read http://ggnome.com/wiki/Using_The_Browser_Error_Console if you are unsure what to put here Is it relevant for this issue? ``` Paste output here ```

The error message from the conversion tool is:

www-data@DietPi:~/html$ php occ db:convert-type --port 5432 --password="mypw" pgsql nextcloud 127.0.0.1 nextcloud
Creating schema in new database
oc_migrations
Skipping migrations table because it was already filled by running the migrations
oc_user_transfer_owner
    0 [>---------------------------]oc_activity
chunked query, 198 chunks
 197344/197344 [============================] 100%oc_appconfig
 190/190 [============================] 100%oc_storages
 4/4 [============================] 100%oc_activity_mq
    0 [>---------------------------]oc_mimetypes
 85/85 [============================] 100%oc_filecache
chunked query, 302 chunks
 301200/301200 [============================] 100%oc_group_user
 1/1 [============================] 100%oc_group_admin
    0 [>---------------------------]oc_groups
 1/1 [============================] 100%oc_preferences
 91/91 [============================] 100%oc_properties
 6/6 [============================] 100%oc_recent_contact
    0 [>---------------------------]oc_users
 2/2 [============================] 100%oc_addressbooks
 3/3 [============================] 100%oc_cards
 1/1 [============================] 100%oc_addressbookchanges
 24/24 [============================] 100%oc_calendars
 6/6 [============================] 100%oc_schedulingobjects
    0 [>---------------------------]oc_comments_read_markers
    0 [>---------------------------]oc_systemtag_object_mapping
    0 [>---------------------------]oc_calendarsubscriptions
    0 [>---------------------------]oc_calendarchanges
 159/159 [============================] 100%oc_cards_properties
 4/4 [============================] 100%oc_accounts
 2/2 [============================] 100%oc_mounts
 2/2 [============================] 100%oc_calendarobjects_props
chunked query, 5 chunks
 4436/4436 [============================] 100%oc_directlink
    0 [>---------------------------]oc_dav_shares
    0 [>---------------------------]oc_share
 1/1 [============================] 100%oc_calendar_resources
    0 [>---------------------------]oc_calendar_rooms
    0 [>---------------------------]oc_calendarobjects
 113/113 [============================] 100%oc_jobs
 864/864 [============================] 100%oc_calendar_invitations
    0 [>---------------------------]oc_bruteforce_attempts
 17/17 [============================] 100%oc_share_external
    0 [>---------------------------]oc_vcategory
    0 [>---------------------------]oc_authtoken
 68/68 [============================] 100%oc_vcategory_to_object
    0 [>---------------------------]oc_calendar_resources_md
    0 [>---------------------------]oc_systemtag
    0 [>---------------------------]oc_calendar_rooms_md
    0 [>---------------------------]oc_systemtag_group
    0 [>---------------------------]oc_dav_cal_proxy
    0 [>---------------------------]oc_file_locks
chunked query, 48 chunks
 47769/47769 [============================] 100%oc_calendar_reminders
 46/46 [============================] 100%oc_federated_reshares
    0 [>---------------------------]oc_trusted_servers
    0 [>---------------------------]oc_comments
    0 [>---------------------------]oc_twofactor_providers
 2/2 [============================] 100%oc_whats_new
 3/3 [============================] 100%oc_collres_collections
 1/1 [============================] 100%oc_collres_resources
 1/1 [============================] 100%oc_login_flow_v2
    0 [>---------------------------]oc_collres_accesscache
    0 [>---------------------------]oc_filecache_extended
 860/860 [============================] 100%oc_direct_edit
    0 [>---------------------------]oc_webauthn
    0 [>---------------------------]oc_storages_credentials
3/3 [============================] 100%oc_external_mounts
 1/1 [============================] 100%oc_external_applicable
 1/1 [============================] 100%oc_external_config
 1/1 [============================] 100%oc_external_options
 6/6 [============================] 100%oc_files_trash
 34/34 [============================] 100%oc_maps_favorites
 12/12 [============================] 100%oc_maps_apikeys
    0 [>---------------------------]oc_maps_photos
    0 [>---------------------------]oc_maps_tracks
    0 [>---------------------------]oc_maps_devices
    0 [>---------------------------]oc_maps_device_points
    0 [>---------------------------]oc_maps_favorite_shares
    0 [>---------------------------]oc_maps_address_geo
    0 [>---------------------------]oc_music_artists
chunked query, 2 chunks
 1417/1417 [============================] 100%oc_music_albums
chunked query, 2 chunks
 1603/1603 [============================] 100%oc_music_tracks
chunked query, 6 chunks
 5218/5218 [============================] 100%oc_music_playlists
 4/4 [============================] 100%oc_music_genres
 157/157 [============================] 100%oc_music_radio_stations
    0 [>---------------------------]oc_music_ampache_sessions
    0 [>---------------------------]oc_music_ampache_users
 3/3 [============================] 100%oc_music_cache
 160/160 [============================] 100%oc_music_bookmarks
    0 [>---------------------------]oc_news_folders
 4/4 [============================] 100%oc_news_feeds
 11/11 [============================] 100%oc_news_items
 555/648 [=======================>----]  85%
In AbstractPostgreSQLDriver.php line 48:

  An exception occurred while executing 'INSERT INTO "oc_news_items" ("id", "feed_id", "guid_hash", "fingerprint", "c
  ontent_hash", "rtl", "search_index", "guid", "url", "title", "author", "body", "enclosure_mime", "enclosure_link",
  "media_thumbnail", "media_description", "unread", "starred", "pub_date", "last_modified") VALUES(?, ?, ?, ?, ?, ?,
  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["569", "12", "56f9b041f8adb3d8fff0c3eaa69a8e6a", "e16ff404c
  2b99445047d38bed666211f", "8aa151e426ea1306c0744c9c8a5e4dde", "0", "\n\t\tvon jonas labrenz\nheidelberg. keine zwei
   wochen war justus p. (name ge\u00e4ndert) aus dem gef\u00e4ngnis entlassen, schon schlug der 23-j\u00e4hrige erneu
  t zu. nach einer zweij\u00e4hrigen jugendstrafe brach er in eine schule ein und stahl geld und wertsachen. das ist
  allerdings nur einer der zehn anklagepunkte, f\u00fcr die er sich am dienstag vor dem amtsgericht verantworten muss
  te. was der staatsanwalt im stakkato vortrug, klang wie das abc des strafgesetzbuchs: bedrohung, beleidigung, compu
  terbetrug, diebstahl mit waffen, f\u00fchren einer waffe, gef\u00e4hrliche k\u00f6rperverletzung, n\u00f6tigung, sa
  chbesch\u00e4digung. es ist fast ein anklagepunkt pro monat in freiheit: im juni 2019 wurde er aus dem gef\u00e4ngn
  is entlassen, im juli 2020 kam er wieder hinein \u2013 in untersuchungshaft. und justus p. muss dort bleiben: richt
  erin walburga englert-biedert verurteilte ihn zu einer haftstrafe von drei jahren.\nes war eine beweisaufnahme im s
  chweinsgalopp: nachdem p.\u2019s verteidiger bereits angek\u00fcndigt hatte, dass sein mandant sich hinsichtlich si
  eben von zehn anklagepunkten gest\u00e4ndig zeigen w\u00fcrde, mussten nur wenige zeugen vernommen werden. zu seine
  n pers\u00f6nlichen verh\u00e4ltnissen sagte der angeklagte nichts. nur so viel wurde w\u00e4hrend des prozesses kl
  ar: justus p. hat viel drogenerfahrung: \"sie haben also alles getan, um sich die birne wegzukoksen \u2013 das ist
  ihre einlassung\", fasste richterin englert-biedert zusammen. zu seinem vater, bei dem er kurze zeit nach der hafte
  ntlassung gewohnt hatte, hat justus p. kaum noch kontakt, zu seinen beiden geschwistern \u00fcberhaupt keinen mehr.
   von der mutter war nur die rede, als es um die \u00e4nderung seines nachnamens ging.\nbesonders ins gewicht fiel b
  ei den verh\u00e4ngten strafen der einbruch in die schule. hier hatte justus p. n\u00e4mlich ein cuttermesser dabei
  . \"das ist eine hohe abstrakte gef\u00e4hrdung\", so richterin englert-biedert. \"man kann nie wissen, ob da noch
  der hausmeister um die ecke kommt oder ein lehrer etwas vergessen hat.\" deshalb habe der gesetzgeber hier auch ein
  en grund zur strafversch\u00e4rfung vorgesehen. \nbei den k\u00f6rperverletzungsdelikten habe justus p. au\u00dferd
  em unter beweis gestellt, dass er sich auch unbekannten gegen\u00fcber nicht im griff habe. einmal schlug er einen
  jungen mann, mit dem er einen gemeinsamen bekannten hat. dann schlug er zu, nachdem er ein handy geklaut hatte und
  nochmals bei einer anderen gelegenheit. \"was treibt sie dazu?\", fragte englert-biedert. \"da kann man nur sagen:
  geht\u2019s noch?\"\nauch seine damalige freundin hat justus p. geschlagen, als er vermutete, sie w\u00fcrde fremdg
  ehen. dar\u00fcber hinaus hat er ihr ihre ec-karte genommen und ohne ihr einverst\u00e4ndnis 350 euro abgehoben. ir
  gendwann schickte er ihr sogar ein video von sich, in dem er mit einem butterfly-messer hantiert und ihr droht, sie
   umzubringen. \nauch mit der polizei geriet justus p. aneinander. als die beamten ihn festnahmen, drohte er ihnen e
  benfalls, sie umzubringen, und beleidigte sie. \"wir kriegen viel kritik daf\u00fcr, dass wir damit zu lasch umgehe
  n w\u00fcrden\", sagte richterin englert-biedert. es schlage sich in der statistik nieder, dass den beamten heute w
  eniger respekt entgegengebracht werde als fr\u00fcher. \"und das ist wieder so ein mosaiksteinchen, das sich da nah                                                                                                                   [2/1714]
  tlos einf\u00fcgt\", sagte die richterin.\nder einzige anklagepunkt, der justus p. nicht nachgewiesen werden konnte
  , war die \"abgabe von bet\u00e4ubungsmitteln an minderj\u00e4hrige\". er soll einem 16-j\u00e4hrigen einen joint g
  egeben haben, doch der k\u00fcndigte noch vor der zeugenbelehrung an: \"ich sage nichts!\" weil gegen ihn in mannhe
  im ein verfahren zu der sache l\u00e4uft, konnte er sich auf sein zeugnisverweigerungsrecht berufen \u2013 was engl
  ert-biedert ihm erst einmal in ruhe erkl\u00e4rte. schon zuvor hatte ein anderer zeuge aus dem gleichen grund nicht
   ausgesagt. zwei weitere \u2013 einer von ihnen unentschuldigt \u2013 waren gar nicht erst aufgetaucht.\nenglert-bi
  edert nutzte die urteilsbegr\u00fcndung noch dazu, dem angeklagten ins gewissen zu reden, er solle sich von dem sch
  \u00e4dlichen einfluss von drogen und falschen freunden freimachen. der angeklagte jedenfalls verzichtete danach au
  f rechtsmittel und nahm das urteil an.\n\t\t\n\t\tprozess am amtsgericht:  zehn straftaten in nur einem jahr\n\t\th
  ttps:\/\/www.rnz.de\/nachrichten\/heidelberg_artikel,-prozess-am-amtsgericht-zehn-straftaten-in-nur-einem-jahr-_ari
  d,596239.html", "https:\/\/www.rnz.de\/nachrichten\/heidelberg_artikel,-prozess-am-amtsgericht-zehn-straftaten-in-n
  ur-einem-jahr-_arid,596239.html", "https:\/\/www.rnz.de\/nachrichten\/heidelberg_artikel,-prozess-am-amtsgericht-ze
  hn-straftaten-in-nur-einem-jahr-_arid,596239.html", "\n\t\tProzess am Amtsgericht:  Zehn Straftaten in nur einem Ja
  hr\n\t\t", null, "\n\t\t<p><span>Von Jonas Labrenz<\/span><\/p>\n<p><span>Heidelberg. Keine zwei Wochen war Justus
  P. (Name ge\u00e4ndert) aus dem Gef\u00e4ngnis entlassen, schon schlug der 23-J\u00e4hrige erneut zu. Nach einer zw
  eij\u00e4hrigen Jugendstrafe brach er in eine Schule ein und stahl Geld und Wertsachen. Das ist allerdings nur eine
  r der zehn Anklagepunkte, f\u00fcr die er sich am Dienstag vor dem Amtsgericht verantworten musste. Was der Staatsa
  nwalt im Stakkato vortrug, klang wie das ABC des Strafgesetzbuchs: Bedrohung, Beleidigung, Computerbetrug, Diebstah
  l mit Waffen, F\u00fchren einer Waffe, gef\u00e4hrliche K\u00f6rperverletzung, N\u00f6tigung, Sachbesch\u00e4digung
  . Es ist fast ein Anklagepunkt pro Monat in Freiheit: Im Juni 2019 wurde er aus dem Gef\u00e4ngnis entlassen, im Ju
  li 2020 kam er wieder hinein \u2013 in Untersuchungshaft. Und Justus P. muss dort bleiben: Richterin Walburga Engle
  rt-Biedert verurteilte ihn zu einer Haftstrafe von drei Jahren.<\/span><\/p>\n<p><span>Es war eine Beweisaufnahme i
  m Schweinsgalopp: Nachdem P.\u2019s Verteidiger bereits angek\u00fcndigt hatte, dass sein Mandant sich hinsichtlich
   sieben von zehn Anklagepunkten gest\u00e4ndig zeigen w\u00fcrde, mussten nur wenige Zeugen vernommen werden. Zu se
  inen pers\u00f6nlichen Verh\u00e4ltnissen sagte der Angeklagte nichts. Nur so viel wurde w\u00e4hrend des Prozesses
   klar: Justus P. hat viel Drogenerfahrung: \"Sie haben also alles getan, um sich die Birne wegzukoksen \u2013 das i
  st Ihre Einlassung\", fasste Richterin Englert-Biedert zusammen. Zu seinem Vater, bei dem er kurze Zeit nach der Ha
  ftentlassung gewohnt hatte, hat Justus P. kaum noch Kontakt, zu seinen beiden Geschwistern \u00fcberhaupt keinen me
  hr. Von der Mutter war nur die Rede, als es um die \u00c4nderung seines Nachnamens ging.<\/span><\/p>\n<p><span>Bes
  onders ins Gewicht fiel bei den verh\u00e4ngten Strafen der Einbruch in die Schule. Hier hatte Justus P. n\u00e4mli
  ch ein Cuttermesser dabei. \"Das ist eine hohe abstrakte Gef\u00e4hrdung\", so Richterin Englert-Biedert. \"Man kan
  n nie wissen, ob da noch der Hausmeister um die Ecke kommt oder ein Lehrer etwas vergessen hat.\" Deshalb habe der
  Gesetzgeber hier auch einen Grund zur Strafversch\u00e4rfung vorgesehen. <\/span><\/p>\n<p><span>Bei den K\u00f6rpe
  rverletzungsdelikten habe Justus P. au\u00dferdem unter Beweis gestellt, dass er sich auch Unbekannten gegen\u00fcb
  er nicht im Griff habe. Einmal schlug er einen jungen Mann, mit dem er einen gemeinsamen Bekannten hat. Dann schlug
   er zu, nachdem er ein Handy geklaut hatte und nochmals bei einer anderen Gelegenheit. \"Was treibt Sie dazu?\", fr
  agte Englert-Biedert. \"Da kann man nur sagen: Geht\u2019s noch?\"<\/span><\/p>\n<p><span>Auch seine damalige Freun
  din hat Justus P. geschlagen, als er vermutete, sie w\u00fcrde fremdgehen. Dar\u00fcber hinaus hat er ihr ihre EC-K
  arte genommen und ohne ihr Einverst\u00e4ndnis 350 Euro abgehoben. Irgendwann schickte er ihr sogar ein Video von s
  ich, in dem er mit einem Butterfly-Messer hantiert und ihr droht, sie umzubringen. <\/span><\/p>\n<p><span>Auch mit
   der Polizei geriet Justus P. aneinander. Als die Beamten ihn festnahmen, drohte er ihnen ebenfalls, sie umzubringe
  n, und beleidigte sie. \"Wir kriegen viel Kritik daf\u00fcr, dass wir damit zu lasch umgehen w\u00fcrden\", sagte R
  ichterin Englert-Biedert. Es schlage sich in der Statistik nieder, dass den Beamten heute weniger Respekt entgegeng
  ebracht werde als fr\u00fcher. \"Und das ist wieder so ein Mosaiksteinchen, das sich da nahtlos einf\u00fcgt\", sag
  te die Richterin.<\/span><\/p>\n<p><span>Der einzige Anklagepunkt, der Justus P. nicht nachgewiesen werden konnte,
  war die \"Abgabe von Bet\u00e4ubungsmitteln an Minderj\u00e4hrige\". Er soll einem 16-J\u00e4hrigen einen Joint geg
  eben haben, doch der k\u00fcndigte noch vor der Zeugenbelehrung an: \"Ich sage nichts!\" Weil gegen ihn in Mannheim
   ein Verfahren zu der Sache l\u00e4uft, konnte er sich auf sein Zeugnisverweigerungsrecht berufen \u2013 was Engler
  t-Biedert ihm erst einmal in Ruhe erkl\u00e4rte. Schon zuvor hatte ein anderer Zeuge aus dem gleichen Grund nicht a
  usgesagt. Zwei weitere \u2013 einer von ihnen unentschuldigt \u2013 waren gar nicht erst aufgetaucht.<\/span><\/p>\
  n<p><span>Englert-Biedert nutzte die Urteilsbegr\u00fcndung noch dazu, dem Angeklagten ins Gewissen zu reden, er so
  lle sich von dem sch\u00e4dlichen Einfluss von Drogen und falschen Freunden freimachen. Der Angeklagte jedenfalls v
  erzichtete danach auf Rechtsmittel und nahm das Urteil an.<\/span><\/p>\n\t\t", "image\/jpeg", "https:\/\/www.rnz.d
  e\/cms_media\/module_img\/462\/231121_1_gallerydetail_Gericht_Heidelberg_-_neutrale_BU_Alex.jpg", null, null, "0",
  "0", "1608094800", "1608237597022078"]:

  SQLSTATE[23503]: Foreign key violation: 7 ERROR:  insert or update on table "oc_news_items" violates foreign key co
  nstraint "feed"
  DETAIL:  Key (feed_id)=(12) is not present in table "oc_news_feeds".

In PDOStatement.php line 129:

  SQLSTATE[23503]: Foreign key violation: 7 ERROR:  insert or update on table "oc_news_items" violates foreign key co
  nstraint "feed"
  DETAIL:  Key (feed_id)=(12) is not present in table "oc_news_feeds".

In PDOStatement.php line 127:

  SQLSTATE[23503]: Foreign key violation: 7 ERROR:  insert or update on table "oc_news_items" violates foreign key co
  nstraint "feed"
  DETAIL:  Key (feed_id)=(12) is not present in table "oc_news_feeds".

db:convert-type [--port PORT] [--password PASSWORD] [--clear-schema] [--all-apps] [--chunk-size CHUNK-SIZE] [--] <type> <username> <hostname> <database>
Timoses commented 3 years ago

Issue in nextcloud repo was closed with (https://github.com/nextcloud/server/issues/26251): "We don't support foreign keys on database level. App should not use it."

So I'm hoping for a workaround or resolution here. Any suggestions?

SMillerDev commented 3 years ago

You can work around it by manually removing the entries, there is not much more we can offer in terms of support.

Timoses commented 3 years ago

Thanks. I took the easier route and deleted News app. The database conversion tool will by default ignore its tables then.