簡體   English   中英

Rails / PostgreSQL:整數數組列中的查詢值

[英]Rails/PostgreSQL : query value inside an integer array column

我錯了我或這個查詢?

我有一個帶有開放日期列的Shop模型,這是一個整數數組(你可以用Postgres做的事情):

days= [1,1,1,1,0,0,0]

當我查詢時:

shops = Shop.where('days[0] = 1')

我得到一個空的ActiveRecord關系。

=> #<ActiveRecord::Relation []>

當我帶這種陣列的商店...

shop = Shop.first
=> #<Shop id: 215, days: [1, 1, 1, 1, 0, 0, 0],…

如果我做

shop.days[0]

我明白了

=> 1

我真的不明白。

默認情況下, PostgreSQL對數組使用一種基於編號的約定,即n個元素的數組以array[1]開頭,以array[n]結尾。

- 來源

這只是你的榜樣。 您的索引超出范圍,因此它與任何記錄都不匹配, days[0]NULL 到處。 啟動rails db並計算:

SELECT * FROM shops WHERE days[0] IS NULL;

但是“默認情況下”是什么? 是否可以在模式級別定義數組邊界,這樣這永遠不會成為問題?

嗯......這是Rails的錯,我很害怕。 如果它甚至被認為是一個“問題”。 為了使數組為零索引,它應該在SQL中保存。 我在SQL中試過它,它的工作原理是:

INSERT INTO shops
        (days,           created_at,        updated_at)
  values('[0:2]={1, 1, 0}', current_timestamp, current_timestamp);

不幸的是,Rails由於某種原因失去了界限:

 Shop.create(days: '[0:3]={6, 7, 8, 9}')
 > INSERT ... [["days", "{6,7,8,9}"], ...]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM