我试图列出数据库中的所有表。 \ 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)
了解如何屏蔽三个表?我的理解是模式是命名空间。那是我出错的地方吗?我错过了什么吗?
答案 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";