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