Rails3:Postgres Hstore:如何在具有 hstore 列的 table 中插入多条记录

Rails3: Postgres Hstore: How to insert multiple records in a table that has an hstore column

我想在我的 table 中插入多条记录,其中有一个 Hstore 列。 我怎样才能做到这一点? col3: hstore 数据类型

INSERT INTO my_table (col1, col2, col3) VALUES ("abc",123,'"property1"=>"hello","property2"=>"hi"'), ("xyz",345,'"property1"=>"hello1","property"=>"hi1"'), ("weq",23,'"property1"=>"hello2","property"=>"hi2"')

此格式以字符串格式添加hstore中的记录。我希望它像一个我可以访问的 key:value 哈希

你有两个问题 SQL:

  1. SQL 字符串文字用单引号括起来,双引号用于标识符(例如 table 和列名)。
  2. hstore literals不要使用大括号,它们通常表示为字符串。

解决这些问题会给我们带来:

INSERT INTO my_table (col1, col2, col3) VALUES
('abc', 123, '"property1"=>"hello","property2"=>"hi"'),
('xyz', 345, '"property1"=>"hello1","property"=>"hi1"'),
('wqe', 23,  '"property1"=>"hello2","property"=>"hi2"')

就 SQL 而言,我将提供 "access them like any other column" 的示例,任何向 Rails 的转换都由您承担 - 我不知道。访问 hstore 中的值与访问任何独立列略有不同。由于 hstore 由 key:value 对组成,因此您需要为各个值指定键。其格式为:hstore_column -> 'key_name'。示例(使用上面发布的数据)

-- select value specific key
select col1, col2, col3 -> 'property' 
  from my_table;

-- select entire hstore when value for specific key missing   
select col3 
  from my_table
 where col3 -> 'property' is null;

-- select entire row there value ends in a digit for specific key
select * 
  from my_table
 where col3 -> 'property' ~ '.*\d$' 

希望这些帮助。 '