如何用Ruby在PostgreSQL中以美观表格打印SQL查询结果
用Ruby实现PostgreSQL查询结果的美观表格输出
没问题,我帮你搞定这个需求!要把PostgreSQL里那张统计表行数的查询结果,用Ruby输出成像psql那样美观的表格,咱们有两种实用方案,看你偏好哪种:
方案一:手动实现表格格式化(无需额外依赖)
这种方式不用装额外的表格库,自己处理列宽计算和格式拼接,灵活性更高。
步骤1:安装PostgreSQL Ruby驱动
首先确保你装了pg gem,用来连接PostgreSQL:
gem install pg
步骤2:完整代码示例
require 'pg' # 数据库连接配置,根据你的实际情况修改 db_config = { host: 'localhost', port: 5432, dbname: 'dvdrental', user: 'your_username', password: 'your_password' } # 执行查询并格式化输出表格 begin # 建立数据库连接 conn = PG.connect(db_config) # 你提供的SQL查询语句 sql = <<~SQL SELECT nspname AS schemaname, relname, reltuples FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND relkind='r' ORDER BY reltuples DESC; SQL # 执行查询,获取结果集和字段名 result = conn.exec(sql) columns = result.fields rows = result.to_a # 计算每列的最大宽度(表头+所有行内容的最大长度) column_widths = columns.each_with_index.map do |col, idx| [col.length, rows.map { |row| row[idx].to_s.length }.max].max end # 打印表头 header = columns.each_with_index.map { |col, idx| col.ljust(column_widths[idx]) }.join(' | ') puts header # 打印分隔线 separator = column_widths.map { |width| '-' * width }.join('-+-') puts separator # 打印每一行数据 rows.each do |row| formatted_row = row.each_with_index.map { |val, idx| val.to_s.ljust(column_widths[idx]) }.join(' | ') puts formatted_row end rescue PG::Error => e puts "数据库操作出错:#{e.message}" ensure conn.close if conn end
方案二:用现成表格库快速实现(推荐)
如果不想自己写格式化逻辑,可以用terminal-table这个专门用于终端表格输出的库,代码更简洁。
步骤1:安装依赖
gem install pg terminal-table
步骤2:简化版代码示例
require 'pg' require 'terminal-table' # 数据库连接配置,根据实际情况修改 db_config = { host: 'localhost', port: 5432, dbname: 'dvdrental', user: 'your_username', password: 'your_password' } begin conn = PG.connect(db_config) sql = <<~SQL SELECT nspname AS schemaname, relname, reltuples FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND relkind='r' ORDER BY reltuples DESC; SQL result = conn.exec(sql) # 把查询结果转换成表格需要的格式:表头 + 数据行 table_rows = [result.fields] + result.to_a # 创建并打印表格 table = Terminal::Table.new(rows: table_rows) puts table rescue PG::Error => e puts "数据库操作出错:#{e.message}" ensure conn.close if conn end
两种方案都能输出类似psql的美观表格,方案二更省心,适合快速开发;方案一适合需要自定义格式细节的场景。
内容的提问来源于stack exchange,提问作者Fatna
相关产品推荐
相关产品推荐

