mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
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
This commit is contained in:
parent
f0fedfe82c
commit
a0f9358149
@ -53,6 +53,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 201404231
|
#define CATALOG_VERSION_NO 201404241
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -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 "
|
|||||||
DESCR("set sequence value");
|
DESCR("set sequence value");
|
||||||
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_ ));
|
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_ ));
|
||||||
DESCR("set sequence value and is_called status");
|
DESCR("set sequence value and is_called status");
|
||||||
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_));
|
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_));
|
||||||
DESCR("sequence parameters, for use by information schema");
|
DESCR("sequence parameters, for use by information schema");
|
||||||
|
|
||||||
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_ ));
|
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");
|
|||||||
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_ ));
|
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_ ));
|
||||||
DESCR("get identification of SQL object");
|
DESCR("get identification of SQL object");
|
||||||
|
|
||||||
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_ ));
|
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_ ));
|
||||||
DESCR("get machine-parseable identification of SQL object");
|
DESCR("get machine-parseable identification of SQL object");
|
||||||
|
|
||||||
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_ ));
|
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_ ));
|
||||||
|
@ -364,6 +364,18 @@ WHERE proargmodes IS NOT NULL AND proargnames IS NOT NULL AND
|
|||||||
-----+---------
|
-----+---------
|
||||||
(0 rows)
|
(0 rows)
|
||||||
|
|
||||||
|
-- Check that proallargtypes matches proargtypes
|
||||||
|
SELECT p1.oid, p1.proname, p1.proargtypes, p1.proallargtypes, p1.proargmodes
|
||||||
|
FROM pg_proc as p1
|
||||||
|
WHERE proallargtypes IS NOT NULL AND
|
||||||
|
ARRAY(SELECT unnest(proargtypes)) <>
|
||||||
|
ARRAY(SELECT proallargtypes[i]
|
||||||
|
FROM generate_series(1, array_length(proallargtypes, 1)) g(i)
|
||||||
|
WHERE proargmodes IS NULL OR proargmodes[i] IN ('i', 'b', 'v'));
|
||||||
|
oid | proname | proargtypes | proallargtypes | proargmodes
|
||||||
|
-----+---------+-------------+----------------+-------------
|
||||||
|
(0 rows)
|
||||||
|
|
||||||
-- Check for protransform functions with the wrong signature
|
-- Check for protransform functions with the wrong signature
|
||||||
SELECT p1.oid, p1.proname, p2.oid, p2.proname
|
SELECT p1.oid, p1.proname, p2.oid, p2.proname
|
||||||
FROM pg_proc AS p1, pg_proc AS p2
|
FROM pg_proc AS p1, pg_proc AS p2
|
||||||
|
@ -276,6 +276,15 @@ FROM pg_proc as p1
|
|||||||
WHERE proargmodes IS NOT NULL AND proargnames IS NOT NULL AND
|
WHERE proargmodes IS NOT NULL AND proargnames IS NOT NULL AND
|
||||||
array_length(proargmodes,1) <> array_length(proargnames,1);
|
array_length(proargmodes,1) <> array_length(proargnames,1);
|
||||||
|
|
||||||
|
-- Check that proallargtypes matches proargtypes
|
||||||
|
SELECT p1.oid, p1.proname, p1.proargtypes, p1.proallargtypes, p1.proargmodes
|
||||||
|
FROM pg_proc as p1
|
||||||
|
WHERE proallargtypes IS NOT NULL AND
|
||||||
|
ARRAY(SELECT unnest(proargtypes)) <>
|
||||||
|
ARRAY(SELECT proallargtypes[i]
|
||||||
|
FROM generate_series(1, array_length(proallargtypes, 1)) g(i)
|
||||||
|
WHERE proargmodes IS NULL OR proargmodes[i] IN ('i', 'b', 'v'));
|
||||||
|
|
||||||
-- Check for protransform functions with the wrong signature
|
-- Check for protransform functions with the wrong signature
|
||||||
SELECT p1.oid, p1.proname, p2.oid, p2.proname
|
SELECT p1.oid, p1.proname, p2.oid, p2.proname
|
||||||
FROM pg_proc AS p1, pg_proc AS p2
|
FROM pg_proc AS p1, pg_proc AS p2
|
||||||
|
Loading…
Reference in New Issue
Block a user