我的数据库有很多表(比如说400+),我只记得我要找的那个名字的一部分。
我知道\d
会显示所有表格,但这太过于难以理解。是否有一些命令列出名称与给定正则表达式匹配的所有表?
由于
答案 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.*`
答案 2 :(得分:0)
有一个名为pg_tables
的表,其中包含所有表名。