From 4cbc06cff136f92e6303d8ca9a2c6e4d6c1d0b00 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 14 Nov 1997 21:38:25 +0000 Subject: [PATCH] Add new psql \da, \do, and \dT options. --- src/bin/initdb/initdb.sh | 9 +-- src/bin/psql/psql.c | 132 +++++++++++++++++++++++----------- src/include/catalog/pg_proc.h | 4 +- src/man/psql.1 | 12 +++- src/tools/backend/flow.gif | Bin 674098 -> 7379 bytes 5 files changed, 106 insertions(+), 51 deletions(-) diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh index 6319be6870d..ed131fab21f 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 4c544837631..14916801d69 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 4d5972c224d..a191d008372 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 a045685cb36..78acab3099e 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 1076af06f425fe342007c70de4a5814e19fd44da..177bfc729d9b995964f005899ae19dfeec74587e 100644 GIT binary patch literal 7379 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 W6R5VS1vTwxzWy7h{r&~;@BTMWEYgSo -- 2.47.2