I wrote:
> Comparing the precedence list in the grammar with the doc table,
> the only omissions I feel bad about are AT and COLLATE.
Concretely, as attached.
regards, tom lane
diff --git a/doc/src/sgml/syntax.sgml b/doc/src/sgml/syntax.sgml
index 37817d0638..4dfbbd0862 100644
--- a/doc/src/sgml/syntax.sgml
+++ b/doc/src/sgml/syntax.sgml
@@ -1065,6 +1065,18 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
<entry>unary plus, unary minus</entry>
</row>
+ <row>
+ <entry><token>COLLATE</token></entry>
+ <entry>left</entry>
+ <entry>collation selection</entry>
+ </row>
+
+ <row>
+ <entry><token>AT</token></entry>
+ <entry>left</entry>
+ <entry><literal>AT TIME ZONE</literal>, <literal>AT LOCAL</literal></entry>
+ </row>
+
<row>
<entry><token>^</token></entry>
<entry>left</entry>
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index c224df4ecc..8c00b119ec 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -858,7 +858,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%left '*' '/' '%'
%left '^'
/* Unary Operators */
-%left AT /* sets precedence for AT TIME ZONE */
+%left AT /* sets precedence for AT TIME ZONE, AT LOCAL */
%left COLLATE
%right UMINUS
%left '[' ']'