如何在PostgreSQL中列出模式并获取指定模式下的所有表?
针对你问的PostgreSQL获取当前数据库模式列表、以及特定模式下表的问题,分享几个实用的方法:
获取当前数据库的模式列表
有两种常用方式,按需选择:
psql快捷元命令:直接在psql终端输入
\dn,回车后就能看到当前连接数据库里的所有模式(包括系统默认的public、pg_catalog,以及你自定义的模式)。如果需要查看模式的所有者等详细信息,用\dn+即可。SQL查询(灵活可控):如果需要用SQL语句获取,记得加上当前数据库的过滤条件,避免拿到其他库的模式:
SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_catalog = current_database() ORDER BY table_schema;这里的
DISTINCT用来去重(同一个模式会对应多个表)。要是你只想看用户自定义模式(排除系统自带的pg_开头模式和information_schema),可以查PostgreSQL原生的系统表pg_namespace:SELECT nspname AS schema_name FROM pg_namespace WHERE NOT nspname LIKE 'pg_%' AND nspname != 'information_schema' ORDER BY nspname;这个查询比查information_schema更轻量,适合频繁调用的场景。
获取特定模式下的所有表
同样提供两种常用方法:
psql元命令:在psql里输入
\dt 目标模式名.*,比如查询public模式的表就输\dt public.*。如果需要包含视图、序列等对象,换成\d 目标模式名.*即可。SQL查询:用information_schema的写法:
SELECT table_name FROM information_schema.tables WHERE table_schema = '目标模式名' AND table_catalog = current_database() AND table_type = 'BASE TABLE' -- 仅查普通表,需要视图的话去掉此行 ORDER BY table_name;或者用更轻量的
pg_tables系统表:SELECT tablename FROM pg_tables WHERE schemaname = '目标模式名' ORDER BY tablename;
内容的提问来源于stack exchange,提问作者user9821941




