<symbol>NAMEDATALEN</symbol>-1
(63 by default) characters from the following list:
<literallayout>
+ - * / < > = ~ ! @ # % ^ & | ` ?
</literallayout>
There are a few restrictions on operator names, however:
<itemizedlist>
<listitem>
<para>
<literal>--</literal> and <literal>/*</literal> cannot appear
anywhere in an operator name, since they will be taken as the
start of a comment.
</para>
</listitem>
<listitem>
<para>
A multiple-character operator name cannot end in <literal>+</literal> or <literal>-</literal>,
unless the name also contains at least one of these characters:
<literallayout>
~ ! @ # % ^ & | ` ?
</literallayout>
For example, <literal>@-</literal> is an allowed operator name,
but <literal>*-</literal> is not. This restriction allows
<productname>PostgreSQL</productname> to parse SQL-compliant
queries without requiring spaces between tokens.
</para>
</listitem>
</itemizedlist>
</para>
<para>
When working with non-SQL-standard operator names, you will usually
need to separate adjacent operators with spaces to avoid ambiguity.
For example, if you have defined a prefix operator named <literal>@</literal>,
you cannot write <literal>X*@Y</literal>; you must write
<literal>X* @Y</literal> to ensure that
<productname>PostgreSQL</productname> reads it as two operator names
not one.
</para>
</sect2>
<sect2 id="sql-syntax-special-chars">
<title>Special Characters</title>
<para>
Some characters that are not alphanumeric have a special meaning
that is different from being an operator. Details on the usage can
be found at the location where the respective syntax element is
described. This section only exists to advise the existence and
summarize the purposes of these characters.
<itemizedlist>
<listitem>
<para>
A dollar sign (<literal>$</literal>) followed by digits is used
to represent a positional parameter in the body of a function
definition or a prepared statement. In other contexts the
dollar sign can be part of an identifier or a dollar-quoted string
constant.
</para>
</listitem>
<listitem>
<para>
Parentheses (<literal>()</literal>) have their usual meaning to
group expressions and enforce precedence. In some cases
parentheses are required as part of the fixed syntax of a
particular SQL command.
</para>
</listitem>
<listitem>
<para>
Brackets (<literal>[]</literal>) are used to select the elements
of an array. See <xref linkend="arrays"/> for more information
on arrays.
</para>
</listitem>
<listitem>
<para>
Commas (<literal>,</literal>) are used in some syntactical
constructs to separate the elements of a list.
</para>
</listitem>
<listitem>
<para>
The semicolon (<literal>;</literal>) terminates an SQL command.
It cannot appear anywhere within a command, except within a
string constant or quoted identifier.
</para>
</listitem>
<listitem>
<para>
The colon (<literal>:</literal>) is used to select
<quote>slices</quote> from arrays. (See <xref
linkend="arrays"/>.) In certain SQL dialects (such as Embedded
SQL), the colon is used to prefix variable names.
</para>
</listitem>
<listitem>
<para>
The asterisk (<literal>*</literal>) is used in some contexts to denote
all the fields of a table row or composite value. It also
has a special meaning when used as the argument of an
aggregate function, namely that the aggregate does not require
any explicit parameter.
</para>
</listitem>
<listitem>
<para>
The period (<literal>.</literal>) is used in numeric
constants, and to separate schema, table, and column names.
</para>