Nicht erkannter Fehlertyp (ActiveRecord::StatementInvalid: PG::ProgramLimitExceeded

Ein Benutzer auf unserem Self-Hosted Discourse hat gerade beim Senden einer E-Mail Folgendes ausgelöst:

Nachricht

Unbekannter Fehlertyp (ActiveRecord::StatementInvalid: PG::ProgramLimitExceeded: ERROR:  Indexzeilengröße 2904 überschreitet btree-Version 4 Maximum 2704 für Index „index_incoming_emails_on_error“
DETAIL:  Indexzeile verweist auf Tupel (1,9) in Relation „incoming_emails“.
HINT:  Werte, die größer als 1/3 einer Pufferseite sind, können nicht indiziert werden.
Erwägen Sie einen Funktionsindex eines MD5-Hashs des Werts oder die Verwendung von Volltextindizierung.
) bei der Verarbeitung eingehender E-Mails

Backtrace:
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:69:in `exec_params'
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:69:in `exec_params'
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql_adapter.rb:672:in `block (2 levels) in exec_no_cache'
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql_adapter.rb:671:in `block in exec_no_cache'
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract_adapter.rb:696:in `block (2 levels) in log'
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
  /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
  /var/www/discourse/...

Backtrace

/var/www/discourse/lib/email/processor.rb:91:in `handle_failure'
/var/www/discourse/lib/email/processor.rb:28:in `rescue in process!'
/var/www/discourse/lib/email/processor.rb:17:in `process!'
/var/www/discourse/lib/email/processor.rb:14:in `process!'
/var/www/discourse/app/jobs/scheduled/poll_mailbox.rb:23:in `process_popmail'
/var/www/discourse/app/jobs/scheduled/poll_mailbox.rb:43:in `block (2 levels) in poll_pop3'
/usr/local/lib/ruby/2.7.0/net/pop.rb:667:in `each'
/usr/local/lib/ruby/2.7.0/net/pop.rb:667:in `each_mail'
/var/www/discourse/app/jobs/scheduled/poll_mailbox.rb:40:in `block in poll_pop3'
/usr/local/lib/ruby/2.7.0/net/pop.rb:532:in `start'

application_version 6e4af0e36f8bec32d77bdb3c0051088efa8069e0

1 „Gefällt mir“

Sind Sie auf PG13?

Sie könnten versuchen, eine Vakuumierung und Neuindizierung durchzuführen. Ich denke, wenn Sie danach suchen, sollten Sie einige Beispiele finden, aber PostgreSQL 13 Update könnte Ihnen einige Hinweise geben.

Das bedeutet, dass eine eingehende E-Mail-Fehlermeldung zu groß für die Indizierung ist. Wir sollten einen sicheren Teilstring der ersten 100 Zeichen des Fehlers indizieren.

3 „Gefällt mir“