findoidjoins was suffering from bit rot (pginterface no

longer in expected location).
This commit is contained in:
Tom Lane 2000-01-22 23:05:14 +00:00
parent fa5400c0a4
commit 78845177bb
3 changed files with 26 additions and 19 deletions

View File

@ -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 TARGET = findoidjoins
CFLAGS = -g -Wall -I. -I../pginterface -I../../src/interfaces/libpq -I/usr/local/pgsql/include PGEASY = ../../src/interfaces/libpgeasy
LDFLAGS = -L/usr/local/pgsql/lib -lpq CFLAGS = -g -Wall -I. -I$(PGEASY) -I$(INSTALLDIR)/include
LIBPGEASY = $(PGEASY)/libpgeasy.a
LDFLAGS = -L$(INSTALLDIR)/lib -lpq
all : $(TARGET) all : $(TARGET)
findoidjoins: $(PGINTERFACE) findoidjoins.c findoidjoins: findoidjoins.c $(LIBPGEASY)
gcc -o $@ $(CFLAGS) $@.c $(PGINTERFACE) $(LDFLAGS) gcc -o $@ $(CFLAGS) $^ $(LDFLAGS)
clean: clean:
rm -f *.o $(TARGET) log core rm -f *.o $(TARGET) log core
install: install:
install -s -o bin -g bin $(TARGET) /usr/local/pgsql/bin install -s -o bin -g bin $(TARGET) $(INSTALLDIR)/bin

View File

@ -4,15 +4,15 @@
This program scans a database, and prints oid fields (also regproc fields) 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 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 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. Uses pgeasy library.
Run on an empty database, it returns the system join relationships (shown 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 system tables --- don't accept a peculiar match without question.
In particular, a field shown as joining to more than one target table is 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 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.) 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.ammarkpos => pg_proc.oid
Join pg_am.amrestrpos => pg_proc.oid Join pg_am.amrestrpos => pg_proc.oid
Join pg_am.ambuild => 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.amopid => pg_am.oid
Join pg_amop.amopclaid => pg_opclass.oid Join pg_amop.amopclaid => pg_opclass.oid
Join pg_amop.amopopr => pg_operator.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.amid => pg_am.oid
Join pg_amproc.amopclaid => pg_opclass.oid Join pg_amproc.amopclaid => pg_opclass.oid
Join pg_amproc.amproc => pg_proc.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.prolang => pg_language.oid
Join pg_proc.prorettype => pg_type.oid Join pg_proc.prorettype => pg_type.oid
Join pg_rewrite.ev_class => pg_class.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.typrelid => pg_class.oid
Join pg_type.typelem => pg_type.oid Join pg_type.typelem => pg_type.oid
Join pg_type.typinput => pg_proc.oid Join pg_type.typinput => pg_proc.oid

View File

@ -1,13 +1,14 @@
/* /*
* findoidjoins.c, required pgsql/contrib/pginterface * findoidjoins.c, requires src/interfaces/libpgeasy
* *
*/ */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "libpq-fe.h"
#include "halt.h" #include "halt.h"
#include <libpq-fe.h> #include "libpgeasy.h"
#include "pginterface.h"
PGresult *attres, PGresult *attres,
*relres; *relres;
@ -69,14 +70,14 @@ main(int argc, char **argv)
sprintf(query, "\ sprintf(query, "\
DECLARE c_matches BINARY CURSOR FOR \ DECLARE c_matches BINARY CURSOR FOR \
SELECT count(*) \ SELECT count(*) \
FROM % s t1, %s t2 \ FROM %s t1, %s t2 \
WHERE t1.% s = t2.oid ", relname, relname2, attname); WHERE t1.%s = t2.oid ", relname, relname2, attname);
else else
sprintf(query, "\ sprintf(query, "\
DECLARE c_matches BINARY CURSOR FOR \ DECLARE c_matches BINARY CURSOR FOR \
SELECT count(*) \ SELECT count(*) \
FROM % s t1, %s t2 \ FROM %s t1, %s t2 \
WHERE RegprocToOid(t1.% s) = t2.oid ", relname, relname2, attname); WHERE RegprocToOid(t1.%s) = t2.oid ", relname, relname2, attname);
doquery(query); doquery(query);
doquery("FETCH ALL IN c_matches"); doquery("FETCH ALL IN c_matches");