Re: [PATCHES] Warning for missing createlang - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [PATCHES] Warning for missing createlang
Date
Msg-id 200309051557.h85FvQw04854@candle.pha.pa.us
Whole thread Raw
In response to Re: [PATCHES] Warning for missing createlang  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: [PATCHES] Warning for missing createlang
List pgsql-hackers
Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
> > Bruce Momjian wrote:
> >>> HINT:  Perhaps you need to use 'createlang' to load the language into
> >>> the database, or you mistyped the language name.
>
> > Why not list out the languages we *do* know about, and tell them it's
> > not in the list? Or is that too much work?
>
> Seems like it would clutter the error message without really addressing
> Bruce's concern.  I doubt that seeing the list of available languages
> would do much to jog a newbie's memory about needing to run createlang.
>
> We could answer my objection about the hint popping out on misspelled
> language names if the code were to arrange to put out the hint only when
> the language name is one of "plpgsql", "pltcl", "pltclu", etc.  This
> would have to use a hard-coded list of loadable language names, since
> by definition looking in pg_language won't help.  It would be enough of
> a maintenance PITA that I don't especially want to do it ... but it
> would ensure that the hint is likely to be relevant.

OK, new output is:

    test=> create function xx() returns int as '
    test'> select 1'
    test-> language 'plpgsql';
    ERROR:  language "plpgsql" does not exist
    HINT:  You need to use 'createlang' to load the language into the database.
    test=> create function xx() returns int as '
    test'> select 1'
    test-> language 'XXplpgsql';
    ERROR:  language "xxplpgsql" does not exist

Patch attached.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/backend/commands/functioncmds.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/commands/functioncmds.c,v
retrieving revision 1.33
diff -c -c -r1.33 functioncmds.c
*** src/backend/commands/functioncmds.c    4 Aug 2003 02:39:58 -0000    1.33
--- src/backend/commands/functioncmds.c    5 Sep 2003 15:56:57 -0000
***************
*** 435,444 ****
                                     PointerGetDatum(languageName),
                                     0, 0, 0);
      if (!HeapTupleIsValid(languageTuple))
!         ereport(ERROR,
!                 (errcode(ERRCODE_UNDEFINED_OBJECT),
!                  errmsg("language \"%s\" does not exist", languageName)));
!
      languageOid = HeapTupleGetOid(languageTuple);
      languageStruct = (Form_pg_language) GETSTRUCT(languageTuple);

--- 435,458 ----
                                     PointerGetDatum(languageName),
                                     0, 0, 0);
      if (!HeapTupleIsValid(languageTuple))
!     {
!         /* Add any new languages to this list to invoke the hint. */
!         if (strcmp(languageName, "plperl") != 0 &&
!             strcmp(languageName, "plpgsql") != 0 &&
!             strcmp(languageName, "plpython") != 0 &&
!             strcmp(languageName, "plr") != 0 &&
!             strcmp(languageName, "plsh") != 0 &&
!             strcmp(languageName, "pltcl") != 0)
!             ereport(ERROR,
!                     (errcode(ERRCODE_UNDEFINED_OBJECT),
!                      errmsg("language \"%s\" does not exist", languageName)));
!         else
!             ereport(ERROR,
!                     (errcode(ERRCODE_UNDEFINED_OBJECT),
!                      errmsg("language \"%s\" does not exist", languageName),
!                      errhint("You need to use 'createlang' to load the language into the database.")));
!     }
!
      languageOid = HeapTupleGetOid(languageTuple);
      languageStruct = (Form_pg_language) GETSTRUCT(languageTuple);


pgsql-hackers by date:

Previous
From: Czuczy Gergely
Date:
Subject: Logging improvements and rehashing
Next
From: "scott.marlowe"
Date:
Subject: Re: Seqscan in MAX(index_column)