Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby PG gem以随机顺序返回列_Ruby_Postgresql_Pg - Fatal编程技术网

Ruby PG gem以随机顺序返回列

Ruby PG gem以随机顺序返回列,ruby,postgresql,pg,Ruby,Postgresql,Pg,最新版本的“pg”gem以随机顺序返回db查询列的结果是否正常?我希望“pg”gem的行为方式与mysql2 gem相同,在通过命令行直接查询数据库时,按照数据显示的顺序返回数据。也许有更好的宝石我应该用。下面这个我的结果示例是使用同一个查询的结果,从books中选择* 第一次执行: "The Shining","9","7808","4156" "Dune","15","4513","1866" "2001: A Space Odyssey","15","4267","2001" "The C

最新版本的“pg”gem以随机顺序返回db查询列的结果是否正常?我希望“pg”gem的行为方式与mysql2 gem相同,在通过命令行直接查询数据库时,按照数据显示的顺序返回数据。也许有更好的宝石我应该用。下面这个我的结果示例是使用同一个查询的结果,从books中选择*

第一次执行:

"The Shining","9","7808","4156"
"Dune","15","4513","1866"
"2001: A Space Odyssey","15","4267","2001"
"The Cat in the Hat","2","1608","1809"
"Bartholomew and the Oobleck","2","1590","1809"
"4156","The Shining","9","7808"
"1866","Dune","15","4513"
"2001","2001: A Space Odyssey","15","4267"
"1809","The Cat in the Hat","2","1608"
"1809","Bartholomew and the Oobleck","2","1590"
"9","The Shining","7808","4156"
"15","Dune","4513","1866"
"15","2001: A Space Odyssey","4267","2001"
"2","The Cat in the Hat","1608","1809"
"2","Bartholomew and the Oobleck","1590","1809"
第二次执行:

"The Shining","9","7808","4156"
"Dune","15","4513","1866"
"2001: A Space Odyssey","15","4267","2001"
"The Cat in the Hat","2","1608","1809"
"Bartholomew and the Oobleck","2","1590","1809"
"4156","The Shining","9","7808"
"1866","Dune","15","4513"
"2001","2001: A Space Odyssey","15","4267"
"1809","The Cat in the Hat","2","1608"
"1809","Bartholomew and the Oobleck","2","1590"
"9","The Shining","7808","4156"
"15","Dune","4513","1866"
"15","2001: A Space Odyssey","4267","2001"
"2","The Cat in the Hat","1608","1809"
"2","Bartholomew and the Oobleck","1590","1809"
第三次执行:

"The Shining","9","7808","4156"
"Dune","15","4513","1866"
"2001: A Space Odyssey","15","4267","2001"
"The Cat in the Hat","2","1608","1809"
"Bartholomew and the Oobleck","2","1590","1809"
"4156","The Shining","9","7808"
"1866","Dune","15","4513"
"2001","2001: A Space Odyssey","15","4267"
"1809","The Cat in the Hat","2","1608"
"1809","Bartholomew and the Oobleck","2","1590"
"9","The Shining","7808","4156"
"15","Dune","4513","1866"
"15","2001: A Space Odyssey","4267","2001"
"2","The Cat in the Hat","1608","1809"
"2","Bartholomew and the Oobleck","1590","1809"
返回结果的代码:

confrom = PG::Connection.new(:user => <myuser>, :password => <mypw>, :port => 5432, :host => <myhost>, :dbname => 'booktown')
results = confrom.exec("select * from books")
results.each do |row|
  row.each_value do |x|
    puts x
  end
end

我猜您使用的是Ruby 1.8.X,其中哈希没有任何定义的顺序。我在pg和Ruby 1.9.3中尝试了类似的代码,每次都是以相同的顺序出现的

在这里:

results.each do |row|
  #...
end
该行将是一个简单的散列。因此,当您在Ruby 1.8中对每个_值进行row时,您不能依赖于x值以任何特定顺序出现;在1.9中,应按插入顺序获取x值

但所有这些其实都无关紧要:

您应该避免选择*。。。除非您在数据库中手动搜索;你应该总是说选择c1,c2。。。这样你就可以确切地知道你从数据库中得到了什么,以及一切将以什么顺序出现。如果有人添加了一列或一列更改了位置,那么您的所有代码都将中断。 您在行中有一个散列,这样您就可以按名称访问结果,这比在位置上乱搞更容易,更不容易出错。
我猜您使用的是Ruby 1.8.X,其中哈希没有任何定义的顺序。我在pg和Ruby 1.9.3中尝试了类似的代码,每次都是以相同的顺序出现的

在这里:

results.each do |row|
  #...
end
该行将是一个简单的散列。因此,当您在Ruby 1.8中对每个_值进行row时,您不能依赖于x值以任何特定顺序出现;在1.9中,应按插入顺序获取x值

但所有这些其实都无关紧要:

您应该避免选择*。。。除非您在数据库中手动搜索;你应该总是说选择c1,c2。。。这样你就可以确切地知道你从数据库中得到了什么,以及一切将以什么顺序出现。如果有人添加了一列或一列更改了位置,那么您的所有代码都将中断。 您在行中有一个散列,这样您就可以按名称访问结果,这比在位置上乱搞更容易,更不容易出错。
完美的非常感谢您花时间回复。select语句只是为了返回一些数据,但我一定会注意到您对我的生产语句的警告。完美。非常感谢您花时间回复。select语句只是为了返回一些数据,但我一定会注意到您对我的生产语句的警告。