Skip site navigation (1) Skip section navigation (2)

Re: table column information

From: Andrew McMillan <andrew(at)catalyst(dot)net(dot)nz>
To: ljb <ljb220(at)mindspring(dot)com>, webid(at)cfl(dot)rr(dot)com
Cc: pgsql-php(at)postgresql(dot)org
Subject: Re: table column information
Date: 2004-05-17 02:55:32
Message-ID: 1084762532.4822.36.camel@lamb.mcmillan.net.nz (view raw or flat)
Thread:
Lists: pgsql-php
On Mon, 2004-05-17 at 00:19 +0000, ljb wrote:
> >
> > 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.  
> >...
> 
> You almost got it - just do "select * from tablename where 0=1", which returns
> no rows but will give you the fieldnames. A portable and (I think)
> efficient way to get table column names.

It can be a cute trick, and I use it myself from time to time
(especially for "CREATE TABLE AS SELECT ..." where I want an empty table
with the same structure, pre v 7.4 which can do this anyway).  You
should be aware however that as written above it will almost invariably
force a full-table scan!

You can also select the column names from the database metadata
directly:

SELECT attname 
  FROM pg_class c join pg_attribute a on c.oid = a.attrelid
  WHERE c.relname = '<your table name>' 
    AND a.attnum >= 0;

This approach won't get killed by the efficiency problems above.

Cheers,
					Andrew.
-------------------------------------------------------------------------
Andrew @ Catalyst .Net .NZ  Ltd,  PO Box 11-053,  Manners St,  Wellington
WEB: http://catalyst.net.nz/             PHYS: Level 2, 150-154 Willis St
DDI: +64(4)916-7201       MOB: +64(21)635-694      OFFICE: +64(4)499-2267
           You have many friends and very few living enemies.
-------------------------------------------------------------------------


In response to

Responses

pgsql-php by date

Next:From: Scot L. HarrisDate: 2004-05-17 03:16:15
Subject: Re: table column information
Previous:From: Scot L. HarrisDate: 2004-05-17 01:35:32
Subject: Re: table column information

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group