如何在模式中列出postgres中的所有表

时间:2014-07-10 13:58:28

标签: postgresql database-schema command-prompt

我试图列出数据库中的所有表。 \ dt不会这样做,可能是因为名称冲突。我尝试了很多命令,但是当不同模式中的两个表共享一个名称时,只有一个表被\ dt列出:

CREATE DATABASE tester;
\c tester
CREATE SCHEMA hid1;
CREATE SCHEMA hid2;
CREATE TABLE a (a int);
CREATE TABLE b (a int);
CREATE TABLE hid1.a (a int);
CREATE TABLE hid1.b (a int);
CREATE TABLE hid1.c (a int);
CREATE TABLE hid2.a (a int);
CREATE TABLE hid2.d (a int);
\dt
SET search_path TO public,hid1,hid2;
\dt
SET search_path TO hid1,public,hid2;
\dt
SET search_path TO hid2,hid1,public;
\dt

tester=# \dt
       List of relations
 Schema | Name | Type  | Owner
--------+------+-------+-------
 hid1   | a    | table | bob
 hid1   | b    | table | bob
 hid1   | c    | table | bob
 hid2   | d    | table | bob
(4 rows)

tester=# SET search_path TO hid2,hid1,public;
SET
tester=# \dt
       List of relations
 Schema | Name | Type  | Owner
--------+------+-------+-------
 hid1   | b    | table | bob
 hid1   | c    | table | bob
 hid2   | a    | table | bob
 hid2   | d    | table | bob
(4 rows)

了解如何屏蔽三个表?我的理解是模式是命名空间。那是我出错的地方吗?我错过了什么吗?

3 个答案:

答案 0 :(得分:6)

询问所有模式*

中的所有表格
\dt *.*

答案 1 :(得分:1)

一种选择是查询information_schema。这为您提供了许多使用SQL进行过滤和排序的选项。

select table_catalog, table_schema, table_name
from information_schema.tables;

答案 2 :(得分:0)

你可以运行

SELECT * FROM pg_catalog.pg_tables where schemaname="yourschemaname";