Section 4 - SQL Commands (COMMANDS)
General Information
       The  following  is  a description of the general syntax of
       SQL.  Individual SQL statements and commands  are  treated
       separately  in  the  document;  this section describes the
       syntactic classes from which the constituent parts of  SQL
       statements are drawn.

       A comment is an arbitrary sequence of characters following
       double dashes up to the end of the line.  We also  support
       double-slashes as comments, e.g.:
       -- This is a standard SQL comment
       // And this is another supported comment style, like C++

       We also support C-style comments, e.g.:
       /* multi
          comment */

       Names  in  SQL  are  sequences  of  less  than NAMEDATALEN
       alphanumeric characters, starting with an alphabetic char-
       acter.   By  default, NAMEDATALEN is set to 32, but at the
       time the system is built, NAMEDATALEN can  be  changed  by
       changing  the  #ifdef  in  src/backend/include/postgres.h.
       Underscore ("_") is considered an alphabetic character.

       The following identifiers are reserved for use as keywords
       and may not be used otherwise:

       In  addition, all Postgres classes have several predefined
       attributes used by the system.

       There are six types of constants for use in SQL.  They are
       described below.

String Constants
       Strings in SQL are arbitrary sequences of ASCII characters
       bounded by single  quotes  ('  ').  Uppercase  alphabetics
       within strings are accepted literally.  Non-printing char-
       acters may be embedded within strings by  prepending  them
       with  a  backslash,  e.g.,  `\n'.  Also, in order to embed
       quotes within strings, it is necessary to prefix them with
       `\' .  The same convention applies to `\' itself.  Because
       of the limitations on instance sizes, string constants are
       currently  limited  to a length of a little less than 8192
       bytes.  Larger objects may be created using  the  Postgres
       Large Object interface.

Integer Constants
       Integer  constants  in  SQL are collection of ASCII digits
       with  no  decimal  point.    Legal   values   range   from
       -2147483647  to  +2147483647.  This will vary depending on
       the operating system and host machine.

Floating Point Constants
       Floating point constants consist of  an  integer  part,  a
       decimal  point, and a fraction part or scientific notation
       of the following format:
       {<dig>} .{<dig>} [e [+-] {<dig>}]
       Where <dig> is a digit.  You must  include  at  least  one
       <dig> after the period and after the [+-] if you use those
       options.  An exponent with a missing mantissa has  a  man-
       tissa  of  1  inserted.   There may be no extra characters
       embedded in the string.  Floating point constaints are  of
       type float4.

Constants of Postgres User-Defined Types
       A  constant  of an arbitrary type can be entered using the
       CAST 'string' AS type-name
       The value inside the string is passed to the input conver-
       sion  routine for the type called type-name. The result is
       a constant of the indicated type.  The  explicit  typecast
       may be omitted if there is no ambiguity as to the type the
       constant must  be,  in  which  case  it  is  automatically

Array constants
       Array constants are arrays of any Postgres type, including
       other arrays, string constants, etc.  The  general  format
       of an array constant is the following:
       Where  <delim> is the delimiter for the type stored in the
       "pg_type" class.  (For built-in types, this is  the  comma
       character, ",".)  An example of an array constant is
       This  constant is a two-dimensional, 3 by 3 array consist-
       ing of three sub-arrays of integers.

       Individual array elements can and should be placed between
       quotation marks whenever possible to avoid ambiguity prob-
       lems with respect to leading white space.

       A field is either an attribute of a given class or one  of
       the following:

       Oid  stands for the unique identifier of an instance which
       is added by Postgres to all instances automatically.  Oids
       are not reused and are 32 bit quantities.

       Xmin, cmin, xmax and cmax stand respectively for the iden-
       tity of the inserting transaction, the command  identifier
       within  the  transaction,  the  identity  of  the deleting
       transaction and its associated deleting command.  For fur-
       ther  information on these fields consult [STON87].  Times
       are represented internally as instances of  the  "abstime"
       data type.  Transaction and command identifiers are 32 bit
       quantities.  Transactions are assigned sequentially start-
       ing at 512.

       A column is a construct of the form:
       Instance-variable{.composite_field}.field `['number`]'
       Instance-variable identifies a particular class and can be
       thought of as standing for the instances  of  that  class.
       An  instance  variable is either a class name, a surrogate
       for a class defined by means of a from clause, or the key-
       word  new  or current.  New and current can only appear in
       the action portion of a rule, while other  instance  vari-
       ables  can  be used in any SQL statement.  Composite_field
       is a field of of one of the Postgres composite types indi-
       cated  in  the pgbuiltin(l) section, while successive com-
       posite fields address attributes in the class(s) to  which
       the  composite field evaluates.  Lastly, field is a normal
       (base type) field in  the  class(s)  last  addressed.   If
       field  is of type array, then the optional number designa-
       tor indicates a specific element in the array.  If no num-
       ber is indicated, then all array elements are returned.

       Any  built-in system, or user-defined operator may be used
       in SQL.  For the list of  built-in  and  system  operators
       consult  pgbuiltin(3).   For a list of user-defined opera-
       tors consult your system administrator or run a  query  on
       the  pg_operator class.  Parentheses may be used for arbi-
       trary grouping of operators.

Expressions (a_expr)
       An expression is one of the following:
       ( a_expr )
       a_expr binary_operator a_expr
       a_expr right_unary_operator
       left_unary_operator a_expr
       functional expressions
       aggregate expressions
       We have already discussed constants and  attributes.   The
       two  kinds  of  operator expressions indicate respectively
       binary and left_unary expressions.  The following sections
       discuss the remaining options.

       A parameter is used to indicate a parameter in a SQL func-
       tion.  Typically this is used in SQL  function  definition
       statement.  The form of a parameter is:
       '$' number
       For  example, consider the definition of a function, DEPT,
       create function DEPT (name)
            returns dept
            as 'select * from
                dept where name=$1'
            language 'sql'

Functional Expressions
       A functional expression is the name of a legal  SQL  func-
       tion,  followed by its argument list enclosed in parenthe-
       ses, e.g.:
       fn-name (a_expr{ , a_expr})
       For example, the following computes the square root of  an
       employee salary.

Aggregate Expression
       An  aggregate  expression  represents  a  simple aggregate
       (i.e., one that computes a single value) or  an  aggregate
       function  (i.e.,  one that computes a set of values).  The
       syntax is the following: (attribute)
       Here, aggregate_name must be a previously  defined  aggre-

       A  target list is a parenthesized, comma-separated list of
       one or more elements, each of which must be of the form:
       a_expr[AS result_attname]
       Here, result_attname is the name of the  attribute  to  be
       created (or an already existing attribute name in the case
       of update statements.)  If result_attname is not  present,
       then  a_expr must contain only one attribute name which is
       assumed to be the name of the result field.   In  Postgres
       default naming is only used if a_expr is an attribute.

       A  qualification  consists  of  any number of clauses con-
       nected by the logical operators:
       A clause is an a_expr that evaluates to a Boolean  over  a
       set of instances.

From List
       The  from  list  is a comma-separated list of from expres-

       Each from expression is of the form:
       [class_reference] instance_variable
            {, [class_ref] instance_variable...}
       where class_reference is of the form
       class_name [*]
       The from expression defines one or more instance variables
       to range over the class indicated in class_reference.  One
       can also request the instance variable to range  over  all
       classes that are beneath the indicated class in the inher-
       itance hierarchy by postpending the designator "*".

       insert(l), delete(l),  execute(l),  update(l),  select(l),

PostgreSQL                   11/5/95                            1