アップデート
@Tometzkyの主張によって引き起こされました:
  使用するregexp_replaceことは単にreplace(...)
私は反対しなければなりません。正規表現関数は強力ですが、比較的低速です。
したがって、イベント 3xreplace()は、単一のシンプルなイベントよりも高速ですregexp_replace()- 少なくとも私のテストでは:
CREATE OR REPLACE FUNCTION quote_like2(text)
  RETURNS text LANGUAGE SQL IMMUTABLE STRICT AS
$func$
SELECT replace(replace(replace(
         $1
        ,'\', '\\') -- must come first
        ,'_', '\_')
        ,'%', '\%');
$func$;
ドル引用符ではなく、単純な一重引用符を使用していることに注意してください。これにはstandard_conforming_strings = on、PostgreSQL 9.1 以降のデフォルトである が必要です。
データで両方の関数を試してください。
EXPLAIN ANALYZE SELECT quote_like1(col) from tbl;
元の答え
質問のタイトルに反して、通常はreplace()または同様の文字列関数を使用してパターンを準備します。次のデモを検討してください。
SELECT 'abcde' LIKE ('abc_' || '%')  -- TRUE
      ,'abc_e' LIKE ('abc_' || '%')  -- TRUE
      ,'abcde' LIKE (replace('abc_', '_', '\_')  || '%')   -- FALSE
      ,'abc_e' LIKE (replace('abc_', '_', '\_')  || '%');  -- TRUE