OK, đã tìm thấy câu trả lời. Rõ ràng, tôi cần phải thoát khỏi phản ứng dữ dội khi thay thế. Ngoài ra, tôi cần E
-prefix và dấu gạch chéo ngược kép thoát trong mẫu tìm kiếm trên các phiên bản cũ hơn của postgres (trong trường hợp của tôi là 8.3). Mã cuối cùng trông như thế này:
regexp_replace('abc [def]', E'([\\[\\]\\(\\)\\\\\?\\|_%])', E'\\\\\\1', 'g')
Vâng, nó trông kinh khủng, nhưng nó hoạt động :)