在PSQL中查找表名

时间:2013-06-28 21:06:38

标签: psql

我的数据库有很多表(比如说400+),我只记得我要找的那个名字的一部分。

我知道\d会显示所有表格,但这太过于难以理解。是否有一些命令列出名称与给定正则表达式匹配的所有表?

由于

3 个答案:

答案 0 :(得分:14)

它内置于psql,您可以在\d\dt等中使用通配符,例如:

craig=> \dt test*
         List of relations
 Schema |   Name    | Type  | Owner 
--------+-----------+-------+-------
 public | test      | table | craig
 public | testtable | table | craig
 public | testu     | table | craig
 public | testx     | table | craig
(4 rows)

您需要使用\dt,因为\d会为每个表显示详细信息,而不仅仅是列出表格。

您也可以使用模式执行此操作,例如:

\dt *.sometable

将列出任何架构中名为sometable的所有表。

比针对加入pg_class的{​​{1}}或查询pg_namespace撰写查询更方便。

接受通常的globbing语法,其中information_schema是任何单个字符,?是零个或多个字符。因此*将列出所有具有四个字符名称的表。

允许使用多个通配符,例如:

\dt ????

答案 1 :(得分:3)

除非你把它变成proc,否则不太方便,但是;

SELECT * FROM pg_tables WHERE SUBSTRING(tablename FROM '<regex>') <> '';

为了使它更方便,你可以创建并调用proc作为;

CREATE FUNCTION ft(TEXT) RETURNS SETOF pg_tables AS 
  'SELECT * FROM pg_tables WHERE SUBSTRING(tablename from $1) <> '''';'
LANGUAGE SQL;

SELECT * FROM ft('.*oc.*')      -- Gets all tables matching `.*oc.*`

An SQLfiddle to test both with

答案 2 :(得分:0)

有一个名为pg_tables的表,其中包含所有表名。