September 24, 2026: PostgreSQL 19 Beta 4 Released!
Supported Versions: Current (18) / 17 / 16 / 15 / 14
Development Versions: 19 / devel
Unsupported versions: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
This documentation is for an unsupported version of PostgreSQL.
You may want to view the same page for the current version, or one of the other supported versions listed above instead.

Appendix B. SQL Key Words

Table B-1 lists all tokens that are key words in the SQL standard and in PostgreSQL 7.3.21. Background information can be found in Section 1.1.1.

SQL distinguishes between reserved and non-reserved 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.

In the PostgreSQL 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 as compared to an ordinary identifier. (The latter is usually the case for functions specified by SQL.) Even reserved key words are not completely reserved in PostgreSQL, but can be used as column labels (for example, SELECT 55 AS CHECK, even though CHECK is a reserved key word).

In Table B-1 in the column for PostgreSQL we classify as "non-reserved" those key words that are explicitly known to the parser but are allowed in most or all contexts where an identifier is expected. 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 "reserved" are those tokens that are only allowed as "AS" column label names (and perhaps in very few other contexts). Some reserved key words are allowable as names for functions; this is also shown in the table.

As a general rule, if you get spurious parser errors for commands that contain any of the listed key words as an identifier you should try to quote the identifier to see if the problem goes away.

It is important to understand before studying Table B-1 that the fact that a key word is not reserved in PostgreSQL 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.

Table B-1. SQL Key Words

Key Word PostgreSQL SQL 99 SQL 92
ABORT non-reserved    
ABS   non-reserved  
ABSOLUTE non-reserved reserved reserved
ACCESS non-reserved    
ACTION non-reserved reserved reserved
ADA   non-reserved non-reserved
ADD non-reserved reserved reserved
ADMIN   reserved  
AFTER non-reserved reserved  
AGGREGATE non-reserved reserved  
ALIAS   reserved  
ALL reserved reserved reserved
ALLOCATE   reserved reserved
ALTER non-reserved reserved reserved
ANALYSE reserved    
ANALYZE reserved    
AND reserved reserved reserved
ANY reserved reserved reserved
ARE   reserved reserved
ARRAY   reserved  
AS reserved reserved reserved
ASC reserved reserved reserved
ASENSITIVE   non-reserved  
ASSERTION non-reserved reserved reserved
ASSIGNMENT non-reserved non-reserved  
ASYMMETRIC   non-reserved  
AT non-reserved reserved reserved
ATOMIC   non-reserved  
AUTHORIZATION reserved (can be function) reserved reserved
AVG   non-reserved reserved
BACKWARD non-reserved    
BEFORE non-reserved reserved  
BEGIN non-reserved reserved reserved
BETWEEN reserved (can be function) non-reserved reserved
BIGINT non-reserved (cannot be function or type)    
BINARY reserved (can be function) reserved  
BIT non-reserved (cannot be function or type) reserved reserved
BITVAR   non-reserved  
BIT_LENGTH   non-reserved reserved
BLOB   reserved  
BOOLEAN non-reserved (cannot be function or type) reserved  
BOTH reserved reserved reserved
BREADTH   reserved  
BY non-reserved reserved reserved
C   non-reserved non-reserved
CACHE non-reserved    
CALL   reserved  
CALLED non-reserved non-reserved  
CARDINALITY   non-reserved  
CASCADE non-reserved reserved reserved
CASCADED   reserved reserved
CASE reserved reserved reserved
CAST reserved reserved reserved
CATALOG   reserved reserved
CATALOG_NAME   non-reserved non-reserved
CHAIN non-reserved non-reserved  
CHAR non-reserved (cannot be function or type) reserved reserved
CHARACTER non-reserved (cannot be function or type) reserved reserved
CHARACTERISTICS non-reserved    
CHARACTER_LENGTH   non-reserved reserved
CHARACTER_SET_CATALOG   non-reserved non-reserved
CHARACTER_SET_NAME   non-reserved non-reserved
CHARACTER_SET_SCHEMA   non-reserved non-reserved
CHAR_LENGTH   non-reserved reserved
CHECK reserved reserved reserved
CHECKED   non-reserved  
CHECKPOINT non-reserved    
CLASS non-reserved reserved  
CLASS_ORIGIN   non-reserved non-reserved
CLOB   reserved  
CLOSE non-reserved reserved reserved
CLUSTER non-reserved    
COALESCE non-reserved (cannot be function or type) non-reserved reserved
COBOL   non-reserved non-reserved
COLLATE reserved reserved reserved
COLLATION   reserved reserved
COLLATION_CATALOG   non-reserved non-reserved
COLLATION_NAME   non-reserved non-reserved
COLLATION_SCHEMA   non-reserved non-reserved
COLUMN reserved reserved reserved
COLUMN_NAME   non-reserved non-reserved
COMMAND_FUNCTION   non-reserved non-reserved
COMMAND_FUNCTION_CODE   non-reserved  
COMMENT non-reserved    
COMMIT non-reserved reserved reserved
COMMITTED non-reserved non-reserved non-reserved
COMPLETION   reserved  
CONDITION_NUMBER   non-reserved non-reserved
CONNECT   reserved reserved
CONNECTION   reserved reserved
CONNECTION_NAME   non-reserved non-reserved
CONSTRAINT reserved reserved reserved
CONSTRAINTS non-reserved reserved reserved
CONSTRAINT_CATALOG   non-reserved non-reserved
CONSTRAINT_NAME   non-reserved non-reserved
CONSTRAINT_SCHEMA   non-reserved non-reserved
CONSTRUCTOR   reserved  
CONTAINS   non-reserved  
CONTINUE   reserved reserved
CONVERSION non-reserved    
CONVERT non-reserved (cannot be function or type) non-reserved reserved
COPY non-reserved    
CORRESPONDING   reserved reserved
COUNT   non-reserved reserved
CREATE reserved reserved reserved
CREATEDB non-reserved    
CREATEUSER non-reserved    
CROSS reserved (can be function) reserved reserved
CUBE   reserved  
CURRENT   reserved reserved
CURRENT_DATE reserved reserved reserved
CURRENT_PATH   reserved  
CURRENT_ROLE   reserved  
CURRENT_TIME reserved reserved reserved
CURRENT_TIMESTAMP reserved reserved reserved
CURRENT_USER reserved reserved reserved
CURSOR non-reserved reserved reserved
CURSOR_NAME   non-reserved non-reserved
CYCLE non-reserved reserved  
DATA   reserved non-reserved
DATABASE non-reserved    
DATE   reserved reserved
DATETIME_INTERVAL_CODE   non-reserved non-reserved
DATETIME_INTERVAL_PRECISION   non-reserved non-reserved
DAY non-reserved reserved reserved
DEALLOCATE non-reserved reserved reserved
DEC non-reserved (cannot be function or type) reserved reserved
DECIMAL non-reserved (cannot be function or type) reserved reserved
DECLARE non-reserved reserved reserved
DEFAULT reserved reserved reserved
DEFERRABLE reserved reserved reserved
DEFERRED non-reserved reserved reserved
DEFINED   non-reserved  
DEFINER non-reserved non-reserved