From: Bruce Momjian Date: Fri, 14 Nov 1997 21:38:25 +0000 (+0000) Subject: Add new psql \da, \do, and \dT options. X-Git-Tag: REL6_3~641 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4cbc06cff136f92e6303d8ca9a2c6e4d6c1d0b00;p=postgresql Add new psql \da, \do, and \dT options. --- diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh index 6319be6870..ed131fab21 100644 --- a/src/bin/initdb/initdb.sh +++ b/src/bin/initdb/initdb.sh @@ -26,7 +26,7 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.25 1997/11/13 03:22:34 momjian Exp $ +# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.26 1997/11/14 21:37:35 momjian Exp $ # #------------------------------------------------------------------------- @@ -346,11 +346,12 @@ fi echo +echo "loading pg_description" +echo "copy pg_description from '$TEMPLATE_DESCR'" | postgres -F -Q -D$PGDATA template1 > /dev/null +echo "copy pg_description from '$GLOBAL_DESCR'" | postgres -F -Q -D$PGDATA template1 > /dev/null + echo "vacuuming template1" echo "vacuum" | postgres -F -Q -D$PGDATA template1 2>&1 > /dev/null |\ grep -v "^DEBUG:" -echo "loading pg_description" -echo "copy pg_description from '$TEMPLATE_DESCR'" | postgres -F -Q -D$PGDATA template1 > /dev/null -echo "copy pg_description from '$GLOBAL_DESCR'" | postgres -F -Q -D$PGDATA template1 > /dev/null diff --git a/src/bin/psql/psql.c b/src/bin/psql/psql.c index 4c54483763..14916801d6 100644 --- a/src/bin/psql/psql.c +++ b/src/bin/psql/psql.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.104 1997/11/14 05:57:35 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.105 1997/11/14 21:37:41 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -135,14 +135,6 @@ HandleSlashCmds(PsqlSettings *pset, char *line, char *query); static int MainLoop(PsqlSettings *pset, char *query, FILE *source); - -/* probably should move this into libpq */ -void -PQprint(FILE *fp, - PGresult *res, - PQprintOpt *po -); - static FILE *setFout(PsqlSettings *pset, char *fname); /* @@ -224,11 +216,14 @@ slashUsage(PsqlSettings *pset) fprintf(fout, " \\C [] -- set html3 caption (currently '%s')\n", pset->opt.caption ? pset->opt.caption : ""); fprintf(fout, " \\connect -- connect to new database (currently '%s')\n", PQdb(pset->db)); fprintf(fout, " \\copy table {from | to} \n"); - fprintf(fout, " \\d [] -- list tables and indices in database or columns in
, * for all\n"); + fprintf(fout, " \\d [
] -- list tables and indices, columns in
, or * for all\n"); + fprintf(fout, " \\da -- list aggregates\n"); fprintf(fout, " \\dd []- list comment for table, field, type, function, or operator.\n"); - fprintf(fout, " \\di -- list only indices in database\n"); - fprintf(fout, " \\ds -- list only sequences in database\n"); - fprintf(fout, " \\dt -- list only tables in database\n"); + fprintf(fout, " \\di -- list only indices\n"); + fprintf(fout, " \\do -- list operators\n"); + fprintf(fout, " \\ds -- list only sequences\n"); + fprintf(fout, " \\dt -- list only tables\n"); + fprintf(fout, " \\dT -- list types\n"); fprintf(fout, " \\e [] -- edit the current query buffer or \n"); fprintf(fout, " \\E [] -- edit the current query buffer or , and execute\n"); fprintf(fout, " \\f [] -- change field separater (currently '%s')\n", pset->opt.fieldSep); @@ -751,20 +746,19 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) strcat(descbuf, "FROM pg_type, pg_description "); strcat(descbuf, "WHERE pg_type.typname = '"); strcat(descbuf, object); - strcat(descbuf, "'" ); - strcat(descbuf, " and pg_type.oid = pg_description.objoid " ); + strcat(descbuf, "' and "); + strcat(descbuf, " pg_type.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; - else if (PQntuples(res) <= 0) { PQclear(res); descbuf[0] = '\0'; strcat(descbuf, "SELECT DISTINCT description "); - strcat(descbuf, "FROM pg_type, pg_description "); - strcat(descbuf, "WHERE pg_type.typname = '"); + strcat(descbuf, "FROM pg_proc, pg_description "); + strcat(descbuf, "WHERE pg_proc.proname = '"); strcat(descbuf, object); strcat(descbuf, "'" ); - strcat(descbuf, " and pg_type.oid = pg_description.objoid " ); + strcat(descbuf, " and pg_proc.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; else if (PQntuples(res) <= 0) @@ -772,11 +766,11 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) PQclear(res); descbuf[0] = '\0'; strcat(descbuf, "SELECT DISTINCT description "); - strcat(descbuf, "FROM pg_proc, pg_description "); - strcat(descbuf, "WHERE pg_proc.proname = '"); + strcat(descbuf, "FROM pg_operator, pg_description "); + strcat(descbuf, "WHERE pg_operator.oprname = '"); strcat(descbuf, object); strcat(descbuf, "'" ); - strcat(descbuf, " and pg_proc.oid = pg_description.objoid " ); + strcat(descbuf, " and pg_operator.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; else if (PQntuples(res) <= 0) @@ -784,26 +778,13 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) PQclear(res); descbuf[0] = '\0'; strcat(descbuf, "SELECT DISTINCT description "); - strcat(descbuf, "FROM pg_operator, pg_description "); - strcat(descbuf, "WHERE pg_operator.oprname = '"); + strcat(descbuf, "FROM pg_aggregate, pg_description "); + strcat(descbuf, "WHERE pg_aggregate.aggname = '"); strcat(descbuf, object); strcat(descbuf, "'" ); - strcat(descbuf, " and pg_operator.oid = pg_description.objoid " ); + strcat(descbuf, " and pg_aggregate.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; - else if (PQntuples(res) <= 0) - { - PQclear(res); - descbuf[0] = '\0'; - strcat(descbuf, "SELECT DISTINCT description "); - strcat(descbuf, "FROM pg_aggregate, pg_description "); - strcat(descbuf, "WHERE pg_aggregate.aggname = '"); - strcat(descbuf, object); - strcat(descbuf, "'" ); - strcat(descbuf, " and pg_aggregate.oid = pg_description.objoid " ); - if (!(res = PSQLexec(pset, descbuf))) - return -1; - } } } } @@ -1584,7 +1565,7 @@ HandleSlashCmds(PsqlSettings *pset, { int status = CMD_SKIP_LINE; char *optarg; - + bool success; /* * Pointer inside the string to the argument of the slash * command, assuming it is a one-character slash command. If it's not @@ -1696,20 +1677,82 @@ HandleSlashCmds(PsqlSettings *pset, } } break; - case 'd': /* \d describe tables or columns in a - * table */ - if (strncmp(cmd, "dd", 2) == 0) + case 'd': /* \d describe database information */ + if (strncmp(cmd, "da", 2) == 0) + /* aggregates */ + SendQuery(&success, pset,"\ + SELECT a.aggname AS aggname, \ + t.typname AS typname, \ + obj_description(a.oid) as description \ + FROM pg_aggregate a, pg_type t \ + WHERE a.aggbasetype = t.oid \ + ORDER BY aggname, typname;", + false, false, 0); + else if (strncmp(cmd, "dd", 2) == 0) /* descriptions */ objectDescription(pset, optarg+1, NULL); else if (strncmp(cmd, "di", 2) == 0) /* only indices */ tableList(pset, false, 'i'); + else if (strncmp(cmd, "do", 2) == 0) + { + /* operators */ + SendQuery(&success, pset,"\ + SELECT t0.typname AS result, \ + t1.typname AS left_type, \ + t2.typname AS right_type, \ + o.oprname AS operatr, \ + p.proname AS func_name, \ + obj_description(o.oid) as description \ + FROM pg_proc p, pg_type t0, \ + pg_type t1, pg_type t2, \ + pg_operator o \ + WHERE p.prorettype = t0.oid AND \ + RegprocToOid(o.oprcode) = p.oid AND \ + p.pronargs = 2 AND \ + o.oprleft = t1.oid AND \ + o.oprright = t2.oid \ + ORDER BY result, left_type, right_type, operatr;", + false, false, 0); + SendQuery(&success, pset,"\ + SELECT o.oprname AS left_unary, \ + t.typname AS operand, \ + r.typname AS return_type, \ + obj_description(o.oid) as description \ + FROM pg_operator o, pg_type t, pg_type r \ + WHERE o.oprkind = 'l' AND \ + o.oprright = t.oid AND \ + o.oprresult = r.oid \ + ORDER BY operand;", + false, false, 0); + SendQuery(&success, pset,"\ + SELECT o.oprname AS right_unary, \ + t.typname AS operand, \ + r.typname AS return_type, \ + obj_description(o.oid) as description \ + FROM pg_operator o, pg_type t, pg_type r \ + WHERE o.oprkind = 'r' AND \ + o.oprleft = t.oid AND \ + o.oprresult = r.oid \ + ORDER BY operand;", + false, false, 0); + } else if (strncmp(cmd, "ds", 2) == 0) /* only sequences */ tableList(pset, false, 'S'); else if (strncmp(cmd, "dt", 2) == 0) /* only tables */ tableList(pset, false, 't'); + else if (strncmp(cmd, "dT", 2) == 0) + /* types */ + SendQuery(&success, pset,"\ + SELECT typname AS type, \ + obj_description(oid) as description \ + FROM pg_type \ + WHERE typrelid = 0 AND \ + typname !~ '^_.*' \ + ORDER BY type;", + false, false, 0); else if (!optarg) /* show tables, sequences and indices */ tableList(pset, false, 'b'); @@ -1718,9 +1761,12 @@ HandleSlashCmds(PsqlSettings *pset, if (tableList(pset, false, 'b') == 0) tableList(pset, true, 'b'); } - else + else if (strncmp(cmd, "d ", 2) == 0) /* describe the specified table */ tableDesc(pset, optarg, NULL); + else + slashUsage(pset); + break; case 'e': /* edit */ { diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 4d5972c224..a191d00837 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_proc.h,v 1.34 1997/11/13 03:23:07 momjian Exp $ + * $Id: pg_proc.h,v 1.35 1997/11/14 21:37:54 momjian Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -1649,6 +1649,8 @@ DATA(insert OID = 1346 ( int2 PGUID 14 f t f 1 f 21 "25" 100 0 0 100 "sele DESCR(""); DATA(insert OID = 1347 ( int4 PGUID 14 f t f 1 f 23 "25" 100 0 0 100 "select text_int4($1)" - )); DESCR(""); +DATA(insert OID = 1348 ( obj_description PGUID 14 f t f 1 f 25 "26" 100 0 0 100 "select description from pg_description where objoid = $1" - )); +DESCR(""); DATA(insert OID = 1350 ( datetime PGUID 14 f t f 1 f 1184 "1184" 100 0 0 100 "select $1" - )); DESCR(""); diff --git a/src/man/psql.1 b/src/man/psql.1 index a045685cb3..78acab3099 100644 --- a/src/man/psql.1 +++ b/src/man/psql.1 @@ -1,6 +1,6 @@ .\" This is -*-nroff-*- .\" XXX standard disclaimer belongs here.... -.\" $Header: /cvsroot/pgsql/src/man/Attic/psql.1,v 1.14 1997/11/13 03:36:42 momjian Exp $ +.\" $Header: /cvsroot/pgsql/src/man/Attic/psql.1,v 1.15 1997/11/14 21:38:16 momjian Exp $ .TH PSQL UNIX 1/20/96 PostgreSQL PostgreSQL .SH NAME psql \(em run the interactive query front-end @@ -292,14 +292,20 @@ is specified, list the columns in If table name is .IR *, list all tables and column information for each tables. +.IP "\eda" +List aggregates. .IP "\edd object" List the description of the table, table.column, type, operator, or aggregate. .IP "\edi" List only indexes. -.IP "\edt" -List only tables. +.IP "\edo" +List operators. .IP "\eds" List only sequences. +.IP "\edt" +List only tables. +.IP "\edT" +List types. .IP "\ee [\fIfilename\fR]" Edit the current query buffer or \fIfile\fR. .IP "\eE [\fIfilename\fR]" diff --git a/src/tools/backend/flow.gif b/src/tools/backend/flow.gif index 1076af06f4..177bfc729d 100644 Binary files a/src/tools/backend/flow.gif and b/src/tools/backend/flow.gif differ