Add new psql \da, \do, and \dT options.

This commit is contained in:
Bruce Momjian 1997-11-14 21:38:25 +00:00
parent 208dae3727
commit 4cbc06cff1
5 changed files with 107 additions and 52 deletions

View File

@ -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 "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
echo "vacuuming template1"
echo "vacuum" | postgres -F -Q -D$PGDATA template1 2>&1 > /dev/null |\
grep -v "^DEBUG:"

View File

@ -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 [<captn>] -- set html3 caption (currently '%s')\n", pset->opt.caption ? pset->opt.caption : "");
fprintf(fout, " \\connect <dbname|-> <user> -- connect to new database (currently '%s')\n", PQdb(pset->db));
fprintf(fout, " \\copy table {from | to} <fname>\n");
fprintf(fout, " \\d [<table>] -- list tables and indices in database or columns in <table>, * for all\n");
fprintf(fout, " \\d [<table>] -- list tables and indices, columns in <table>, or * for all\n");
fprintf(fout, " \\da -- list aggregates\n");
fprintf(fout, " \\dd [<object>]- 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 [<fname>] -- edit the current query buffer or <fname>\n");
fprintf(fout, " \\E [<fname>] -- edit the current query buffer or <fname>, and execute\n");
fprintf(fout, " \\f [<sep>] -- 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 <cmd> 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 */
{

View File

@ -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("");

View File

@ -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]"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 658 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB