<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cccms/config/initializers/ensure_search_vector_trigger.rb, branch master</title>
<subtitle>[no description]</subtitle>
<id>https://erdgeist.org/gitweb/cccms/atom?h=master</id>
<link rel='self' href='https://erdgeist.org/gitweb/cccms/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/'/>
<updated>2026-07-11T21:41:29Z</updated>
<entry>
<title>Make page_translations' search trigger self-installing</title>
<updated>2026-07-11T21:41:29Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-11T21:41:29Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=47beb3fe6ed6fdb75c2dd3a55362ad1aba3bbc3b'/>
<id>urn:sha1:47beb3fe6ed6fdb75c2dd3a55362ad1aba3bbc3b</id>
<content type='text'>
search_vector is populated by a raw Postgres trigger created via
execute() in a migration -- invisible to schema.rb, which only
represents structure Rails understands. Any database rebuilt from
schema.rb rather than replayed migrations (test, a fresh db:setup,
disaster recovery) silently lost full-text search entirely, with no
error -- NULL @@ anything is never true in Postgres.

Page.ensure_search_vector_trigger!, called from an after_initialize
initializer, reinstalls the trigger via CREATE OR REPLACE on every
boot, in every environment. Idempotent and cheap.
</content>
</entry>
</feed>
