use*_*350 3 postgresql ruby-on-rails hstore
我正在尝试将hstore数据列添加到现有的STI模型中.
类似于Postgres HStore错误 - 未知运算符但据我所知,我已经安装了hstore扩展.我已经删除了数据库并从迁移重建它而没有错误,但规格仍然失败.
Mac OS X 10.8.2
Rails 3.1.10
psql (PostgreSQL) 9.1.4
Run Code Online (Sandbox Code Playgroud)
user.rb
has_many :targets
def complete_targets
targets.where("data @> (:key => :value)", key: 'complete', value: 'true')
end
Run Code Online (Sandbox Code Playgroud)
targets.rb
belongs_to :user
serialize :data, ActiveRecord::Coders::Hstore
Run Code Online (Sandbox Code Playgroud)
setup_hstore迁移:
class SetupHstore < ActiveRecord::Migration
def self.up
execute "CREATE EXTENSION IF NOT EXISTS hstore"
end
def self.down
execute "DROP EXTENSION IF EXISTS hstore"
end
end
Run Code Online (Sandbox Code Playgroud)
添加数据列迁移:
class AddDataToRecords < ActiveRecord::Migration
def change
add_column :records, :data, :hstore
end
end
Run Code Online (Sandbox Code Playgroud)
添加索引迁移:
class AddHstoreIndexes < ActiveRecord::Migration
def up
execute "CREATE INDEX records_gin_data ON records USING GIN(data)"
end
def down
execute "DROP INDEX records_gin_data"
end
end
Run Code Online (Sandbox Code Playgroud)
错误:
ActiveRecord::StatementInvalid:
PG::Error: ERROR: operator does not exist: unknown => unknown
LINE 1: ...records"."user_id" = 244 AND (data @> ('complete' => 'true')...
Run Code Online (Sandbox Code Playgroud)
尝试通过直接查询创建扩展时的Navicat输出:
CREATE EXTENSION hstore Error : ERROR: extension "hstore" already exists
Run Code Online (Sandbox Code Playgroud)
也许这是一个简单的数据类型问题,请尝试:
data @> ('complete'::text => 'true'::text)
Run Code Online (Sandbox Code Playgroud)
但是=>运营商已弃用(并已在9.2中删除),最好使用以下hstore()格式:
(data @> hstore('complete','true'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |