Skip to content

Commit a0f9358

Browse files
committed
Fix incorrect pg_proc.proallargtypes entries for two built-in functions.
pg_sequence_parameters() and pg_identify_object() have had incorrect proallargtypes entries since 9.1 and 9.3 respectively. This was mostly masked by the correct information in proargtypes, but a few operations such as pg_get_function_arguments() (and thus psql's \df display) would show the wrong data types for these functions' input parameters. In HEAD, fix the wrong info, bump catversion, and add an opr_sanity regression test to catch future mistakes of this sort. In the back branches, just fix the wrong info so that installations initdb'd with future minor releases will have the right data. We can't force an initdb, and it doesn't seem like a good idea to add a regression test that will fail on existing installations. Andres Freund
1 parent f0fedfe commit a0f9358

File tree

4 files changed

+24
-3
lines changed

4 files changed

+24
-3
lines changed

src/include/catalog/catversion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,6 @@
5353
*/
5454

5555
/* yyyymmddN */
56-
#define CATALOG_VERSION_NO 201404231
56+
#define CATALOG_VERSION_NO 201404241
5757

5858
#endif

src/include/catalog/pg_proc.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,7 +1775,7 @@ DATA(insert OID = 1576 ( setval PGNSP PGUID 12 1 0 0 0 f f f f t f v 2 0 20 "
17751775
DESCR("set sequence value");
17761776
DATA(insert OID = 1765 ( setval PGNSP PGUID 12 1 0 0 0 f f f f t f v 3 0 20 "2205 20 16" _null_ _null_ _null_ _null_ setval3_oid _null_ _null_ _null_ ));
17771777
DESCR("set sequence value and is_called status");
1778-
DATA(insert OID = 3078 ( pg_sequence_parameters PGNSP PGUID 12 1 0 0 0 f f f f t f s 1 0 2249 "26" "{23,20,20,20,20,16}" "{i,o,o,o,o,o}" "{sequence_oid,start_value,minimum_value,maximum_value,increment,cycle_option}" _null_ pg_sequence_parameters _null_ _null_ _null_));
1778+
DATA(insert OID = 3078 ( pg_sequence_parameters PGNSP PGUID 12 1 0 0 0 f f f f t f s 1 0 2249 "26" "{26,20,20,20,20,16}" "{i,o,o,o,o,o}" "{sequence_oid,start_value,minimum_value,maximum_value,increment,cycle_option}" _null_ pg_sequence_parameters _null_ _null_ _null_));
17791779
DESCR("sequence parameters, for use by information schema");
17801780

17811781
DATA(insert OID = 1579 ( varbit_in PGNSP PGUID 12 1 0 0 0 f f f f t f i 3 0 1562 "2275 26 23" _null_ _null_ _null_ _null_ varbit_in _null_ _null_ _null_ ));
@@ -2981,7 +2981,7 @@ DESCR("view members of a multixactid");
29812981
DATA(insert OID = 3537 ( pg_describe_object PGNSP PGUID 12 1 0 0 0 f f f f t f s 3 0 25 "26 26 23" _null_ _null_ _null_ _null_ pg_describe_object _null_ _null_ _null_ ));
29822982
DESCR("get identification of SQL object");
29832983

2984-
DATA(insert OID = 3839 ( pg_identify_object PGNSP PGUID 12 1 0 0 0 f f f f t f s 3 0 2249 "26 26 23" "{26,23,23,25,25,25,25}" "{i,i,i,o,o,o,o}" "{classid,objid,subobjid,type,schema,name,identity}" _null_ pg_identify_object _null_ _null_ _null_ ));
2984+
DATA(insert OID = 3839 ( pg_identify_object PGNSP PGUID 12 1 0 0 0 f f f f t f s 3 0 2249 "26 26 23" "{26,26,23,25,25,25,25}" "{i,i,i,o,o,o,o}" "{classid,objid,subobjid,type,schema,name,identity}" _null_ pg_identify_object _null_ _null_ _null_ ));
29852985
DESCR("get machine-parseable identification of SQL object");
29862986

29872987
DATA(insert OID = 2079 ( pg_table_is_visible PGNSP PGUID 12 10 0 0 0 f f f f t f s 1 0 16 "26" _null_ _null_ _null_ _null_ pg_table_is_visible _null_ _null_ _null_ ));

src/test/regress/expected/opr_sanity.out

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,18 @@ WHERE proargmodes IS NOT NULL AND proargnames IS NOT NULL AND
364364
-----+---------
365365
(0 rows)
366366

367+
-- Check that proallargtypes matches proargtypes
368+
SELECT p1.oid, p1.proname, p1.proargtypes, p1.proallargtypes, p1.proargmodes
369+
FROM pg_proc as p1
370+
WHERE proallargtypes IS NOT NULL AND
371+
ARRAY(SELECT unnest(proargtypes)) <>
372+
ARRAY(SELECT proallargtypes[i]
373+
FROM generate_series(1, array_length(proallargtypes, 1)) g(i)
374+
WHERE proargmodes IS NULL OR proargmodes[i] IN ('i', 'b', 'v'));
375+
oid | proname | proargtypes | proallargtypes | proargmodes
376+
-----+---------+-------------+----------------+-------------
377+
(0 rows)
378+
367379
-- Check for protransform functions with the wrong signature
368380
SELECT p1.oid, p1.proname, p2.oid, p2.proname
369381
FROM pg_proc AS p1, pg_proc AS p2

src/test/regress/sql/opr_sanity.sql

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,15 @@ FROM pg_proc as p1
276276
WHERE proargmodes IS NOT NULL AND proargnames IS NOT NULL AND
277277
array_length(proargmodes,1) <> array_length(proargnames,1);
278278

279+
-- Check that proallargtypes matches proargtypes
280+
SELECT p1.oid, p1.proname, p1.proargtypes, p1.proallargtypes, p1.proargmodes
281+
FROM pg_proc as p1
282+
WHERE proallargtypes IS NOT NULL AND
283+
ARRAY(SELECT unnest(proargtypes)) <>
284+
ARRAY(SELECT proallargtypes[i]
285+
FROM generate_series(1, array_length(proallargtypes, 1)) g(i)
286+
WHERE proargmodes IS NULL OR proargmodes[i] IN ('i', 'b', 'v'));
287+
279288
-- Check for protransform functions with the wrong signature
280289
SELECT p1.oid, p1.proname, p2.oid, p2.proname
281290
FROM pg_proc AS p1, pg_proc AS p2

0 commit comments

Comments
 (0)