diff --git a/contrib/oid2name/README.oid2name b/contrib/oid2name/README.oid2name index 39a3cc60ab..51eb5277f5 100644 --- a/contrib/oid2name/README.oid2name +++ b/contrib/oid2name/README.oid2name @@ -1,17 +1,20 @@ -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: +This utility allows administrators to view the file structure used by +PostgreSQL. Databases are placed in directories based on their OIDs in +pg_database, and the tables in that directory are named by their OIDs, +stored in pg_class.relfilenode. Oid2name connects to the database and +extracts the OID and table name information. - pg_oid2name +--------------------------------------------------------------------------- + +It can be used in four ways: + + +oid2name This will connect to the template1 database and display all databases - in the system. + in the system: - $ ./pg_oid2name + $ oid2name All databases: --------------------------------- 18720 = test1 @@ -21,52 +24,88 @@ table name information. It has 4 ways it can be run: 18735 = postgres 18736 = cssi - pg_oid2name -d test [-x] - This connects to the database test and shows all tables and their OIDs. +oid2name -d test [-x] - $ ./pg_oid2name -d test + This connects to the database test and shows all tables and their OIDs: + + $ 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 + +oid2name -d test -o 18737 +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. + 18737 and the oid for table name testdate respectively: - $ ./pg_oid2name -d test -o 18737 + $ oid2name -d test -o 18737 Tablename of oid 18737 from database "test": --------------------------------- 18737 = ips - $ ./pg_oid2name -d test -t testdate + $ 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. +Sample session: - $ ./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. +$ cd /u/pg/data/base +$ oid2name +All databases: +--------------------------------- +16817 = test2 +16578 = x +16756 = test +1 = template1 +16569 = template0 +16818 = test3 +16811 = floattest - $ ./pg_oid2name -d test -t nothere - Oid of table nothere from database "test": - _______________________________ - No tables with that name found +$ cd 16756 +$ ls 1873* +18730 18731 18732 18735 18736 18737 18738 18739 + +$ oid2name -d test -o 18737 +Tablename of oid 18737 from database "test": +--------------------------------- +18737 = ips + +$ oid2name -d test -t ips +Oid of table ips from database "test": +--------------------------------- +18737 = ips + +$ du * | while read SIZE OID +> do +> echo "$SIZE `oid2name -q -d test -o $OID`" +> done +24 18737 = ips +36 18722 = cities +... + +$ du * | while read SIZE OID +> do +> echo "$SIZE `oid2name -q -d test -o $OID`" +> done | +> sort -rn +2048 19324 = bigtable +1950 23903 = customers +... + + +--------------------------------------------------------------------------- - Mail me with any problems or additions you would like to see. Clearing - house for the code will be at: http://www.crimelabs.net +house for the code will be at: http://www.crimelabs.net b. palmer, bpalmer@crimelabs.net diff --git a/contrib/oid2name/oid2name.c b/contrib/oid2name/oid2name.c index 696239bdb2..6c3e7d420a 100644 --- a/contrib/oid2name/oid2name.c +++ b/contrib/oid2name/oid2name.c @@ -21,6 +21,8 @@ struct options int gettable; int getoid; + int quiet; + int systables; int remotehost; @@ -59,6 +61,8 @@ get_opts(int argc, char **argv, struct options * my_opts) my_opts->gettable = 0; my_opts->getoid = 0; + my_opts->quiet = 0; + my_opts->systables = 0; my_opts->remotehost = 0; @@ -67,7 +71,7 @@ get_opts(int argc, char **argv, struct options * my_opts) my_opts->remotepass = 0; /* get opts */ - while ((c = getopt(argc, argv, "H:p:U:P:d:t:o:xh?")) != -1) + while ((c = getopt(argc, argv, "H:p:U:P:d:t:o:qxh?")) != -1) { switch (c) { @@ -82,13 +86,13 @@ get_opts(int argc, char **argv, struct options * my_opts) /* make sure we set the database first */ if (!my_opts->getdatabase) { - fprintf(stderr, "Sorry, but you must specify a database to dump from.\n"); + fprintf(stderr, "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"); + fprintf(stderr, "You can only specify either oid or table\n"); exit(1); } @@ -102,13 +106,13 @@ get_opts(int argc, char **argv, struct options * my_opts) /* make sure we set the database first */ if (!my_opts->getdatabase) { - fprintf(stderr, "Sorry, but you must specify a database to dump from.\n"); + fprintf(stderr, "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"); + fprintf(stderr, "You can only specify either oid or table\n"); exit(1); } @@ -117,6 +121,10 @@ get_opts(int argc, char **argv, struct options * my_opts) break; + case 'q': + my_opts->quiet = 1; + break; + /* host to connect to */ case 'H': my_opts->remotehost = 1; @@ -149,17 +157,18 @@ get_opts(int argc, char **argv, struct options * my_opts) /* help! (ugly in code for easier editing) */ case '?': case 'h': - fprintf(stderr, "\n\ -Usage: pg_oid2name [-d database [-x] ] [-t table | -o oid] \n\ + fprintf(stderr, "\ +Usage: pg_oid2name [-d database [-x] ] [-t table | -o oid]\n\ default action display all databases\n\ -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\n\ + -q quiet\n\ -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\ + -P password password for username\n\ "); exit(1); break; @@ -402,9 +411,11 @@ main(int argc, char **argv) /* 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"); - + if (!my_opts->quiet) + { + 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); @@ -415,9 +426,11 @@ main(int argc, char **argv) /* 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"); - + if (!my_opts->quiet) + { + 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); @@ -428,9 +441,11 @@ main(int argc, char **argv) /* search for the oid for the given tablename */ if (my_opts->getdatabase) { - printf("All tables from database \"%s\":\n", my_opts->_dbname); - printf("---------------------------------\n"); - + if (!my_opts->quiet) + { + 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); @@ -439,9 +454,11 @@ main(int argc, char **argv) } /* display all the databases for the server we are connected to.. */ - printf("All databases:\n"); - printf("---------------------------------\n"); - + if (!my_opts->quiet) + { + printf("All databases:\n"); + printf("---------------------------------\n"); + } pgconn = sql_conn("template1", my_opts); sql_exec_dumpdb(pgconn); PQfinish(pgconn);