我有一个这样的数组:
chats = [
["1", "First 1 Last 1", "3 -> 1", "1394994921"],
["2", "First 2 Last 2", "2 -> 3", "1394994921"]
]
这是PGresult#values
的回复。为什么是第一个&当它们实际上是String
&时,每行中的最后一个元素作为bigint
在Ruby中返回。 PostgreSQL中分别integer
?如何让它们成为Ruby中的Fixnum
?
我想:
chats = [
[1, "First 1 Last 1", "3 -> 1", 1394994921],
[2, "First 2 Last 2", "2 -> 3", 1394994921]
]
答案 0 :(得分:1)
显然,postgres Wire格式始终以字符串形式传输值,并且没有简单的方法(即没有额外的往返)来查找实际的数据类型,因此客户端库将所有内容都以字符串形式返回。
所以:
def psql_fix_int_field_stupidity(res,fields)
res.map do |row|
fields.each do |f|
row[f]=row[f].to_i
end
row
end
end
该函数通常可用于对结果集进行一半的修补:
psql_fix_int_field_stupidity(conn.exec( "SELECT * FROM product" ), %W< id, parent >)
但是您仍然需要知道列名。
答案 1 :(得分:0)
chats.each {|x| x[0] = x[0].to_i; x[-1] = x[-1].to_i}
答案 2 :(得分:0)
尝试通过以下方式启用基本类型转换:
conn.type_map_for_results = PG::BasicTypeMapForResults.new(conn)