Просмотр исходного кода

PostgreSQL: make commitNewEntries resilient to duplicate keys (#9231)

* PostgreSQL: make commitNewEntries resilient to duplicate keys

Use ON CONFLICT DO NOTHING

References #1610 #1614

* Minimize diff

* Minimize diff 2

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Ali Gündoğar 1 неделя назад
Родитель
Сommit
a9a5856d0d
1 измененных файлов с 2 добавлено и 5 удалено
  1. 2 5
      app/Models/EntryDAOPGSQL.php

+ 2 - 5
app/Models/EntryDAOPGSQL.php

@@ -84,7 +84,6 @@ class FreshRSS_EntryDAOPGSQL extends FreshRSS_EntryDAOSQLite {
 
 	#[\Override]
 	public function commitNewEntries(): bool {
-		//TODO: Update to PostgreSQL 9.5+ syntax with ON CONFLICT DO NOTHING
 		$sql = <<<'SQL'
 			DO $$
 			DECLARE
@@ -96,10 +95,8 @@ class FreshRSS_EntryDAOPGSQL extends FreshRSS_EntryDAOSQLite {
 					(SELECT rank + row_number() OVER(ORDER BY etmp.date, etmp.id) AS id, guid, title, author, content,
 						link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags, attributes
 						FROM `_entrytmp` AS etmp
-						WHERE NOT EXISTS (
-							SELECT 1 FROM `_entry` AS ereal
-							WHERE (etmp.id = ereal.id) OR (etmp.id_feed = ereal.id_feed AND etmp.guid = ereal.guid))
-						ORDER BY etmp.date, etmp.id);
+						ORDER BY etmp.date, etmp.id)
+					ON CONFLICT DO NOTHING;
 				DELETE FROM `_entrytmp` WHERE id <= maxrank;
 			END $$;
 			SQL;