以编程方式获取用户拥有的数据库的所有表

时间:2013-09-17 21:36:49

标签: sql postgresql

我创建了以下查询:

    select 
    is_tables.table_name 
from information_schema.tables is_tables 
join pg_tables 
    on is_tables.table_name=pg_tables.tablename 
where 
    is_tables.table_catalog='<mydatabase>' 
    and is_tables.table_schema<>'information_schema' 
    and is_tables.table_schema<>'pg_catalog' 
    and pg_tables.tableowner='<myuser>';

我假设没有数据库供应商独立的查询方式。这是在PostgreSQL中实现我想要的最简单/最短的SQL查询吗?

1 个答案:

答案 0 :(得分:1)

我觉得你很亲密。对象所有者似乎没有出现在information_schema视图中,尽管我可能忽略了它。

select is_tables.table_schema,
       is_tables.table_name 
from information_schema.tables is_tables 
inner join pg_tables 
        on is_tables.table_name = pg_tables.tablename 
       and is_tables.table_schema = pg_tables.schemaname
where is_tables.table_catalog = '<mydatabase>' 
  and is_tables.table_schema <> 'information_schema' 
  and is_tables.table_schema <> 'pg_catalog' 
  and pg_tables.tableowner = '<myuser>';

您需要同时加入表名和模式名称。表名在模式中是唯一的;它们在数据库中并不是唯一的。