CREATE LANGUAGE
  SQL - Language Statements
 
 
  CREATE LANGUAGE
  define a new procedural language
 
 
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE langname
    HANDLER call_handler
 
 
  Description
  
   Using CREATE LANGUAGE, a
   PostgreSQL user can register a new
   procedural language with a PostgreSQL
   database.  Subsequently, functions and trigger procedures can be
   defined in this new language.  The user must have the
   PostgreSQL superuser privilege to
   register a new language.
  
  
   CREATE LANGUAGE effectively associates the
   language name with a call handler that is responsible for executing
   functions written in the language.  Refer to the
   Programmer's Guide for more information
   about language call handlers.
  
  
   Note that procedural languages are local to individual databases.
   To make a language available in all databases by default, it should
   be installed into the template1 database.
  
 
 
  Parameters
   
    
     TRUSTED
     
      
       TRUSTED specifies that the call handler for
       the language is safe, that is, it does not offer an
       unprivileged user any functionality to bypass access
       restrictions. If this keyword is omitted when registering the
       language, only users with the
       PostgreSQL superuser privilege can
       use this language to create new functions.
      
     
    
    
     PROCEDURAL
     
      
       This is a noise word.
      
     
    
    
     langname
     
      
       The name of the new procedural language.  The language name is
       case insensitive. A procedural language cannot override one of
       the built-in languages of PostgreSQL.
      
      
       For backward compatibility, the name may be enclosed by single
       quotes.
      
     
    
    
     HANDLER call_handler
     
      
       call_handler is
       the name of a previously registered function that will be
       called to execute the procedural language functions.  The call
       handler for a procedural language must be written in a compiled
       language such as C with version 1 call convention and
       registered with PostgreSQL as a
       function taking no arguments and returning the
       opaque type, a placeholder for unspecified or
       undefined types.
      
     
    
   
 
 
  Diagnostics
  
   
    
     
      
CREATE
      
     
    
 
    
     
      This message is returned if the language is successfully
      created.
     
    
   
   
    
     
      
ERROR:  PL handler function funcname() doesn't exist
      
     
    
    
     
      This error is returned if the function funcname() is not found.
     
    
   
  
 
 
  Notes
  
   This command normally should not be executed directly by users.
   For the procedural languages supplied in the
   PostgreSQL distribution, the  script should be used, which will also
   install the correct call handler.  (createlang
   will call CREATE LANGUAGE internally.)
  
  
   Use the  command to create a new
   function.
  
  
   Use , or better yet the  script, to drop procedural languages.
  
  
   The system catalog pg_language records
   information about the currently installed procedural languages.
        Table "pg_language"
   Attribute   |  Type   | Modifier
---------------+---------+----------
 lanname       | name    |
 lanispl       | boolean |
 lanpltrusted  | boolean |
 lanplcallfoid | oid     |
 lancompiler   | text    |
   lanname   | lanispl | lanpltrusted | lanplcallfoid | lancompiler
-------------+---------+--------------+---------------+-------------
 internal    | f       | f            |             0 | n/a
 c           | f       | f            |             0 | /bin/cc
 sql         | f       | t            |             0 | postgres
  
  
   At present, the definition of a procedural language cannot be
   changed once it has been created.
  
  
   To be able to use a procedural language, a user must be granted the
   USAGE privilege.  The
   createlang program automatically grants
   permissions to everyone if the language is known to be trusted.
  
 
 
  Examples
  
   The following two commands executed in sequence will register a new
   procedural language and the associated call handler.
CREATE FUNCTION plsample_call_handler () RETURNS opaque
    AS '$libdir/plsample'
    LANGUAGE C;
CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;
  
 
 
  Compatibility
  
   CREATE LANGUAGE is a
   PostgreSQL extension.
  
 
 
  History
  
   The CREATE LANGUAGE command first appeared in
   PostgreSQL 6.3.
  
 
 
  See Also
  
   
    
    
    
    
    
    
    PostgreSQL Programmer's Guide