1
1
2
2
findoidjoins
3
3
4
- This program scans a database, and prints oid fields (also regproc, regclass
5
- and regtype fields) and the tables they join to. CAUTION: it is ver-r-r-y
6
- slow on a large database, or even a not-so-large one. We don't really
7
- recommend running it on anything but an empty database, such as template1.
8
-
9
- Uses pgeasy library.
4
+ This program scans a database and prints oid fields (also reg* fields)
5
+ and the tables they join to. We don't really recommend running it on
6
+ anything but an empty database, such as template1; else it's likely to
7
+ be very slow.
10
8
11
9
Run on an empty database, it returns the system join relationships (shown
12
- below for 7.2 ). Note that unexpected matches may indicate bogus entries
10
+ below for 7.3 ). Note that unexpected matches may indicate bogus entries
13
11
in system tables --- don't accept a peculiar match without question.
14
12
In particular, a field shown as joining to more than one target table is
15
- probably messed up. In 7.2, the *only* field that should join to more
16
- than one target is pg_description.objoid. (Running make_oidjoins_check
17
- is an easy way to spot fields joining to more than one table, BTW.)
13
+ probably messed up. In 7.3, the *only* fields that should join to more
14
+ than one target are pg_description.objoid, pg_depend.objid, and
15
+ pg_depend.refobjid. (Running make_oidjoins_check is an easy way to spot
16
+ fields joining to more than one table, BTW.)
18
17
19
18
The shell script make_oidjoins_check converts findoidjoins' output
20
19
into an SQL script that checks for dangling links (entries in an
21
- OID or REGPROC column that don't match any row in the expected table).
20
+ OID or REG* column that don't match any row in the expected table).
22
21
Note that fields joining to more than one table are NOT processed.
23
22
24
23
The result of make_oidjoins_check should be installed as the "oidjoins"
@@ -27,68 +26,82 @@ revision in the patterns of cross-links between system tables.
27
26
(Ideally we'd just regenerate the script as part of the regression
28
27
tests themselves, but that seems too slow...)
29
28
30
- NOTE: in 7.2, make_oidjoins_check produces one bogus join check, for
31
- pg_class.relfilenode => pg_class.oid. This is an artifact and should not
32
- be added to the oidjoins regress test.
29
+ NOTE: in 7.3, make_oidjoins_check produces two bogus join checks:
30
+ Join pg_catalog.pg_class.relfilenode => pg_catalog.pg_class.oid
31
+ Join pg_catalog.pg_database.datlastsysoid => pg_catalog.pg_conversion.oid
32
+ These are artifacts and should not be added to the oidjoins regress test.
33
33
34
34
---------------------------------------------------------------------------
35
35
36
- Join pg_aggregate.aggtransfn => pg_proc.oid
37
- Join pg_aggregate.aggfinalfn => pg_proc.oid
38
- Join pg_aggregate.aggbasetype => pg_type.oid
39
- Join pg_aggregate.aggtranstype => pg_type.oid
40
- Join pg_aggregate.aggfinaltype => pg_type.oid
41
- Join pg_am.amgettuple => pg_proc.oid
42
- Join pg_am.aminsert => pg_proc.oid
43
- Join pg_am.ambeginscan => pg_proc.oid
44
- Join pg_am.amrescan => pg_proc.oid
45
- Join pg_am.amendscan => pg_proc.oid
46
- Join pg_am.ammarkpos => pg_proc.oid
47
- Join pg_am.amrestrpos => pg_proc.oid
48
- Join pg_am.ambuild => pg_proc.oid
49
- Join pg_am.ambulkdelete => pg_proc.oid
50
- Join pg_am.amcostestimate => pg_proc.oid
51
- Join pg_amop.amopclaid => pg_opclass.oid
52
- Join pg_amop.amopopr => pg_operator.oid
53
- Join pg_amproc.amopclaid => pg_opclass.oid
54
- Join pg_amproc.amproc => pg_proc.oid
55
- Join pg_attribute.attrelid => pg_class.oid
56
- Join pg_attribute.atttypid => pg_type.oid
57
- Join pg_class.reltype => pg_type.oid
58
- Join pg_class.relam => pg_am.oid
59
- Join pg_class.reltoastrelid => pg_class.oid
60
- Join pg_class.reltoastidxid => pg_class.oid
61
- Join pg_description.classoid => pg_class.oid
62
- Join pg_index.indexrelid => pg_class.oid
63
- Join pg_index.indrelid => pg_class.oid
64
- Join pg_opclass.opcamid => pg_am.oid
65
- Join pg_opclass.opcintype => pg_type.oid
66
- Join pg_operator.oprleft => pg_type.oid
67
- Join pg_operator.oprright => pg_type.oid
68
- Join pg_operator.oprresult => pg_type.oid
69
- Join pg_operator.oprcom => pg_operator.oid
70
- Join pg_operator.oprnegate => pg_operator.oid
71
- Join pg_operator.oprlsortop => pg_operator.oid
72
- Join pg_operator.oprrsortop => pg_operator.oid
73
- Join pg_operator.oprcode => pg_proc.oid
74
- Join pg_operator.oprrest => pg_proc.oid
75
- Join pg_operator.oprjoin => pg_proc.oid
76
- Join pg_proc.prolang => pg_language.oid
77
- Join pg_proc.prorettype => pg_type.oid
78
- Join pg_rewrite.ev_class => pg_class.oid
79
- Join pg_statistic.starelid => pg_class.oid
80
- Join pg_statistic.staop1 => pg_operator.oid
81
- Join pg_statistic.staop2 => pg_operator.oid
82
- Join pg_statistic.staop3 => pg_operator.oid
83
- Join pg_trigger.tgrelid => pg_class.oid
84
- Join pg_trigger.tgfoid => pg_proc.oid
85
- Join pg_type.typrelid => pg_class.oid
86
- Join pg_type.typelem => pg_type.oid
87
- Join pg_type.typinput => pg_proc.oid
88
- Join pg_type.typoutput => pg_proc.oid
89
- Join pg_type.typreceive => pg_proc.oid
90
- Join pg_type.typsend => pg_proc.oid
36
+ Join pg_catalog.pg_aggregate.aggfnoid => pg_catalog.pg_proc.oid
37
+ Join pg_catalog.pg_aggregate.aggtransfn => pg_catalog.pg_proc.oid
38
+ Join pg_catalog.pg_aggregate.aggfinalfn => pg_catalog.pg_proc.oid
39
+ Join pg_catalog.pg_aggregate.aggtranstype => pg_catalog.pg_type.oid
40
+ Join pg_catalog.pg_am.amgettuple => pg_catalog.pg_proc.oid
41
+ Join pg_catalog.pg_am.aminsert => pg_catalog.pg_proc.oid
42
+ Join pg_catalog.pg_am.ambeginscan => pg_catalog.pg_proc.oid
43
+ Join pg_catalog.pg_am.amrescan => pg_catalog.pg_proc.oid
44
+ Join pg_catalog.pg_am.amendscan => pg_catalog.pg_proc.oid
45
+ Join pg_catalog.pg_am.ammarkpos => pg_catalog.pg_proc.oid
46
+ Join pg_catalog.pg_am.amrestrpos => pg_catalog.pg_proc.oid
47
+ Join pg_catalog.pg_am.ambuild => pg_catalog.pg_proc.oid
48
+ Join pg_catalog.pg_am.ambulkdelete => pg_catalog.pg_proc.oid
49
+ Join pg_catalog.pg_am.amcostestimate => pg_catalog.pg_proc.oid
50
+ Join pg_catalog.pg_amop.amopclaid => pg_catalog.pg_opclass.oid
51
+ Join pg_catalog.pg_amop.amopopr => pg_catalog.pg_operator.oid
52
+ Join pg_catalog.pg_amproc.amopclaid => pg_catalog.pg_opclass.oid
53
+ Join pg_catalog.pg_amproc.amproc => pg_catalog.pg_proc.oid
54
+ Join pg_catalog.pg_attribute.attrelid => pg_catalog.pg_class.oid
55
+ Join pg_catalog.pg_attribute.atttypid => pg_catalog.pg_type.oid
56
+ Join pg_catalog.pg_cast.castsource => pg_catalog.pg_type.oid
57
+ Join pg_catalog.pg_cast.casttarget => pg_catalog.pg_type.oid
58
+ Join pg_catalog.pg_cast.castfunc => pg_catalog.pg_proc.oid
59
+ Join pg_catalog.pg_class.relnamespace => pg_catalog.pg_namespace.oid
60
+ Join pg_catalog.pg_class.reltype => pg_catalog.pg_type.oid
61
+ Join pg_catalog.pg_class.relam => pg_catalog.pg_am.oid
62
+ Join pg_catalog.pg_class.reltoastrelid => pg_catalog.pg_class.oid
63
+ Join pg_catalog.pg_class.reltoastidxid => pg_catalog.pg_class.oid
64
+ Join pg_catalog.pg_conversion.connamespace => pg_catalog.pg_namespace.oid
65
+ Join pg_catalog.pg_conversion.conproc => pg_catalog.pg_proc.oid
66
+ Join pg_catalog.pg_depend.classid => pg_catalog.pg_class.oid
67
+ Join pg_catalog.pg_depend.refclassid => pg_catalog.pg_class.oid
68
+ Join pg_catalog.pg_description.classoid => pg_catalog.pg_class.oid
69
+ Join pg_catalog.pg_index.indexrelid => pg_catalog.pg_class.oid
70
+ Join pg_catalog.pg_index.indrelid => pg_catalog.pg_class.oid
71
+ Join pg_catalog.pg_language.lanvalidator => pg_catalog.pg_proc.oid
72
+ Join pg_catalog.pg_opclass.opcamid => pg_catalog.pg_am.oid
73
+ Join pg_catalog.pg_opclass.opcnamespace => pg_catalog.pg_namespace.oid
74
+ Join pg_catalog.pg_opclass.opcintype => pg_catalog.pg_type.oid
75
+ Join pg_catalog.pg_operator.oprnamespace => pg_catalog.pg_namespace.oid
76
+ Join pg_catalog.pg_operator.oprleft => pg_catalog.pg_type.oid
77
+ Join pg_catalog.pg_operator.oprright => pg_catalog.pg_type.oid
78
+ Join pg_catalog.pg_operator.oprresult => pg_catalog.pg_type.oid
79
+ Join pg_catalog.pg_operator.oprcom => pg_catalog.pg_operator.oid
80
+ Join pg_catalog.pg_operator.oprnegate => pg_catalog.pg_operator.oid
81
+ Join pg_catalog.pg_operator.oprlsortop => pg_catalog.pg_operator.oid
82
+ Join pg_catalog.pg_operator.oprrsortop => pg_catalog.pg_operator.oid
83
+ Join pg_catalog.pg_operator.oprltcmpop => pg_catalog.pg_operator.oid
84
+ Join pg_catalog.pg_operator.oprgtcmpop => pg_catalog.pg_operator.oid
85
+ Join pg_catalog.pg_operator.oprcode => pg_catalog.pg_proc.oid
86
+ Join pg_catalog.pg_operator.oprrest => pg_catalog.pg_proc.oid
87
+ Join pg_catalog.pg_operator.oprjoin => pg_catalog.pg_proc.oid
88
+ Join pg_catalog.pg_proc.pronamespace => pg_catalog.pg_namespace.oid
89
+ Join pg_catalog.pg_proc.prolang => pg_catalog.pg_language.oid
90
+ Join pg_catalog.pg_proc.prorettype => pg_catalog.pg_type.oid
91
+ Join pg_catalog.pg_rewrite.ev_class => pg_catalog.pg_class.oid
92
+ Join pg_catalog.pg_statistic.starelid => pg_catalog.pg_class.oid
93
+ Join pg_catalog.pg_statistic.staop1 => pg_catalog.pg_operator.oid
94
+ Join pg_catalog.pg_statistic.staop2 => pg_catalog.pg_operator.oid
95
+ Join pg_catalog.pg_statistic.staop3 => pg_catalog.pg_operator.oid
96
+ Join pg_catalog.pg_trigger.tgrelid => pg_catalog.pg_class.oid
97
+ Join pg_catalog.pg_trigger.tgfoid => pg_catalog.pg_proc.oid
98
+ Join pg_catalog.pg_type.typnamespace => pg_catalog.pg_namespace.oid
99
+ Join pg_catalog.pg_type.typrelid => pg_catalog.pg_class.oid
100
+ Join pg_catalog.pg_type.typelem => pg_catalog.pg_type.oid
101
+ Join pg_catalog.pg_type.typinput => pg_catalog.pg_proc.oid
102
+ Join pg_catalog.pg_type.typoutput => pg_catalog.pg_proc.oid
91
103
92
104
---------------------------------------------------------------------------
93
105
94
106
Bruce Momjian (root@candle.pha.pa.us)
107
+ Updated for 7.3 by Joe Conway (mail@joeconway.com)
0 commit comments