findoidjoins
-This program scans a database, and prints oid fields and the tables
-they join to. CAUTION: it is ver-r-r-y slow on a large database, or
-even a not-so-large one. We don't really recommend running it on
-anything but an empty database.
+This program scans a database, and prints oid fields (also regproc fields)
+and the tables they join to. CAUTION: it is ver-r-r-y slow on a large
+database, or even a not-so-large one. We don't really recommend running
+it on anything but an empty database.
It requires pgsql/contrib/pginterface to be compiled first.
-Run on an empty database, it returns the system join relationships
-(shown below for 6.5). Note that unexpected matches may indicate
-bogus entries in system tables --- don't accept a peculiar match
-without question. In particular, a field shown as joining to more
-than one target table is probably messed up.
+Run on an empty database, it returns the system join relationships (shown
+below for 6.5). Note that unexpected matches may indicate bogus entries
+in system tables --- don't accept a peculiar match without question.
+In particular, a field shown as joining to more than one target table is
+probably messed up. In 6.5, the *only* field that should join to more
+than one target is pg_description.objoid. (Running make_oidjoins_check
+is an easy way to spot fields joining to more than one table, BTW.)
The shell script make_oidjoins_check converts findoidjoins' output
into an SQL script that checks for dangling links (entries in an
-OID column that don't match any row in the expected table).
-The result of this script should be installed as the "oidjoins"
+OID or REGPROC column that don't match any row in the expected table).
+Note that fields joining to more than one table are NOT processed.
+
+The result of make_oidjoins_check should be installed as the "oidjoins"
regression test. The oidjoins test should be updated after any
revision in the patterns of cross-links between system tables.
(Ideally we'd just regenerate the script as part of the regression
Join pg_operator.oprcode => pg_proc.oid
Join pg_operator.oprrest => pg_proc.oid
Join pg_operator.oprjoin => pg_proc.oid
-Join pg_parg.parproid => pg_operator.oid
-Join pg_parg.parproid => pg_proc.oid
-Join pg_parg.partype => pg_type.oid
Join pg_proc.prolang => pg_language.oid
Join pg_proc.prorettype => pg_type.oid
Join pg_rewrite.ev_class => pg_class.oid
+++ /dev/null
-/*-------------------------------------------------------------------------
- *
- * pg_parg.h
- * definition of the system "parg" relation (pg_parg)
- * along with the relation's initial contents.
- *
- * [whatever this relation was, it doesn't seem to be used anymore --djm]
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- * $Id: pg_parg.h,v 1.7 1999/02/13 23:21:12 momjian Exp $
- *
- * NOTES
- * the genbki.sh script reads this file and generates .bki
- * information from the DATA() statements.
- *
- *-------------------------------------------------------------------------
- */
-#ifndef PG_PARG_H
-#define PG_PARG_H
-
-/* ----------------
- * postgres.h contains the system type definintions and the
- * CATALOG(), BOOTSTRAP and DATA() sugar words so this file
- * can be read by both genbki.sh and the C compiler.
- * ----------------
- */
-
-/* ----------------
- * pg_parg definition. cpp turns this into
- * typedef struct FormData_pg_parg
- * ----------------
- */
-CATALOG(pg_parg)
-{
- Oid parproid;
- int2 parnum;
- char parbound;
- Oid partype;
-} FormData_pg_parg;
-
-/* ----------------
- * Form_pg_parg corresponds to a pointer to a tuple with
- * the format of pg_parg relation.
- * ----------------
- */
-typedef FormData_pg_parg *Form_pg_parg;
-
-/* ----------------
- * compiler constants for pg_parg
- * ----------------
- */
-#define Natts_pg_parg 4
-#define Anum_pg_parg_parproid 1
-#define Anum_pg_parg_parnum 2
-#define Anum_pg_parg_parbound 3
-#define Anum_pg_parg_partype 4
-
-/* ----------------
- * initial contents of pg_parg
- * ----------------
- */
-
-DATA(insert OID = 0 ( 1242 1 - 23 ));
-DATA(insert OID = 0 ( 1243 1 - 16 ));
-DATA(insert OID = 0 ( 1244 1 - 23 ));
-DATA(insert OID = 0 ( 31 1 - 17 ));
-DATA(insert OID = 0 ( 1245 1 - 23 ));
-DATA(insert OID = 0 ( 33 1 - 18 ));
-DATA(insert OID = 0 ( 34 1 - 23 ));
-DATA(insert OID = 0 ( 35 1 - 19 ));
-DATA(insert OID = 0 ( 36 1 - 23 ));
-DATA(insert OID = 0 ( 37 1 - 20 ));
-DATA(insert OID = 0 ( 38 1 - 23 ));
-DATA(insert OID = 0 ( 39 1 - 21 ));
-DATA(insert OID = 0 ( 40 1 - 23 ));
-DATA(insert OID = 0 ( 41 1 - 22 ));
-DATA(insert OID = 0 ( 42 1 - 23 ));
-DATA(insert OID = 0 ( 43 1 - 23 ));
-DATA(insert OID = 0 ( 44 1 - 23 ));
-DATA(insert OID = 0 ( 45 1 - 24 ));
-DATA(insert OID = 0 ( 46 1 - 23 ));
-DATA(insert OID = 0 ( 47 1 - 25 ));
-DATA(insert OID = 0 ( 50 1 - 23 ));
-DATA(insert OID = 0 ( 50 2 - 23 ));
-DATA(insert OID = 0 ( 50 3 - 23 ));
-DATA(insert OID = 0 ( 51 1 - 23 ));
-DATA(insert OID = 0 ( 52 1 - 23 ));
-DATA(insert OID = 0 ( 52 2 - 23 ));
-DATA(insert OID = 0 ( 52 3 - 23 ));
-DATA(insert OID = 0 ( 52 4 - 23 ));
-DATA(insert OID = 0 ( 53 1 - 23 ));
-DATA(insert OID = 0 ( 54 1 - 23 ));
-DATA(insert OID = 0 ( 54 2 - 23 ));
-DATA(insert OID = 0 ( 55 1 - 23 ));
-DATA(insert OID = 0 ( 55 2 - 23 ));
-DATA(insert OID = 0 ( 56 1 - 23 ));
-DATA(insert OID = 0 ( 56 2 - 23 ));
-DATA(insert OID = 0 ( 57 1 - 23 ));
-DATA(insert OID = 0 ( 57 2 - 23 ));
-DATA(insert OID = 0 ( 57 3 - 23 ));
-DATA(insert OID = 0 ( 60 1 - 16 ));
-DATA(insert OID = 0 ( 60 2 - 16 ));
-DATA(insert OID = 0 ( 61 1 - 18 ));
-DATA(insert OID = 0 ( 61 2 - 18 ));
-DATA(insert OID = 0 ( 63 1 - 21 ));
-DATA(insert OID = 0 ( 63 2 - 21 ));
-DATA(insert OID = 0 ( 64 1 - 21 ));
-DATA(insert OID = 0 ( 64 2 - 21 ));
-DATA(insert OID = 0 ( 65 1 - 23 ));
-DATA(insert OID = 0 ( 65 2 - 23 ));
-DATA(insert OID = 0 ( 66 1 - 23 ));
-DATA(insert OID = 0 ( 66 2 - 23 ));
-DATA(insert OID = 0 ( 67 1 - 25 ));
-DATA(insert OID = 0 ( 67 2 - 25 ));
-
-#endif /* PG_PARG_H */