On Sun, 2004-05-16 at 23:16 -0400, Scot L. Harris wrote:
> >
> > 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.
>
> Thanks. Most of the tables I have are fairly small (for now) but at
> least one of them has many thousands of rows and I did not want to have
> to scan all of them for this information. I understand why the 0=1
> trick will scan every row. I like the idea of getting the meta data
> directly.
>
> None of the books I have seem to discuss this kind of thing. Is the
> pg_class and pg_attribute tables hidden? I see pga_layout and some
> others but not the first two when I do a \d. I do get a column listing
> when I do a \d pg_class so they are there.
>
> And this worked great on my test database/tables.
When I want to figure out something like this I tend to use "psql -E" so
that all queries are echoed before being sent to the backend. Then I do
something like "\d <table>" and see what SQL psql generates internally.
Also, dig here for detailed information on the postgresql data
dictionary tables:
http://www.postgresql.org/docs/7.4/interactive/catalogs.html
the most useful ones are pg_class and pg_attribute usually (for obvious
reasons :-). With 7.4 I also find myself looking at the
pg_stat_activity view from time to time as well.
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 possess a mind not merely twisted, but actually sprained.
-------------------------------------------------------------------------