diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out
index 84bc0ee3817..10e23d02ed5 100644
--- a/contrib/postgres_fdw/expected/postgres_fdw.out
+++ b/contrib/postgres_fdw/expected/postgres_fdw.out
@@ -653,14 +653,6 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1; -- Op
Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = (- "C 1")))
(3 rows)
-EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE 1 = c1!; -- OpExpr(r)
- QUERY PLAN
-----------------------------------------------------------------------------------------------------------
- Foreign Scan on public.ft1 t1
- Output: c1, c2, c3, c4, c5, c6, c7, c8
- Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((1::numeric = ("C 1" !)))
-(3 rows)
-
EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------
diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql
index d452d063430..78156d10b48 100644
--- a/contrib/postgres_fdw/sql/postgres_fdw.sql
+++ b/contrib/postgres_fdw/sql/postgres_fdw.sql
@@ -307,7 +307,6 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NULL; -- Nu
EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NOT NULL; -- NullTest
EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE round(abs(c1), 0) = 1; -- FuncExpr
EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1; -- OpExpr(l)
-EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE 1 = c1!; -- OpExpr(r)
EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr
EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr
EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = (ARRAY[c1,c2,3])[1]; -- SubscriptingRef
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index e2e618791ee..d6283a35d84 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -1048,36 +1048,6 @@ repeat('Pg', 4) PgPgPgPg
-
-
- bigint !
- numeric
-
-
- Factorial
- (deprecated, use factorial() instead)
-
-
- 5 !
- 120
-
-
-
-
-
- !! bigint
- numeric
-
-
- Factorial as a prefix operator
- (deprecated, use factorial() instead)
-
-
- !! 5
- 120
-
-
-
@ numeric_type
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 06ddb1f16b4..35893599708 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -53,7 +53,6 @@
*/
/* yyyymmddN */
-/* FIXME: bump this before pushing! */
-#define CATALOG_VERSION_NO 202009031
+#define CATALOG_VERSION_NO 202009171
#endif
diff --git a/src/include/catalog/pg_operator.dat b/src/include/catalog/pg_operator.dat
index 4f8b9865eff..7cc812adda6 100644
--- a/src/include/catalog/pg_operator.dat
+++ b/src/include/catalog/pg_operator.dat
@@ -218,12 +218,6 @@
oprname => '>=', oprleft => 'xid8', oprright => 'xid8', oprresult => 'bool',
oprcom => '<=(xid8,xid8)', oprnegate => '<(xid8,xid8)', oprcode => 'xid8ge',
oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
-{ oid => '388', descr => 'deprecated, use factorial() instead',
- oprname => '!', oprkind => 'r', oprleft => 'int8', oprright => '0',
- oprresult => 'numeric', oprcode => 'numeric_fac' },
-{ oid => '389', descr => 'deprecated, use factorial() instead',
- oprname => '!!', oprkind => 'l', oprleft => '0', oprright => 'int8',
- oprresult => 'numeric', oprcode => 'numeric_fac' },
{ oid => '385', descr => 'equal',
oprname => '=', oprcanhash => 't', oprleft => 'cid', oprright => 'cid',
oprresult => 'bool', oprcom => '=(cid,cid)', oprcode => 'cideq',
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 96d7efd4270..1ae42881466 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -327,10 +327,6 @@
{ oid => '110', descr => 'I/O',
proname => 'unknownout', prorettype => 'cstring', proargtypes => 'unknown',
prosrc => 'unknownout' },
-{ oid => '111',
- descr => 'implementation of deprecated ! and !! factorial operators',
- proname => 'numeric_fac', prorettype => 'numeric', proargtypes => 'int8',
- prosrc => 'numeric_fac' },
{ oid => '115',
proname => 'box_above_eq', prorettype => 'bool', proargtypes => 'box box',
diff --git a/src/test/regress/expected/create_operator.out b/src/test/regress/expected/create_operator.out
index 54e8b791595..9e4d4e93fb7 100644
--- a/src/test/regress/expected/create_operator.out
+++ b/src/test/regress/expected/create_operator.out
@@ -16,15 +16,15 @@ CREATE OPERATOR <% (
);
CREATE OPERATOR @#@ (
rightarg = int8, -- left unary
- procedure = numeric_fac
+ procedure = factorial
);
CREATE OPERATOR #@# (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
CREATE OPERATOR #%# (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
-- Test operator created above
SELECT point '(1,2)' <% widget '(0,0,3)' AS t,
@@ -40,7 +40,7 @@ ERROR: operator does not exist: integer ######
-- => is disallowed now
CREATE OPERATOR => (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
ERROR: syntax error at or near "=>"
LINE 1: CREATE OPERATOR => (
@@ -50,7 +50,7 @@ LINE 1: CREATE OPERATOR => (
-- this is legal because ! is not allowed in sql ops
CREATE OPERATOR !=- (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
SELECT 2 !=-;
?column?
@@ -128,7 +128,7 @@ REVOKE USAGE ON SCHEMA schema_op1 FROM regress_rol_op1;
SET ROLE regress_rol_op1;
CREATE OPERATOR schema_op1.#*# (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
ERROR: permission denied for schema schema_op1
ROLLBACK;
@@ -136,7 +136,7 @@ ROLLBACK;
BEGIN TRANSACTION;
CREATE OPERATOR #*# (
leftarg = SETOF int8,
- procedure = numeric_fac
+ procedure = factorial
);
ERROR: SETOF type not allowed for operator argument
ROLLBACK;
@@ -144,7 +144,7 @@ ROLLBACK;
BEGIN TRANSACTION;
CREATE OPERATOR #*# (
rightarg = SETOF int8,
- procedure = numeric_fac
+ procedure = factorial
);
ERROR: SETOF type not allowed for operator argument
ROLLBACK;
@@ -168,13 +168,13 @@ ROLLBACK;
-- Should fail. Invalid attribute
CREATE OPERATOR #@%# (
leftarg = int8, -- right unary
- procedure = numeric_fac,
+ procedure = factorial,
invalid_att = int8
);
WARNING: operator attribute "invalid_att" not recognized
-- Should fail. At least leftarg or rightarg should be mandatorily specified
CREATE OPERATOR #@%# (
- procedure = numeric_fac
+ procedure = factorial
);
ERROR: at least one of leftarg or rightarg must be specified
-- Should fail. Procedure should be mandatorily specified
diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out
index 86940ec6838..823f3fbccf5 100644
--- a/src/test/regress/expected/numeric.out
+++ b/src/test/regress/expected/numeric.out
@@ -2972,16 +2972,10 @@ ERROR: value overflows numeric format
--
-- Tests for factorial
--
-SELECT 4!;
- ?column?
-----------
- 24
-(1 row)
-
-SELECT !!3;
- ?column?
-----------
- 6
+SELECT factorial(4);
+ factorial
+-----------
+ 24
(1 row)
SELECT factorial(15);
@@ -2990,16 +2984,14 @@ SELECT factorial(15);
1307674368000
(1 row)
-SELECT 100000!;
+SELECT factorial(100000);
ERROR: value overflows numeric format
-SELECT 0!;
- ?column?
-----------
- 1
+SELECT factorial(0);
+ factorial
+-----------
+ 1
(1 row)
-SELECT -4!;
-ERROR: factorial of a negative number is undefined
SELECT factorial(-4);
ERROR: factorial of a negative number is undefined
--
diff --git a/src/test/regress/sql/create_operator.sql b/src/test/regress/sql/create_operator.sql
index 8b6fd0bb43d..c32da8c066a 100644
--- a/src/test/regress/sql/create_operator.sql
+++ b/src/test/regress/sql/create_operator.sql
@@ -19,17 +19,17 @@ CREATE OPERATOR <% (
CREATE OPERATOR @#@ (
rightarg = int8, -- left unary
- procedure = numeric_fac
+ procedure = factorial
);
CREATE OPERATOR #@# (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
CREATE OPERATOR #%# (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
-- Test operator created above
@@ -42,7 +42,7 @@ COMMENT ON OPERATOR ###### (int4, NONE) IS 'bad right unary';
-- => is disallowed now
CREATE OPERATOR => (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
-- lexing of <=, >=, <>, != has a number of edge cases
@@ -51,7 +51,7 @@ CREATE OPERATOR => (
-- this is legal because ! is not allowed in sql ops
CREATE OPERATOR !=- (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
SELECT 2 !=-;
-- make sure lexer returns != as <> even in edge cases
@@ -85,7 +85,7 @@ REVOKE USAGE ON SCHEMA schema_op1 FROM regress_rol_op1;
SET ROLE regress_rol_op1;
CREATE OPERATOR schema_op1.#*# (
leftarg = int8, -- right unary
- procedure = numeric_fac
+ procedure = factorial
);
ROLLBACK;
@@ -94,7 +94,7 @@ ROLLBACK;
BEGIN TRANSACTION;
CREATE OPERATOR #*# (
leftarg = SETOF int8,
- procedure = numeric_fac
+ procedure = factorial
);
ROLLBACK;
@@ -103,7 +103,7 @@ ROLLBACK;
BEGIN TRANSACTION;
CREATE OPERATOR #*# (
rightarg = SETOF int8,
- procedure = numeric_fac
+ procedure = factorial
);
ROLLBACK;
@@ -129,13 +129,13 @@ ROLLBACK;
-- Should fail. Invalid attribute
CREATE OPERATOR #@%# (
leftarg = int8, -- right unary
- procedure = numeric_fac,
+ procedure = factorial,
invalid_att = int8
);
-- Should fail. At least leftarg or rightarg should be mandatorily specified
CREATE OPERATOR #@%# (
- procedure = numeric_fac
+ procedure = factorial
);
-- Should fail. Procedure should be mandatorily specified
diff --git a/src/test/regress/sql/numeric.sql b/src/test/regress/sql/numeric.sql
index febb096af23..5eac895e86e 100644
--- a/src/test/regress/sql/numeric.sql
+++ b/src/test/regress/sql/numeric.sql
@@ -1300,12 +1300,10 @@ SELECT lcm(9999 * (10::numeric)^131068 + (10::numeric^131068 - 1), 2); -- overfl
--
-- Tests for factorial
--
-SELECT 4!;
-SELECT !!3;
+SELECT factorial(4);
SELECT factorial(15);
-SELECT 100000!;
-SELECT 0!;
-SELECT -4!;
+SELECT factorial(100000);
+SELECT factorial(0);
SELECT factorial(-4);
--