Thread: Select all table column names for a specified tablename (per the system catalogs)
Select all table column names for a specified tablename (per the system catalogs)
From
kevin kempter
Date:
Hi List; I want to pull the list of column names from the system catalogs for a specified table. I only want column names, I want to exclude any index names, or other non-column name rows. I got this far (see below) however this query produces additional rows with attname's like tableoid, cmax, xmax ctid, etc. select attname from pg_attribute where attrelid = (select oid from pg_class where relname = 'my_tablename'); Any thoughts ? Thanks in advance...
Re: Select all table column names for a specified tablename (per the system catalogs)
From
Joshua Drake
Date:
On Mon, 22 Sep 2008 16:06:06 -0600 kevin kempter <kevin@kevinkempterllc.com> wrote: > Hi List; > > I want to pull the list of column names from the system catalogs for > a specified table. I only want column names, I want to exclude any > index names, or other non-column name rows. I got this far (see > below) however this query produces additional rows with attname's > like tableoid, cmax, xmax ctid, etc. > > select attname from pg_attribute where attrelid = (select oid from > pg_class where relname = 'my_tablename'); SELECT column_name FROM information_schema.columns WHERE table_name = 'table'; Joshua D. Drake > > Any thoughts ? > > Thanks in advance... > > > -- The PostgreSQL Company since 1997: http://www.commandprompt.com/ PostgreSQL Community Conference: http://www.postgresqlconference.org/ United States PostgreSQL Association: http://www.postgresql.us/ Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
Re: Select all table column names for a specified tablename (per the system catalogs)
From
Tom Lane
Date:
Joshua Drake <jd@commandprompt.com> writes: > kevin kempter <kevin@kevinkempterllc.com> wrote: >> ... I got this far (see >> below) however this query produces additional rows with attname's >> like tableoid, cmax, xmax ctid, etc. >> >> select attname from pg_attribute where attrelid = (select oid from >> pg_class where relname = 'my_tablename'); > SELECT column_name FROM information_schema.columns WHERE table_name = > 'table'; If you don't want to use information_schema (which you might well not want to, because it's a bit slow), the bits you're missing are that you want to exclude columns with attnum <= 0 (system columns) as well as those with attisdropped (dropped columns). I don't care for the subselect part of this either, mainly because it is not schema-aware. Consider select attname from pg_attribute where attrelid = 'my_tablename'::regclass and attnum > 0 and not attisdropped; which generalizes to select attname from pg_attribute where attrelid = 'my_schema.my_tablename'::regclass and attnum > 0 and not attisdropped; whereas your original will not handle that easily. regards, tom lane