...and on Wed, Dec 15, 2004 at 06:38:22AM -0800, sarlav kumar used the keyboard:
Hi All,
I would like to write the output of the \d command on all tables in a
database to an output file. There are more than 200 tables in the database. I
am aware of \o command to write the output to a file. But, it will be tough
to do the \d for each table manually and write the output to a file. Is there
a command/ way in which I can achieve this without having to do it for each
table?
Any help in this regard would be really appreciated.
Hello Sarlav.
You don't say which platform you're doing this on. If it's Windows, someone
else will have to advise you; if it's a UNIX-like platform though, the
following simple shell script should be helpful in achieving what you want:
---CUT-HERE---
#!/bin/bash
if [ -z $1 ]; then
echo Please specify a database to query.
exit 1
fi
DATABASE=$1
MYTABLES=`echo '\t\a\dt' | psql -q ${DATABASE} | cut -f 2 -d '|'`
for table in ${MYTABLES}; do
echo '\d '${table}
done | psql ${DATABASE}
---CUT-HERE---
You can store this script into a file called, for example, describe.sh and
invoke it like so:
$ ./describe.sh mydatabase description.txt
It should then do what you want.
Should you have additional arguments to specify to psql, such as a host,
a username, a password and so on, it is easy to modify the script to do
that. Just supply those arguments in places where the psql command is
used.
Hope this helped,
--
Grega Bremec
gregab at p0f dot net
pgpTPZRwRibTV.pgp
Description: PGP signature