...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:

if [ -z "$1" ]; then
    echo "Please specify a database to query."
    exit 1
MYTABLES="`echo '\t\a\dt' | psql -q ${DATABASE} | cut -f 2 -d '|'`"

for table in ${MYTABLES}; do
    echo '\d '${table}
done | psql ${DATABASE}

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

Hope this helped,
    Grega Bremec
    gregab at p0f dot net

Attachment: pgpTPZRwRibTV.pgp
Description: PGP signature

Reply via email to