PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie Railsowe typu danych Postgres JSON

Dla każdego, kto się o to natknie. Wymyśliłem listę zapytań wykorzystujących typ danych ActiveRecord i Postgres' JSON. Możesz to zmienić, aby było bardziej przejrzyste.

Dokumentacja do operatorów JSON używanych poniżej:https://www.postgresql.org/docs/current/functions-json.html.

# Sort based on the Hstore data:
Post.order("data->'hello' DESC")
=> #<ActiveRecord::Relation [
    #<Post id: 4, data: {"hi"=>"23", "hello"=>"22"}>, 
    #<Post id: 3, data: {"hi"=>"13", "hello"=>"21"}>, 
    #<Post id: 2, data: {"hi"=>"3", "hello"=>"2"}>, 
    #<Post id: 1, data: {"hi"=>"2", "hello"=>"1"}>]> 

# Where inside a JSON object:
Record.where("data ->> 'likelihood' = '0.89'")

# Example json object:
r.column_data
=> {"data1"=>[1, 2, 3], 
    "data2"=>"data2-3", 
    "array"=>[{"hello"=>1}, {"hi"=>2}], 
    "nest"=>{"nest1"=>"yes"}} 

# Nested search:
Record.where("column_data -> 'nest' ->> 'nest1' = 'yes' ")

# Search within array:
Record.where("column_data #>> '{data1,1}' = '2' ")

# Search within a value that's an array:
Record.where("column_data #> '{array,0}' ->> 'hello' = '1' ")
# this only find for one element of the array. 

# All elements:
Record.where("column_data ->> 'array' LIKE '%hello%' ") # bad
Record.where("column_data ->> 'array' LIKE ?", "%hello%") # good


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fluent NHibernate i PostgreSQL, SchemaMetadataUpdater.QuoteTableAndColumns — System.NotSupportedException:określona metoda nie jest obsługiwana

  2. Pięć fajnych rzeczy, których nauczyłem się na konferencji PostgreSQL w Europie 2018

  3. Rzucanie typu NULL podczas aktualizowania wielu wierszy

  4. Aktualizacja do PostgreSQL 11 z replikacją logiczną

  5. Postgres:polecenie odkurzania nie czyści martwych krotek