summaryrefslogtreecommitdiffstats
path: root/doc/src/sgml/keywords.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/keywords.sgml')
-rw-r--r--doc/src/sgml/keywords.sgml90
1 files changed, 90 insertions, 0 deletions
diff --git a/doc/src/sgml/keywords.sgml b/doc/src/sgml/keywords.sgml
new file mode 100644
index 0000000..a7bf30c
--- /dev/null
+++ b/doc/src/sgml/keywords.sgml
@@ -0,0 +1,90 @@
+<!-- doc/src/sgml/keywords.sgml -->
+
+<appendix id="sql-keywords-appendix">
+ <title><acronym>SQL</acronym> Key Words</title>
+
+ <indexterm zone="sql-keywords-appendix">
+ <primary>key word</primary>
+ <secondary>list of</secondary>
+ </indexterm>
+
+ <para>
+ <xref linkend="keywords-table"/> lists all tokens that are key words
+ in the SQL standard and in <productname>PostgreSQL</productname>
+ &version;. Background information can be found in <xref
+ linkend="sql-syntax-identifiers"/>.
+ (For space reasons, only the latest two versions of the SQL standard, and
+ SQL-92 for historical comparison, are included. The differences between
+ those and the other intermediate standard versions are small.)
+ </para>
+
+ <para>
+ SQL distinguishes between <firstterm>reserved</firstterm> and
+ <firstterm>non-reserved</firstterm> key words. According to the standard,
+ reserved key words
+ are the only real key words; they are never allowed as identifiers.
+ Non-reserved key words only have a special meaning in particular
+ contexts and can be used as identifiers in other contexts. Most
+ non-reserved key words are actually the names of built-in tables
+ and functions specified by SQL. The concept of non-reserved key
+ words essentially only exists to declare that some predefined meaning
+ is attached to a word in some contexts.
+ </para>
+
+ <para>
+ In the <productname>PostgreSQL</productname> parser, life is a bit
+ more complicated. There are several different classes of tokens
+ ranging from those that can never be used as an identifier to those
+ that have absolutely no special status in the parser, but are considered
+ ordinary identifiers. (The latter is usually the case for
+ functions specified by SQL.) Even reserved key words are not
+ completely reserved in <productname>PostgreSQL</productname>, but
+ can be used as column labels (for example, <literal>SELECT 55 AS
+ CHECK</literal>, even though <token>CHECK</token> is a reserved key
+ word).
+ </para>
+
+ <para>
+ In <xref linkend="keywords-table"/> in the column for
+ <productname>PostgreSQL</productname> we classify as
+ <quote>non-reserved</quote> those key words that are explicitly
+ known to the parser but are allowed as column or table names.
+ Some key words that are otherwise
+ non-reserved cannot be used as function or data type names and are
+ marked accordingly. (Most of these words represent built-in
+ functions or data types with special syntax. The function or type
+ is still available but it cannot be redefined by the user.) Labeled
+ <quote>reserved</quote> are those tokens that are not allowed as
+ column or table names. Some reserved key words are
+ allowable as names for functions or data types; this is also shown in the
+ table. If not so marked, a reserved key word is only allowed as a
+ column label.
+ A blank entry in this column means that the word is treated as an
+ ordinary identifier by <productname>PostgreSQL</productname>.
+ </para>
+
+ <para>
+ Furthermore, while most key words can be used as <quote>bare</quote>
+ column labels without writing <literal>AS</literal> before them (as
+ described in <xref linkend="queries-column-labels"/>), there are a few
+ that require a leading <literal>AS</literal> to avoid ambiguity. These
+ are marked in the table as <quote>requires <literal>AS</literal></quote>.
+ </para>
+
+ <para>
+ As a general rule, if you get spurious parser errors for commands
+ that use any of the listed key words as an identifier, you should
+ try quoting the identifier to see if the problem goes away.
+ </para>
+
+ <para>
+ It is important to understand before studying <xref
+ linkend="keywords-table"/> that the fact that a key word is not
+ reserved in <productname>PostgreSQL</productname> does not mean that
+ the feature related to the word is not implemented. Conversely, the
+ presence of a key word does not indicate the existence of a feature.
+ </para>
+
+ &keywords-table;
+
+</appendix>