diff --git a/contrib/findoidjoins/Makefile b/contrib/findoidjoins/Makefile index 898f92c6cf..0394510f43 100644 --- a/contrib/findoidjoins/Makefile +++ b/contrib/findoidjoins/Makefile @@ -1,20 +1,23 @@ # -# Makefile, requires pgsql/contrib/pginterface +# Makefile, requires src/interfaces/libpgeasy # # -PGINTERFACE = ../pginterface/pginterface.o ../pginterface/halt.o # these have to be in your library search path +INSTALLDIR = /usr/local/pgsql + TARGET = findoidjoins -CFLAGS = -g -Wall -I. -I../pginterface -I../../src/interfaces/libpq -I/usr/local/pgsql/include -LDFLAGS = -L/usr/local/pgsql/lib -lpq +PGEASY = ../../src/interfaces/libpgeasy +CFLAGS = -g -Wall -I. -I$(PGEASY) -I$(INSTALLDIR)/include +LIBPGEASY = $(PGEASY)/libpgeasy.a +LDFLAGS = -L$(INSTALLDIR)/lib -lpq all : $(TARGET) -findoidjoins: $(PGINTERFACE) findoidjoins.c - gcc -o $@ $(CFLAGS) $@.c $(PGINTERFACE) $(LDFLAGS) +findoidjoins: findoidjoins.c $(LIBPGEASY) + gcc -o $@ $(CFLAGS) $^ $(LDFLAGS) clean: rm -f *.o $(TARGET) log core install: - install -s -o bin -g bin $(TARGET) /usr/local/pgsql/bin + install -s -o bin -g bin $(TARGET) $(INSTALLDIR)/bin diff --git a/contrib/findoidjoins/README b/contrib/findoidjoins/README index c67d341339..44c150a43f 100644 --- a/contrib/findoidjoins/README +++ b/contrib/findoidjoins/README @@ -4,15 +4,15 @@ 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 on anything but an empty database, such as template1. Uses pgeasy library. Run on an empty database, it returns the system join relationships (shown -below for 6.5). Note that unexpected matches may indicate bogus entries +below for 7.0). 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 +probably messed up. In 7.0, 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.) @@ -45,11 +45,10 @@ Join pg_am.amendscan => pg_proc.oid Join pg_am.ammarkpos => pg_proc.oid Join pg_am.amrestrpos => pg_proc.oid Join pg_am.ambuild => pg_proc.oid +Join pg_am.amcostestimate => pg_proc.oid Join pg_amop.amopid => pg_am.oid Join pg_amop.amopclaid => pg_opclass.oid Join pg_amop.amopopr => pg_operator.oid -Join pg_amop.amopselect => pg_proc.oid -Join pg_amop.amopnpages => pg_proc.oid Join pg_amproc.amid => pg_am.oid Join pg_amproc.amopclaid => pg_opclass.oid Join pg_amproc.amproc => pg_proc.oid @@ -75,6 +74,10 @@ Join pg_operator.oprjoin => pg_proc.oid Join pg_proc.prolang => pg_language.oid Join pg_proc.prorettype => pg_type.oid Join pg_rewrite.ev_class => pg_class.oid +Join pg_statistic.starelid => pg_class.oid +Join pg_statistic.staop => pg_operator.oid +Join pg_trigger.tgrelid => pg_class.oid +Join pg_trigger.tgfoid => pg_proc.oid Join pg_type.typrelid => pg_class.oid Join pg_type.typelem => pg_type.oid Join pg_type.typinput => pg_proc.oid diff --git a/contrib/findoidjoins/findoidjoins.c b/contrib/findoidjoins/findoidjoins.c index f1b82a14ef..c932a33091 100644 --- a/contrib/findoidjoins/findoidjoins.c +++ b/contrib/findoidjoins/findoidjoins.c @@ -1,13 +1,14 @@ /* - * findoidjoins.c, required pgsql/contrib/pginterface + * findoidjoins.c, requires src/interfaces/libpgeasy * */ #include #include +#include "libpq-fe.h" + #include "halt.h" -#include -#include "pginterface.h" +#include "libpgeasy.h" PGresult *attres, *relres; @@ -69,14 +70,14 @@ main(int argc, char **argv) sprintf(query, "\ DECLARE c_matches BINARY CURSOR FOR \ SELECT count(*) \ - FROM % s t1, %s t2 \ - WHERE t1.% s = t2.oid ", relname, relname2, attname); + FROM %s t1, %s t2 \ + WHERE t1.%s = t2.oid ", relname, relname2, attname); else sprintf(query, "\ DECLARE c_matches BINARY CURSOR FOR \ SELECT count(*) \ - FROM % s t1, %s t2 \ - WHERE RegprocToOid(t1.% s) = t2.oid ", relname, relname2, attname); + FROM %s t1, %s t2 \ + WHERE RegprocToOid(t1.%s) = t2.oid ", relname, relname2, attname); doquery(query); doquery("FETCH ALL IN c_matches");