Re: unaccent(text) fails depending on search_path (WAS: pg_upgrade fails saying function unaccent(text) doesn't exist) - Mailing list pgsql-general

From Tom Lane
Subject Re: unaccent(text) fails depending on search_path (WAS: pg_upgrade fails saying function unaccent(text) doesn't exist)
Date
Msg-id 12109.1536174213@sss.pgh.pa.us
Whole thread Raw
In response to unaccent(text) fails depending on search_path (WAS: pg_upgrade failssaying function unaccent(text) doesn't exist)  (Gunnlaugur Thor Briem <gunnlaugur@gmail.com>)
List pgsql-general
Gunnlaugur Thor Briem <gunnlaugur@gmail.com> writes:
> SET search_path = "$user"; SELECT public.unaccent('foo');
> SET
> ERROR:  text search dictionary "unaccent" does not exist

Meh.  I think we need the attached, or something just about like it.

It's barely possible that there's somebody out there who's relying on
setting the search path to allow choosing among multiple "unaccent"
dictionaries.  But there are way more people whose functions are
broken due to the recent search-path-tightening changes.

            regards, tom lane

diff --git a/contrib/unaccent/unaccent.c b/contrib/unaccent/unaccent.c
index 247c202..5f6ad8a 100644
*** a/contrib/unaccent/unaccent.c
--- b/contrib/unaccent/unaccent.c
***************
*** 20,25 ****
--- 20,26 ----
  #include "tsearch/ts_locale.h"
  #include "tsearch/ts_public.h"
  #include "utils/builtins.h"
+ #include "utils/lsyscache.h"
  #include "utils/regproc.h"

  PG_MODULE_MAGIC;
*************** unaccent_dict(PG_FUNCTION_ARGS)
*** 376,382 ****

      if (PG_NARGS() == 1)
      {
!         dictOid = get_ts_dict_oid(stringToQualifiedNameList("unaccent"), false);
          strArg = 0;
      }
      else
--- 377,393 ----

      if (PG_NARGS() == 1)
      {
!         /*
!          * Use the "unaccent" dictionary that is in the same schema that this
!          * function is in.
!          */
!         Oid            procnspid = get_func_namespace(fcinfo->flinfo->fn_oid);
!         char       *procnsp = get_namespace_name(procnspid);
!         List       *dictname;
!
!         dictname = list_make2(makeString(procnsp),
!                               makeString(pstrdup("unaccent")));
!         dictOid = get_ts_dict_oid(dictname, false);
          strArg = 0;
      }
      else

pgsql-general by date:

Previous
From: Michael Paquier
Date:
Subject: Re: scram-sha-256 authentication broken in FIPS mode
Next
From: Ron
Date:
Subject: Re: Max number of WAL files in pg_xlog directory for Postgres 9.2version