# 인식되지 않는 오류 유형 (ActiveRecord::StatementInvalid: PG::ProgramLimitExceeded)

**URL:** <https://meta.discourse.org/t/unrecognized-error-type-activerecord-pg-programlimitexceeded/217858>\
**Category:** Bug\
**Created:** [2월 11, 2022, 8:53오전 UTC](https://meta.discourse.org/t/unrecognized-error-type-activerecord-pg-programlimitexceeded/217858 "2022-02-11T08:53:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Julien\_Palard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/julien_palard/32/198784_2.png) [@Julien\_Palard](https://meta.discourse.org/u/Julien_Palard)\
**Post date:** [2월 11, 2022, 8:53오전 UTC](https://meta.discourse.org/t/unrecognized-error-type-activerecord-pg-programlimitexceeded/217858/1 "2022-02-11T08:53:35Z")

</div>

자체 호스팅한 Discourse에서 한 사용자가 이메일을 보내는 중에 다음 오류를 발생시켰습니다:

```plaintext
Message

Unrecognized error type (ActiveRecord::StatementInvalid: PG::ProgramLimitExceeded: ERROR: index row size 2904 exceeds btree version 4 maximum 2704 for index "index_incoming_emails_on_error"
DETAIL: Index row references tuple (1,9) in relation "incoming_emails".
HINT: Values larger than 1/3 of a buffer page cannot be indexed.
Consider a function index of an MD5 hash of the value, or use full text indexing.
) when processing incoming email

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

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2월 11, 2022, 6:02오후 UTC](https://meta.discourse.org/t/unrecognized-error-type-activerecord-pg-programlimitexceeded/217858/2 "2022-02-11T18:02:16Z")

</div>

PG13을 사용하고 계신가요?

vacuum과 reindex를 시도해 보시는 것이 좋습니다. 해당 키워드로 검색하시면 몇 가지 예시를 찾을 수 있을 것으로 생각되며, [PostgreSQL 13 업데이트](https://meta.discourse.org/t/postgresql-13-update/172563)에서도 몇 가지 힌트를 얻을 수 있을 것입니다.

---

<div class="post-metadata">

**Author:** ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)\
**Post date:** [2월 11, 2022, 6:21오후 UTC](https://meta.discourse.org/t/unrecognized-error-type-activerecord-pg-programlimitexceeded/217858/3 "2022-02-11T18:21:54Z")

</div>

즉, 수신된 이메일 오류 메시지가 색인 처리하기에 너무 크다는 뜻입니다. 오류 메시지의 첫 100자 중 안전한 부분 문자열을 기준으로 색인 처리해야 합니다.
