groovy 如何遍历 postgresql 所有的用户表 ?

在 Groovy 中遍历 PostgreSQL 所有用户表,你可以使用 JDBC 连接数据库并执行 SQL 查询。以下是一个完整的示例:

Groovy 代码示例

groovy 复制代码
import groovy.sql.Sql

def config = [
    url: 'jdbc:postgresql://localhost:5432/your_database',
    user: 'your_username',
    password: 'your_password',
    driver: 'org.postgresql.Driver'
]

try {
    // 创建数据库连接
    def sql = Sql.newInstance(config.url, config.user, config.password, config.driver)
    
    // 查询所有用户表(public 模式)
    def tables = []
    sql.eachRow("""
        SELECT table_name
        FROM information_schema.tables
        WHERE table_schema = 'public'
          AND table_type = 'BASE TABLE'
        ORDER BY table_name
    """) { row ->
        tables << row.table_name
    }
    
    // 输出结果
    println "找到 ${tables.size()} 个用户表:"
    tables.each { table ->
        println "- ${table}"
        
        // 可选:遍历表结构
        def columns = []
        sql.eachRow("""
            SELECT column_name, data_type
            FROM information_schema.columns
            WHERE table_name = '${table}'
            ORDER BY ordinal_position
        """) { col ->
            columns << "${col.column_name} (${col.data_type})"
        }
        println "  列:${columns.join(', ')}"
    }
    
} catch (Exception e) {
    println "数据库操作失败:${e.message}"
    e.printStackTrace()
} finally {
    // 关闭连接
    if (sql) sql.close()
}

依赖配置

确保在 build.gradle 中添加 PostgreSQL 驱动依赖:

groovy 复制代码
dependencies {
    implementation 'org.postgresql:postgresql:42.6.0'
}

关键说明

  1. 数据库连接 :使用 Sql.newInstance() 创建连接,需要替换为你的数据库 URL、用户名和密码。
  2. 查询用户表 :通过 information_schema.tables 系统视图过滤出 public 模式下的普通表(BASE TABLE)。
  3. 遍历结果 :使用 eachRow() 方法处理查询结果集,将表名收集到列表中。
  4. 可选表结构:示例中包含了获取表列信息的代码,可根据需要启用。
  5. 异常处理 :使用 try-catch-finally 确保资源正确关闭。

其他模式的表

如果需要查询其他模式(如 myschema)的表,修改查询条件:

groovy 复制代码
WHERE table_schema = 'myschema'

如果需要查询所有模式的表,移除 table_schema 过滤条件:

groovy 复制代码
WHERE table_type = 'BASE TABLE'

这个脚本可以作为自动化数据库检查或元数据收集工具的基础。

相关推荐
IvorySQL3 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔3 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用3 小时前
Spring对IoC的实现
数据库·spring
hz567896 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC6 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday6 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
半杯咖啡半行码6 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
小米里的大麦6 小时前
16 MySQL 事务
数据库·mysql
西柚小萌新6 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库
邓工说电7 小时前
智慧断路器安全吗?数据加密、离线保护与合规认证全解读
大数据·数据库·人工智能·智能断路器·炜晔科技