The information schema is the slow and sure way: it is standardized and largely portable to other databases that support it. And it will keep working across major versions.
However, views in the information schema often join in many tables from the system catalogs to meet a strictly standardized format - many of which are just dead freight most of the time. This makes them very slow.
The Postgres developers aren't making promises, but basics (like what is needed here) aren't going to change across major versions.
psql (the native command-line interface) takes the fast lane, of course, and queries the source directly. If you start
psql with the parameter
-E, the SQL behind backslash commands like
\d is displayed. Starting from there you can build an answer to your question.
Given one table, is it possible to have a list of the names of the columns for this table.
SELECT attrelid::regclass, attnum, attname
WHERE attrelid = 'myschema.mytable'::regclass
AND attnum > 0
AND NOT attisdropped
ORDER BY attnum;
Much faster than querying
EXPLAIN ANALYZE to see for yourself.
There are also subtle differences in visibility. Detailed comparison: