Re: table column information

From: Nick Barr <nicky(at)chuckie(dot)co(dot)uk>
To: "Scot L(dot) Harris" <webid(at)cfl(dot)rr(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: table column information
Date: 2004-05-17 08:06:26
Message-ID: 40A87282.5030401@chuckie.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Scot L. Harris wrote:
> Currently using Postgresql 7.2.4-5.80 with php 4.2.2.-8.0.8 on a redhat
> 8.0 system.
>
> I am writing some php scripts where I want to generate a list of the
> column names in a particular table that the user selects. I could take
> the brute force method and hard code the column names but then every
> time I add a new table or modify an existing one I would have to modify
> the code. What I want is to have a generic function that given the
> table name it will pull the column names for my use.
>
> I need to get the table column names for several tables I have setup. I
> know if I do a select * from tablename I can then use the pg_fieldname
> function to pull the column names for all columns.
>
> But I don't think I want to select the entire contents of the table
> every time I want to get the names of the columns. I know this will
> work but I think performance will be very poor.
>
> Trying to find something the equivalent of doing a \d tablename in psql.
>
>
> I did see a function to pull meta data but that is in a 4.3 version of
> php.
>
> I have also been trying to track down some information on the pga_layout
> table. This appears to be a system table that might contain the
> information I want but it does not list every table I have created. Not
> sure what that is.
>
> The books I have do not say much if anything about such system tables.
>
> Any help or pointers would be appreciated.
>
>

Hi,

You want to be querying the postgres catalog tables. See here for more info:

http://www.postgresql.org/docs/7.2/static/catalogs.html

The tables you want to look at are pg_class and pg_attribute. You will
want to query pg_class to get the oid of the table. Then you can query
pg_attribute using that oid to get the column names and types. This is
all the \d tablename does in psql, send a query to the db.

I cant remember exactly what you need to do but you can find out what
query psql sends to the backend by adding the -E parameter. For example:

psql -d tesdb -E

Then whenever psql fires off a query you can see it. So you could do:

psql -d testdb -R

testdb> \d sometable

And you will see what the query that you would need to execute to get
the column names ;-)

HTH

Nick

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Ulrich Wisser 2004-05-17 09:49:18 type conversion date <-> timestamp
Previous Message Troels Arvin 2004-05-17 08:02:27 Re: SQL norm views to describes tables (and probably some other things) of a database ?