From 2c591cb821dcf4ad5ee2502af1b809cae7ef90be Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 24 Jan 2001 00:41:25 +0000 Subject: [PATCH] Add oid2name. Add streaming option later. --- contrib/oid2name/Makefile | 35 +++ contrib/oid2name/README.oid2name | 72 +++++ contrib/oid2name/oid2name | Bin 0 -> 18145 bytes contrib/oid2name/oid2name.c | 448 +++++++++++++++++++++++++++++++ contrib/oid2name/oid2name.o | Bin 0 -> 15812 bytes 5 files changed, 555 insertions(+) create mode 100644 contrib/oid2name/Makefile create mode 100644 contrib/oid2name/README.oid2name create mode 100755 contrib/oid2name/oid2name create mode 100644 contrib/oid2name/oid2name.c create mode 100644 contrib/oid2name/oid2name.o diff --git a/contrib/oid2name/Makefile b/contrib/oid2name/Makefile new file mode 100644 index 00000000000..616e0da381c --- /dev/null +++ b/contrib/oid2name/Makefile @@ -0,0 +1,35 @@ +# +# + +subdir = contrib/oid2name +top_builddir = /pgtop/ +include $(top_builddir)/src/Makefile.global + +override CPPFLAGS += -I$(libpq_srcdir) + +OBJS = oid2name.o + +all: oid2name + +oid2name: $(OBJS) $(libpq_builddir)/libpq.a + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(libpq) $(LIBS) -o $@ -g + +install: all installdirs + $(INSTALL_PROGRAM) oid2name$(X) $(bindir) + $(INSTALL_DATA) README.oid2name $(docdir)/contrib + +installdirs: + $(mkinstalldirs) $(bindir) $(docdir)/contrib + +uninstall: + rm -f $(bindir)/oid2name$(X) $(docdir)/contrib/README.oid2name + +clean distclean maintainer-clean: + rm -f oid2name$(X) $(OBJS) + +depend dep: + $(CC) -MM -MG $(CFLAGS) *.c > depend + +ifeq (depend,$(wildcard depend)) +include depend +endif diff --git a/contrib/oid2name/README.oid2name b/contrib/oid2name/README.oid2name new file mode 100644 index 00000000000..39a3cc60ab2 --- /dev/null +++ b/contrib/oid2name/README.oid2name @@ -0,0 +1,72 @@ +With version 7.1 of PostgreSQL server, the old naming scheme for +databases and tables (in $PGDATA/base) has changed. The databases +are put in folders for their OID in pg_database and the tables in +that folder are named for their OIDs in pg_class. This app connects +to the database (you can specify host, port, user, pass etc to +connect to a host other than localhost) and extracts the OID and +table name information. It has 4 ways it can be run: + + pg_oid2name + + This will connect to the template1 database and display all databases + in the system. + + $ ./pg_oid2name + All databases: + --------------------------------- + 18720 = test1 + 1 = template1 + 18719 = template0 + 18721 = test + 18735 = postgres + 18736 = cssi + + pg_oid2name -d test [-x] + + This connects to the database test and shows all tables and their OIDs. + + $ ./pg_oid2name -d test + All tables from database "test": + --------------------------------- + 18766 = dns + 18737 = ips + 18722 = testdate + + pg_oid2name -d test -o 18737 or + pg_oid2name -d test -t testdate + + This will connect to the database test and display the table name for oid + 18737 and the oid for table name testdate respectivly. + + $ ./pg_oid2name -d test -o 18737 + Tablename of oid 18737 from database "test": + --------------------------------- + 18737 = ips + + + $ ./pg_oid2name -d test -t testdate + Oid of table testdate from database "test": + _______________________________ + 18722 = testdate + + +There should be a decent amount of error handling in the app, a lot of it + dealt with via the postgres function calls. + + $ ./pg_oid2name -d nothere -t testdate + Oid of table testdate from database "nothere": + _______________________________ + Connection to database 'nothere' failed. + FATAL 1: Database "nothere" does not exist in the system catalog. + + $ ./pg_oid2name -d test -t nothere + Oid of table nothere from database "test": + _______________________________ + No tables with that name found + + +Mail me with any problems or additions you would like to see. Clearing + house for the code will be at: http://www.crimelabs.net + +b. palmer, bpalmer@crimelabs.net + diff --git a/contrib/oid2name/oid2name b/contrib/oid2name/oid2name new file mode 100755 index 0000000000000000000000000000000000000000..eec4a6082fe6e8bcc81d00835a2d3c0595a47cc8 GIT binary patch literal 18145 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 literal 0 HcmV?d00001 diff --git a/contrib/oid2name/oid2name.c b/contrib/oid2name/oid2name.c new file mode 100644 index 00000000000..ca5ca1d17d6 --- /dev/null +++ b/contrib/oid2name/oid2name.c @@ -0,0 +1,448 @@ +/* + oid2name; a postgresql 7.1 (+?) app to map OIDs on the filesystem + to table and database names. + + b. palmer, bpalmer@crimelabs.net 1-17-2001 + + + * Portions Copyright (c) 1996-2000, PostgreSQL, Inc + * Portions Copyright (c) 1994, Regents of the University of California + + */ + +#include +#include + +#include "libpq-fe.h" + +/* these are the opts structures for command line params */ +struct options { + int getdatabase; + int gettable; + int getoid; + + int systables; + + int remotehost; + int remoteport; + int remoteuser; + int remotepass; + + int _oid; + char _dbname[128]; + char _tbname[128]; + + char _hostname[128]; + char _port[6]; + char _username[128]; + char _password[128]; +}; + +/* function prototypes */ +void get_opts(int, char **, struct options *); +PGconn *sql_conn(char *, struct options *); +void sql_exec_error (int); +int sql_exec(PGconn *, char *, int); +void sql_exec_dumpdb(PGconn *); +void sql_exec_dumptable(PGconn *, int); +void sql_exec_searchtable(PGconn *, char *); +void sql_exec_searchoid(PGconn *, int); + +/* fuction to parse command line options and check for some usage errors. */ +void get_opts(int argc, char **argv, struct options *my_opts) +{ + char c; + + /* set the defaults */ + my_opts->getdatabase = 0; + my_opts->gettable = 0; + my_opts->getoid = 0; + + my_opts->systables = 0; + + my_opts->remotehost = 0; + my_opts->remoteport = 0; + my_opts->remoteuser = 0; + my_opts->remotepass = 0; + + /* get opts */ + while( (c = getopt(argc, argv, "H:p:U:P:d:t:o:xh?")) != EOF) + { + switch(c) + { + /* specify the database */ + case 'd': + my_opts->getdatabase = 1; + sscanf(optarg, "%s", my_opts->_dbname); + break; + + /* specify the table name */ + case 't': + /* make sure we set the database first */ + if(!my_opts->getdatabase) + { + fprintf(stderr, "Sorry, but you must specify a database to dump from.\n"); + exit(1); + } + /* make sure we don't try to do a -o also */ + if(my_opts->getoid) + { + fprintf(stderr, "Sorry, you can only specify either oid or table\n"); + exit(1); + } + + my_opts->gettable = 1; + sscanf(optarg, "%s", my_opts->_tbname); + + break; + + /* specify the oid int */ + case 'o': + /* make sure we set the database first */ + if(!my_opts->getdatabase) + { + fprintf(stderr, "Sorry, but you must specify a database to dump from.\n"); + exit(1); + } + /* make sure we don't try to do a -t also */ + if(my_opts->gettable) + { + fprintf(stderr, "Sorry, you can only specify either oid or table\n"); + exit(1); + } + + my_opts->getoid = 1; + sscanf(optarg, "%i", &my_opts->_oid); + + break; + + /* host to connect to */ + case 'H': + my_opts->remotehost = 1; + sscanf(optarg, "%s", my_opts->_hostname); + break; + + /* port to connect to on remote host */ + case 'p': + my_opts->remoteport = 1; + sscanf(optarg, "%s", my_opts->_port); + break; + + /* username */ + case 'U': + my_opts->remoteuser = 1; + sscanf(optarg, "%s", my_opts->_username); + break; + + /* password */ + case 'P': + my_opts->remotepass = 1; + sscanf(optarg, "%s", my_opts->_password); + break; + + /* display system tables */ + case 'x': + + my_opts->systables = 1; + break; + + /* help! (ugly in code for easier editing) */ + case '?': + case 'h': + fprintf(stderr, "\n\ +Usage: pg_oid2name [-d database [-x] ] [-t table | -o oid] \n\ + dafault action display all databases + -d database database to oid2name\n\ + -x display system tables\n\ + -t table | -o oid search for table name (-t) or\n\ + oid (-o) in -d database + -H host connect to remote host\n\ + -p port host port to connect to\n\ + -U username username to connect with\n\ + -P password password for username\n\n\ +"); + exit(1); + break; + } + } +} + +/* establish connection with database. */ +PGconn *sql_conn(char *dbName, struct options *my_opts) +{ + char *pghost, *pgport; + char *pgoptions, *pgtty; + char *pguser, *pgpass; + + PGconn *conn; + + pghost = NULL; + pgport = NULL; + + pgoptions = NULL; /* special options to start up the backend + * server */ + pgtty = NULL; /* debugging tty for the backend server */ + + pguser = NULL; + pgpass = NULL; + + /* override the NULLs with the user params if passed */ + if(my_opts->remotehost) + { + pghost = (char *) malloc (128); + sscanf(my_opts->_hostname, "%s", pghost); + } + + if(my_opts->remoteport) + { + pgport = (char *) malloc (6); + sscanf(my_opts->_port, "%s", pgport); + } + + if(my_opts->remoteuser) + { + pguser = (char *) malloc (128); + sscanf(my_opts->_username, "%s", pguser); + } + + if(my_opts->remotepass) + { + pgpass = (char *) malloc (128); + sscanf(my_opts->_password, "%s", pgpass); + } + + /* login */ + conn = PQsetdbLogin(pghost, pgport, pgoptions, pgtty, dbName, pguser, pgpass); + + /* deal with errors */ + if (PQstatus(conn) == CONNECTION_BAD) + { + fprintf(stderr, "Connection to database '%s' failed.\n", dbName); + fprintf(stderr, "%s", PQerrorMessage(conn)); + + + PQfinish(conn); + exit(1); + + } + + /* return the conn if good */ + return conn; +} + +/* If the sql_ command has an error, this function looks up the error number and prints it out. */ +void sql_exec_error (int error_number) +{ + fprintf(stderr, "Error number %i.\n", error_number); + switch(error_number) + { + case 3: + fprintf(stderr, "Error: PGRES_COPY_OUT\n"); + break; + + case 4: + fprintf(stderr, "Error: PGRES_COPY_IN\n"); + break; + + case 5: + fprintf(stderr, "Error: PGRES_BAD_RESPONCE\n"); + break; + + case 6: + fprintf(stderr, "Error: PGRES_NONFATAL_ERROR\n"); + break; + + case 7: + fprintf(stderr, "Error: PGRES_FATAL_ERROR\n"); + break; + } +} + +/* actual code to make call to the database and print the output data */ +int sql_exec(PGconn *conn, char *todo, int match) +{ + PGresult *res; + + int numbfields; + int error_number; + int i, len; + + /* make the call */ + res = PQexec(conn, todo); + + /* check and deal with errors */ + if (!res || PQresultStatus(res) > 2) + { + error_number = PQresultStatus(res); + fprintf(stderr, "There was an error in the SQL command:\n%s\n", todo); + sql_exec_error(error_number); + fprintf(stderr, "PQerrorMessage = %s\n", PQerrorMessage(conn)); + + PQclear(res); + PQfinish(conn); + exit(-1); + } + + /* get the number of fields */ + numbfields = PQntuples(res); + + /* if we only expect 1 and there mode than, return -2 */ + if(match == 1 && numbfields > 1) + return -2; + + /* return -1 if there aren't any returns */ + if(match == 1 && numbfields < 1) + return -1; + + /* for each row, dump the information */ + for(i = 0; i < numbfields; i++) + { + len = strlen(PQgetvalue(res, i, 0)); + + fprintf(stdout, "%-6s = %s\n", PQgetvalue(res, i, 0), PQgetvalue(res, i, 1)); + } + + /* clean the PGconn once done */ + PQclear(res); + + return 0; +} + +/* dump all databases know by the system table */ +void sql_exec_dumpdb(PGconn *conn) +{ + char *todo; + + todo = (char *) malloc (1024); + + /* get the oid and database name from the system pg_database table */ + sprintf(todo, "select oid,datname from pg_database"); + + sql_exec(conn, todo, NULL); +} + +/* display all tables in whatever db we are connected to. don't display the + system tables by default */ +void sql_exec_dumptable(PGconn *conn, int systables) +{ + char *todo; + + todo = (char *) malloc (1024); + + /* don't exclude the systables if this is set */ + if(systables == 1) + sprintf(todo, "select oid,relname from pg_class order by relname"); + else + sprintf(todo, "select oid,relname from pg_class where relname not like 'pg_%%' order by relname"); + + sql_exec(conn, todo, NULL); +} + +/* display the oid for a given tablename for whatever db we are connected + to. do we want to allow %bar% in the search? Not now. */ +void sql_exec_searchtable(PGconn *conn, char *tablename) +{ + int returnvalue; + char *todo; + + todo = (char *) malloc (1024); + + /* get the oid and tablename where the name matches tablename */ + sprintf(todo, "select oid,relname from pg_class where relname = '%s'", tablename); + + returnvalue = sql_exec(conn, todo, 1); + + /* deal with the return errors */ + if(returnvalue == -1) + { + printf("No tables with that name found\n"); + } + + if(returnvalue == -2) + { + printf("VERY scary: more than one table with that name found!!\n"); + } +} + +/* same as above */ +void sql_exec_searchoid(PGconn *conn, int oid) +{ + int returnvalue; + char *todo; + + todo = (char *) malloc (1024); + + sprintf(todo, "select oid,relname from pg_class where oid = %i", oid); + + returnvalue = sql_exec(conn, todo, 1); + + if(returnvalue == -1) + { + printf("No tables with that oid found\n"); + } + + if(returnvalue == -2) + { + printf("VERY scary: more than one table with that oid found!!\n"); + } +} + +int main(int argc, char **argv) +{ + struct options *my_opts; + PGconn *pgconn; + + my_opts = (struct options *) malloc (sizeof(struct options)); + + /* parse the opts */ + get_opts(argc, argv, my_opts); + + /* display all the tables in the database */ + if(my_opts->getdatabase & my_opts->gettable) + { + printf("Oid of table %s from database \"%s\":\n", my_opts->_tbname, my_opts->_dbname); + printf("_______________________________\n"); + + pgconn = sql_conn(my_opts->_dbname, my_opts); + sql_exec_searchtable(pgconn, my_opts->_tbname); + PQfinish(pgconn); + + exit(1); + } + + /* search for the tablename of the given OID */ + if(my_opts->getdatabase & my_opts->getoid) + { + printf("Tablename of oid %i from database \"%s\":\n", my_opts->_oid, my_opts->_dbname); + printf("---------------------------------\n"); + + pgconn = sql_conn(my_opts->_dbname, my_opts); + sql_exec_searchoid(pgconn, my_opts->_oid); + PQfinish(pgconn); + + exit(1); + } + + /* search for the oid for the given tablename */ + if(my_opts->getdatabase) + { + printf("All tables from database \"%s\":\n", my_opts->_dbname); + printf("---------------------------------\n"); + + pgconn = sql_conn(my_opts->_dbname, my_opts); + sql_exec_dumptable(pgconn, my_opts->systables); + PQfinish(pgconn); + + exit(1); + } + + /* display all the databases for the server we are connected to.. */ + printf("All databases:\n"); + printf("---------------------------------\n"); + + pgconn = sql_conn("template1", my_opts); + sql_exec_dumpdb(pgconn); + PQfinish(pgconn); + + exit(0); +} diff --git a/contrib/oid2name/oid2name.o b/contrib/oid2name/oid2name.o new file mode 100644 index 0000000000000000000000000000000000000000..801882c2d2f36bbd98f2f63a49484d9f18587df0 GIT binary patch literal 15812 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 UmaX|Xi?JrH1w=Kd5zp`c15hYNE&u=k literal 0 HcmV?d00001