标签: hstore

建立Ubuntu 12.04 LTS的话语

我已经设置了一个新的数据库,用于在PostgreSQL中安装Discourse.当我运行rake db:migrate时,它会创建大多数表,但它会失败:

-- execute("INSERT INTO archetypes (name_key, created_at, updated_at) VALUES ('poll', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)")
   -> 0.0009s
-- add_column(:forum_threads, :archetype_id, :integer, {:default=>1, :null=>false})
   -> 0.0209s
==  CreateArchetypes: migrated (0.0424s) ======================================

==  AddMetaDataToForumThreads: migrating ======================================
-- execute("CREATE EXTENSION IF NOT EXISTS hstore")
rake aborted!
An error has occurred, this and all later migrations canceled:

PG::Error: ERROR:  could not open extension control file "/usr/share/postgresql/9.1/extension/hstore.control": No such file or directory
: CREATE EXTENSION IF NOT EXISTS hstore
/usr/local/rvm/gems/ruby-1.9.3-p385/bundler/gems/MiniProfiler-d149f34fcdb6/Ruby/lib/patches/sql_patches.rb:155:in `exec'
/usr/local/rvm/gems/ruby-1.9.3-p385/bundler/gems/MiniProfiler-d149f34fcdb6/Ruby/lib/patches/sql_patches.rb:155:in `async_exec'
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:652:in `block in execute' …
Run Code Online (Sandbox Code Playgroud)

ubuntu ruby-on-rails rails-migrations hstore discourse

16
推荐指数
1
解决办法
5172
查看次数

更新Rails 4和PostgreSQL json列中的单个键/值对?

我有一个相当大的json文档,我必须存储在我的应用程序中的每个Evaluation实例的字段中.随着时间的推移,应用程序上的某些操作将要求我更改文档中的各种键/值对.Rails 4和PostgreSQL json数据类型似乎是这个问题的理想选择,但我无法对数据库进行更改.

这是一个缩写的工作流程:

我有一个json文件,我导入每个评估记录的字段:

// example.json
{ "question_1":"no" }
Run Code Online (Sandbox Code Playgroud)

我创建一个记录并导入json:

>> evaluation = Evaluation.create assessments: File.read("example.json")
>> evaluation.assessments = File.read("#{Rails.root}/example.json")
=> "{ \"question_1\":\"no\" }"
Run Code Online (Sandbox Code Playgroud)

调用评估字段似乎工作正常:

>> evaluation.assessments
=> {"question_1"=>"no"}

OR

>> evaluation.assessments["question_1"]
=> "no"
Run Code Online (Sandbox Code Playgroud)

例1

改变json不是很好.这实际上没有提交任何东西:

>> evaluation.assessments["question_1"] = "yes"
=> "yes"

>> evaluation.assessments["question_1"]
=> "yes"

>> evaluation.save
   (0.3ms)  BEGIN
   (0.2ms)  COMMIT
=> true
Run Code Online (Sandbox Code Playgroud)

例#2

替换为一个全新的对象确实提交:

>> evaluation.assessments = {"question_1"=>"yes"}
=> {"question_1"=>"yes"}

>> evaluation.save
(0.3ms)  BEGIN
SQL (0.7ms)  UPDATE "evaluations" SET "assessments" = $1, "updated_at" = $2 …
Run Code Online (Sandbox Code Playgroud)

postgresql json ruby-on-rails hstore

16
推荐指数
1
解决办法
9839
查看次数

rails 4.1通过hstore验证任意字段

我在Rails 4.1中使用HStore来管理I18n和语言存储.它工作得很好我唯一的问题是我想做这样的事情(而不是使用store_accessor)

在Rails 4.0中,这很有用:

https://gist.github.com/rf-/2322543(simple_form和hstore基本功能)

所以我可以简单地做一些事情:

  validates_hstore :content do
    validates_presence_of :en
  end
Run Code Online (Sandbox Code Playgroud)

魔法发生的地方(似乎在Rails 4.1中无法正常工作)

module HstoreValidation
  def validates_hstore(field, &block)
    validation_class = Class.new do
      include ActiveModel::Validations

      def self.name
        '(validations)'
      end

      def initialize(data)
        @data = data
      end

      def read_attribute_for_validation(attr_name)
        @data[attr_name]
      end
    end
    validation_class.class_eval &block

    validate do
      validator = validation_class.new(self[field])

      if validator.invalid?
        validator.errors.each do |attr, text|
          self.errors.add(attr, text)
        end
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

相反,我总是得到,即使字段不是空白:

messages:
  :en:
  - can't be blank
Run Code Online (Sandbox Code Playgroud)

postgresql ruby-on-rails hstore ruby-on-rails-4 ruby-on-rails-4.1

15
推荐指数
1
解决办法
2034
查看次数

rails 4强参数+动态hstore键

我在使用Hstore和动态访问器克服Rails 4中新的强params要求时遇到了问题

我有一个Hstore列:content,我想用它来存储多种语言的内容,即:en, :fr等等.我不知道在模型或控制器中预先设置哪种语言.

store_accessor :content, [:en, :fr] #+226 random other il8n languages won't work.
Run Code Online (Sandbox Code Playgroud)

如何在一个列的rails 4中覆盖强params(或允许动态hstore键)?

  params.require(:article).permit(
    :name, :content,
    :en, :fr #+226 random translations
  )
Run Code Online (Sandbox Code Playgroud)

缺乏...

params.require(:article).permit!
Run Code Online (Sandbox Code Playgroud)

这当然有效.

ruby-on-rails hstore strong-parameters ruby-on-rails-4

13
推荐指数
1
解决办法
4389
查看次数

如何使用PostgreSQL hstore/json和JdbcTemplate

有没有办法使用PostgreSQL json/hstore JdbcTemplate?esp查询支持.

例如:

hstore:

INSERT INTO hstore_test (data) VALUES ('"key1"=>"value1", "key2"=>"value2", "key3"=>"value3"')

SELECT data -> 'key4' FROM hstore_test
SELECT item_id, (each(data)).* FROM hstore_test WHERE item_id = 2
Run Code Online (Sandbox Code Playgroud)

为Json

insert into jtest (data) values ('{"k1": 1, "k2": "two"}');
select * from jtest where data ->> 'k2' = 'two';
Run Code Online (Sandbox Code Playgroud)

java postgresql spring jdbctemplate hstore

13
推荐指数
2
解决办法
1万
查看次数

Rails和Postgres Hstore:你能在迁移中添加索引吗?

我有一个迁移,我创建一个像这样的产品表

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.hstore :data

      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

activerecord-postgres-hstore页面上,他们使用表格(在SQL中)添加索引

CREATE INDEX products_gin_data ON products USING GIN(data);
Run Code Online (Sandbox Code Playgroud)

但是,迁移不会跟踪这种变化(我猜是因为它是Postgres特定的吗?),有没有办法从迁移中创建索引?

谢谢!

migration postgresql indexing ruby-on-rails hstore

12
推荐指数
2
解决办法
4774
查看次数

将大量数据加载到Postgres Hstore中

hstore文档仅讨论了一次使用"插入"到一行的hstore.反正有没有批量上传几个100k行,可能是兆字节或Gigs到postgres hstore.

复制命令似乎仅适用于上载csv文件列

有人可以发一个例子吗?优选地,使用python/psycopg的解决方案

postgresql hstore

10
推荐指数
2
解决办法
2860
查看次数

在PostgreSQL 9.2中重命名hstore密钥

我一直在评估PostgreSQL的hstore功能(9.2),而精细手册中唯一没有明确指出的是如何重命名密钥.例如,我怎样才能将密钥重命名cai_count

"c"=>"3", "ai_voltage"=>"3", "ai_temperature"=>"28"

我认为没有直接的方法可以做到这一点,它涉及将c密钥复制到ai_count密钥,然后丢弃c密钥.我怎么能这样做,理想情况下作为一个可以应用于多个记录的单行程?

postgresql hstore

10
推荐指数
1
解决办法
1987
查看次数

使用Rails 4(和Hstore)在PostgreSQL中存储嵌套的哈希

我有一个Rails应用程序,它汇集了来自Google API的大量数据.我目前在MongoDB中存储JSON响应(所以我的Rails应用程序同时包含pg和mongo).但是,今天,我遇到了PostgreSQL Hstore扩展,我决定尝试一下.

不幸的是,我遇到了一个问题.API提供的JSON是多层深度的,因此Ruby Hash JSON.parse包含哈希,其中包含新的哈希值.但是,Hstore是字符串键/值存储,它只有1级深度.所以第一个哈希中的哈希就变成了字符串.

我发现真正令人讨厌的黑客攻击eval是变成字符串的哈希:

eval("{ "foo" => "bar" }")
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个.有关怎么做的提示?我应该继续使用MongoDB还是有更好的方法在PG中存储多级深度哈希值?

postgresql ruby-on-rails hstore ruby-on-rails-4

10
推荐指数
3
解决办法
8518
查看次数

在Postgres数据库中的多个模式上安装hstore的最佳方法?

我正在开发一个需要hstore在多个模式上使用的项目.hstore安装扩展程序的"公共"模式无处不在,因为我的作用域不在"公共"中查找.在一些试用版中,我在名为"hstore"的模式上创建了扩展,并在所使用的每个可用范围(搜索路径)上使用了模式.

基于此,我有一些问题:

  • 是否可以为扩展创建架构?或者是它更好地在每一个方案中创建的扩展(如,customer_1,customer_2,等...)?

  • 在单独的模式中创建扩展是否会影响数据的存储位置?我正在使用多个模式来使备份/恢复更容易,并且实际上不希望pg将我的所有hstore数据存储pg_large_objects在单个模式的隐藏表(例如blob)中.

postgresql hstore postgresql-extensions

10
推荐指数
1
解决办法
3502
查看次数