Oke, menemukan jawabannya. Rupanya, saya perlu menghindari dua kali garis miring terbalik dalam penggantian. Juga, saya perlu E
-prefix dan double-escape backslash dalam pola pencarian pada versi postgres yang lebih lama (8.3 dalam kasus saya). Kode akhir terlihat seperti ini:
regexp_replace('abc [def]', E'([\\[\\]\\(\\)\\\\\?\\|_%])', E'\\\\\\1', 'g')
Ya, kelihatannya mengerikan, tetapi berhasil :)