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'

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

相关推荐
Goat恶霸詹姆斯2 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七2 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
曾经的三心草2 小时前
redis-9-哨兵
数据库·redis·bootstrap
明哥说编程2 小时前
Dataverse自定义表查询优化:D365集成大数据量提速实战【索引配置】
数据库·查询优化·dataverse·dataverse自定义表·索引配置·d365集成·大数据量提速
xiaowu0802 小时前
C# 拆解 “显式接口实现 + 子类强类型扩展” 的设计思想
数据库·oracle
讯方洋哥3 小时前
HarmonyOS App开发——关系型数据库应用App开发
数据库·harmonyos
惊讶的猫3 小时前
Redis持久化介绍
数据库·redis·缓存
Apple_羊先森3 小时前
ORACLE数据库巡检SQL脚本--19、磁盘读次数最高的前5条SQL语句
数据库·sql·oracle
全栈前端老曹4 小时前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈
神梦流4 小时前
ops-math 算子库的扩展能力:高精度与复数运算的硬件映射策略
服务器·数据库