Re: getting table names

From: "scott(dot)marlowe" <scott(dot)marlowe(at)ihs(dot)com>
To: Mark Nelson <MCN(at)cc(dot)usu(dot)edu>
Cc: <PGSQL-PHP(at)postgresql(dot)org>
Subject: Re: getting table names
Date: 2002-12-18 22:54:55
Message-ID: Pine.LNX.4.33.0212181551590.4488-100000@css120.ihs.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-php

On Wed, 18 Dec 2002, Mark Nelson wrote:

> Hi,
>
> I can't seem to find how to do this anywhere. I'm trying to query
> the db and have it return the name of each of the tables in the
> db. Something like \dt does in psql, but from PHP. Any ideas?

Well, the quick and dirty trick is to run psql with the -E switch which
will rEveal the sql psql is using to do it's dirty work. In this case,
7.2 and 7.3 are pretty similar. For postgresql 7.2 it's:

SELECT c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN
'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
u.usename as "Owner"
FROM pg_class c LEFT JOIN pg_user u ON c.relowner = u.usesysid
WHERE c.relkind IN ('r','v','S','')
AND c.relname !~ '^pg_'
ORDER BY 1;

For 7.3 it's:

SELECT n.nspname as "Schema",
c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN
'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
u.usename as "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','v','S','')
AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;

note that you can probably trim a fair bit off of these queries to get
just the table names.

In response to

Browse pgsql-php by date

  From Date Subject
Next Message Thorsten Haude 2002-12-18 22:55:40 Re: pg_fetch_array()
Previous Message Mark Nelson 2002-12-18 22:29:03 getting table names