Add -q option to oid2name. Add sample session to README.
authorBruce Momjian <[email protected]>
Wed, 12 Jun 2002 21:09:09 +0000 (21:09 +0000)
committerBruce Momjian <[email protected]>
Wed, 12 Jun 2002 21:09:09 +0000 (21:09 +0000)
contrib/oid2name/README.oid2name
contrib/oid2name/oid2name.c

index 39a3cc60ab263f2feceaa892d025200f51b2de94..51eb5277f516029f478dac356cfeaa240a6dabd9 100644 (file)
@@ -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
 
+---------------------------------------------------------------------------
+
+Sample session:
+
+$ cd /u/pg/data/base
+$ oid2name
+All databases:
+---------------------------------
+16817  = test2
+16578  = x
+16756  = test
+1      = template1
+16569  = template0
+16818  = test3
+16811  = floattest
+
+$ 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
+...
+
+
+---------------------------------------------------------------------------
 
-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
+house for the code will be at:  http://www.crimelabs.net
 
 b. palmer, [email protected]
 
index 696239bdb2464c2509a85a55769807c7112caaf9..6c3e7d420abcfae6e228826eea4cb89d7b302657 100644 (file)
@@ -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);