Remove obsolete RECHECK keyword completely

This used to be part of CREATE OPERATOR CLASS and ALTER OPERATOR
FAMILY, but it has done nothing (except issue a NOTICE) since
PostgreSQL 8.4.  Commit 30e7c175b8 removed support for dumping from
pre-9.2 servers, so this no longer serves any need.

This now removes it completely, and you'd get a normal parse error if
you used it.

Reviewed-by: Aleksander Alekseev <aleksander@timescale.com>
Discussion: https://www.postgresql.org/message-id/flat/113ef2d2-3657-4353-be97-f28fceddbca1%40eisentraut.org
This commit is contained in:
Peter Eisentraut 2024-08-09 07:17:15 +02:00
parent 701cf1e317
commit 7da1bdc2c2
5 changed files with 4 additions and 41 deletions

View File

@ -273,14 +273,6 @@ ALTER OPERATOR FAMILY <replaceable>name</replaceable> USING <replaceable class="
is likely to be inlined into the calling query, which will prevent is likely to be inlined into the calling query, which will prevent
the optimizer from recognizing that the query matches an index. the optimizer from recognizing that the query matches an index.
</para> </para>
<para>
Before <productname>PostgreSQL</productname> 8.4, the <literal>OPERATOR</literal>
clause could include a <literal>RECHECK</literal> option. This is no longer
supported because whether an index operator is <quote>lossy</quote> is now
determined on-the-fly at run time. This allows efficient handling of
cases where an operator might or might not be lossy.
</para>
</refsect1> </refsect1>
<refsect1> <refsect1>

View File

@ -269,14 +269,6 @@ CREATE OPERATOR CLASS <replaceable class="parameter">name</replaceable> [ DEFAUL
is likely to be inlined into the calling query, which will prevent is likely to be inlined into the calling query, which will prevent
the optimizer from recognizing that the query matches an index. the optimizer from recognizing that the query matches an index.
</para> </para>
<para>
Before <productname>PostgreSQL</productname> 8.4, the <literal>OPERATOR</literal>
clause could include a <literal>RECHECK</literal> option. This is no longer
supported because whether an index operator is <quote>lossy</quote> is now
determined on-the-fly at run time. This allows efficient handling of
cases where an operator might or might not be lossy.
</para>
</refsect1> </refsect1>
<refsect1> <refsect1>

View File

@ -495,7 +495,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%type <boolean> opt_instead %type <boolean> opt_instead
%type <boolean> opt_unique opt_verbose opt_full %type <boolean> opt_unique opt_verbose opt_full
%type <boolean> opt_freeze opt_analyze opt_default opt_recheck %type <boolean> opt_freeze opt_analyze opt_default
%type <defelt> opt_binary copy_delimiter %type <defelt> opt_binary copy_delimiter
%type <boolean> copy_from opt_program %type <boolean> copy_from opt_program
@ -770,7 +770,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
QUOTE QUOTES QUOTE QUOTES
RANGE READ REAL REASSIGN RECHECK RECURSIVE REF_P REFERENCES REFERENCING RANGE READ REAL REASSIGN RECURSIVE REF_P REFERENCES REFERENCING
REFRESH REINDEX RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA REFRESH REINDEX RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA
RESET RESTART RESTRICT RETURN RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP RESET RESTART RESTRICT RETURN RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP
ROUTINE ROUTINES ROW ROWS RULE ROUTINE ROUTINES ROW ROWS RULE
@ -6622,7 +6622,7 @@ opclass_item_list:
; ;
opclass_item: opclass_item:
OPERATOR Iconst any_operator opclass_purpose opt_recheck OPERATOR Iconst any_operator opclass_purpose
{ {
CreateOpClassItem *n = makeNode(CreateOpClassItem); CreateOpClassItem *n = makeNode(CreateOpClassItem);
ObjectWithArgs *owa = makeNode(ObjectWithArgs); ObjectWithArgs *owa = makeNode(ObjectWithArgs);
@ -6636,7 +6636,6 @@ opclass_item:
$$ = (Node *) n; $$ = (Node *) n;
} }
| OPERATOR Iconst operator_with_argtypes opclass_purpose | OPERATOR Iconst operator_with_argtypes opclass_purpose
opt_recheck
{ {
CreateOpClassItem *n = makeNode(CreateOpClassItem); CreateOpClassItem *n = makeNode(CreateOpClassItem);
@ -6688,23 +6687,6 @@ opclass_purpose: FOR SEARCH { $$ = NIL; }
| /*EMPTY*/ { $$ = NIL; } | /*EMPTY*/ { $$ = NIL; }
; ;
opt_recheck: RECHECK
{
/*
* RECHECK no longer does anything in opclass definitions,
* but we still accept it to ease porting of old database
* dumps.
*/
ereport(NOTICE,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("RECHECK is no longer required"),
errhint("Update your data type."),
parser_errposition(@1)));
$$ = true;
}
| /*EMPTY*/ { $$ = false; }
;
CreateOpFamilyStmt: CreateOpFamilyStmt:
CREATE OPERATOR FAMILY any_name USING name CREATE OPERATOR FAMILY any_name USING name
@ -17784,7 +17766,6 @@ unreserved_keyword:
| RANGE | RANGE
| READ | READ
| REASSIGN | REASSIGN
| RECHECK
| RECURSIVE | RECURSIVE
| REF_P | REF_P
| REFERENCING | REFERENCING
@ -18414,7 +18395,6 @@ bare_label_keyword:
| READ | READ
| REAL | REAL
| REASSIGN | REASSIGN
| RECHECK
| RECURSIVE | RECURSIVE
| REF_P | REF_P
| REFERENCES | REFERENCES

View File

@ -363,7 +363,6 @@ PG_KEYWORD("range", RANGE, UNRESERVED_KEYWORD, BARE_LABEL)
PG_KEYWORD("read", READ, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("read", READ, UNRESERVED_KEYWORD, BARE_LABEL)
PG_KEYWORD("real", REAL, COL_NAME_KEYWORD, BARE_LABEL) PG_KEYWORD("real", REAL, COL_NAME_KEYWORD, BARE_LABEL)
PG_KEYWORD("reassign", REASSIGN, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("reassign", REASSIGN, UNRESERVED_KEYWORD, BARE_LABEL)
PG_KEYWORD("recheck", RECHECK, UNRESERVED_KEYWORD, BARE_LABEL)
PG_KEYWORD("recursive", RECURSIVE, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("recursive", RECURSIVE, UNRESERVED_KEYWORD, BARE_LABEL)
PG_KEYWORD("ref", REF_P, UNRESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("ref", REF_P, UNRESERVED_KEYWORD, BARE_LABEL)
PG_KEYWORD("references", REFERENCES, RESERVED_KEYWORD, BARE_LABEL) PG_KEYWORD("references", REFERENCES, RESERVED_KEYWORD, BARE_LABEL)

View File

@ -1,4 +1,4 @@
# MERGE MATCHED RECHECK # MERGE MATCHED recheck
# #
# This test looks at what happens when we have complex # This test looks at what happens when we have complex
# WHEN MATCHED AND conditions and a concurrent UPDATE causes a # WHEN MATCHED AND conditions and a concurrent UPDATE causes a