You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在PostgreSQL中列出模式并获取指定模式下的所有表?

针对你问的PostgreSQL获取当前数据库模式列表、以及特定模式下表的问题,分享几个实用的方法:

获取当前数据库的模式列表

有两种常用方式,按需选择:

  • psql快捷元命令:直接在psql终端输入 \dn,回车后就能看到当前连接数据库里的所有模式(包括系统默认的publicpg_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

火山引擎 最新活动