如何在postgresql中查找具有特定列的表

Has*_*bal 79 sql database postgresql postgresql-9.1

我正在使用postgresql 9.1.我有一个表的列名.是否有可能找到拥有此列的表格?怎么样?提前致谢.

Rav*_*har 128

你也可以

 select table_name from information_schema.columns where column_name = 'your_column_name'
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是,我见过这样的例子,这个查询显示了@RomanPekar 的查询没有显示的表;我想知道为什么会这样 (2认同)
  • @KenBellows 我猜 pg_class / pg_attirbute 可以随着 Postgresql 的新版本而改变,而 information_schema 是在 ANSI 规范中定义的。所以对于一般查询,我会说这个答案更好。例如,有时我需要对象 id,在这种情况下,我需要使用 db-engine 特定的表。另外,information_schema 视图始终是数据库引擎特定表的额外步骤,有时会导致(稍微)更差的性能 (2认同)

Rom*_*kar 54

您可以查询系统目录:

select c.relname
from pg_class as c
    inner join pg_attribute as a on a.attrelid = c.oid
where a.attname = <column name> and c.relkind = 'r'
Run Code Online (Sandbox Code Playgroud)

sql fiddle demo

  • 请注意,此查询似乎不接受 '%' 通配符,而 Ravi 的答案中的查询接受。 (2认同)

jut*_*tky 7

我已使用@Roman Pekar的查询作为基础并添加了架构名称(在我的情况下相关)

select n.nspname as schema ,c.relname
    from pg_class as c
    inner join pg_attribute as a on a.attrelid = c.oid
    inner join pg_namespace as n on c.relnamespace = n.oid
where a.attname = 'id_number' and c.relkind = 'r'
Run Code Online (Sandbox Code Playgroud)

sql fiddle demo


Dmi*_*aev 5

简单地:

$ psql mydatabase -c '\d *' | grep -B10 'mycolname'
Run Code Online (Sandbox Code Playgroud)

如果需要,放大 -B 偏移量以获取表名