PostgreSQL如何将整张表内容存入哈希表?
搞定PostgreSQL查询结果转哈希表的问题
我来帮你修正这个代码问题~你现在的代码有两个关键小问题:
- 单引号里的
#{table}不会被替换成实际的表名,只会当成普通字符串存进哈希键里 - 每次循环都直接把当前行覆盖哈希对应键的值,最后哈希里只会保留最后一行数据,没法存下所有行
修正后的完整代码
def table_content_to_hash(table) hash = {} rs = @pg_conn.exec "SELECT * FROM #{table}" # 先给对应表名的键初始化一个空数组 hash[table] = [] rs.each do |child| # 把每一行数据追加到数组里 hash[table] << child end puts hash end
更简洁的写法(一步到位)
其实PostgreSQL的结果集对象自带to_a方法,可以直接把所有行转成数组,省去循环的步骤:
def table_content_to_hash(table) hash = { table => @pg_conn.exec("SELECT * FROM #{table}").to_a } puts hash end
更新:验证可行的最终版本
用Spickermann的方案优化后,代码已经可以正常运行啦,最终的精简版本就是上面这个,要是你喜欢分步逻辑更清晰的写法,就用第一个修正后的版本就行。
内容的提问来源于stack exchange,提问作者Fatna
相关产品推荐
相关产品推荐

