我甚至不确定Postgres的HStore数据类型是否可以包含嵌套哈希,如果可以的话,如何插入它们?
这是我到目前为止所尝试的:
-- Database: test1
-- DROP DATABASE test1;
/*
CREATE DATABASE test1
WITH OWNER = iainuser
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'en_GB.UTF-8'
LC_CTYPE = 'en_GB.UTF-8'
CONNECTION LIMIT = -1;
*/
/* create extension hstore; */
/*drop table my_store;*/
/*
create table my_store (
id serial primary key not null,
doc hstore
);
CREATE INDEX my_store_doc_idx_gist
ON my_store
USING gist
(doc);
*/
/* select doc from my_store; */
/*
insert into my_store (doc) values ( '"a" => …Run Code Online (Sandbox Code Playgroud) 我有这样一张桌子:
Table "public.statistics"
id | integer | not null default nextval('statistics_id_seq'::regclass)
goals | hstore |
Run Code Online (Sandbox Code Playgroud)
项目:
|id |goals |
|30059 |"3"=>"123" |
|27333 |"3"=>"200", "5"=>"10" |
Run Code Online (Sandbox Code Playgroud)
我需要做什么来通过哈希键来聚合所有值?
我想得到这样的结果:
select sum(goals) from statistics
Run Code Online (Sandbox Code Playgroud)
返回
|goals |
|"3"=>"323", "5"=>"10" |
Run Code Online (Sandbox Code Playgroud) 如何通过hstore属性订购查询结果?
@items = Item.includes(:product).order('products.properties @> hstore("platform")')
Run Code Online (Sandbox Code Playgroud)
原因
PG::Error: ERROR: column "platform" does not exist
LINE 1: ...oduct_id" ORDER BY products.properties @> hstore("platform"...
Run Code Online (Sandbox Code Playgroud)
platform 是一个hstore密钥,存储在属性列中,它是一个hstore类型.
我正在使用PostgreSQL 9.1.4和hstore以及PostgreSQL JDBC驱动程序(9.1-901.jdbc4).
我试图使用包含运算符(?,?&,?|在一个PreparedStatement),但是?字符被解析为一个变量占位符.可以转义此字符以在查询中发送正确的运算符吗?
一个例子:
PreparedStatement stmt = conn.prepareStatement("SELECT a, b FROM table1 WHERE c ? 'foo' AND d = ?");
stmt.setInt(1, dValue);
stmt.executeQuery();
Run Code Online (Sandbox Code Playgroud)
在此表单中,以下示例将引发异常:
org.postgresql.util.PSQLException: No value specified for parameter 2.
Run Code Online (Sandbox Code Playgroud)
更新:
在调查pgjdbc驱动程序中的查询解析器后,此代码段似乎表明无法转义该?字符.剩下的问题是:
?转义的东西,而不是参数占位符?如果该密钥存在,我想在hstore列中的特定键上创建唯一索引或约束.我希望在另一个问题的某处可以找到答案:
但我尝试了我能提出的每个版本的语法,没有任何方法可行.
目前,我的表是
hstore_table
hstore字段是hstore_value
当它们存在时,我想要强制独特的是'foo'和'bar'.
我的PostgreSQL版本是8.4.13
在Postgresql中,hstore和json数据类型似乎具有非常相似的用例.你什么时候选择使用一个与另一个?初步想法:
我已成功安装了hstore扩展,一切都可以正常工作syncdb.(我正在使用djorm-ext-hstore)
但是,nose会创建一个新的临时数据库来运行测试,并且没有安装hstore.
我需要CREATE EXTENSION HSTORE;在鼻子同步数据库之前运行测试数据库,但我找不到有关如何执行此操作的任何信息.
有任何想法吗?
我正在尝试使用PostreSQL的Ruby on Rails 4.0 HStore扩展.我想要一个我的HStore字段:
class Thing < ActiveRecord::Base
# ...
validates :field_name, presence: true
# ...
end
Run Code Online (Sandbox Code Playgroud)
作为HStore的新手,我为Thing(rails g scaffold Thing field_name:hstore)生成了一个脚手架.这样做我的fixture文件(test/fixtures/things.yml)没有包含默认值field_name:
one:
# ...
field_name:
# ...
Run Code Online (Sandbox Code Playgroud)
rake test由于没有为必填字段提供值,导致失败的原因.
我的问题是:如何在我的灯具YAML文件中设置一个值,field_name以便我的测试通过?
到目前为止,我知道:
这不起作用:
one:
# ...
field_name:
small: 2
medium: 5
large: 4
# ...
Run Code Online (Sandbox Code Playgroud)这也不能正常工作:
one:
# ...
field_name: {"small"=>"2", "medium"=>"5", "large"=>"4"}
# ...
Run Code Online (Sandbox Code Playgroud)谢谢!
是否可以通过将 hstore 值转换为int或来过滤查询集float?
我遇到了一个问题,我们需要向现有数据模型添加更强大的查询。数据模型使用HStoreField来存储大部分建筑数据,我们需要能够对它们进行查询/过滤,并且一些值需要被视为数值。
但是,由于这些值被视为字符串,因此会逐个比较它们并导致不正确的查询。例如,'700' > '1000'。
因此,如果我想查询 sqft 值在 700 到 1000 之间的所有项目,我会得到零结果,即使我可以清楚地看到有数百个项目的值在该范围内。如果我只查询 sqft 值 >= 700 的项目,我只会得到 sqft 值以 7、8 或 9 开头的结果。
我还尝试使用来自的 JsonField 进行测试django-pgjson(因为我们还没有使用 Django 1.9),但它似乎有同样的问题。
设置
Django==1.8.9
django-pgjson==0.3.1 (for jsonfield functionality)
Postgres==9.4.7
Run Code Online (Sandbox Code Playgroud)
模型.py
Django==1.8.9
django-pgjson==0.3.1 (for jsonfield functionality)
Postgres==9.4.7
Run Code Online (Sandbox Code Playgroud)
示例数据
这是 hstore 字段中某些数据的示例。
address1: ...
address2: ...
city: ...
state: ...
zipcode: ...
data: {
'year_built': '1995',
'building_type': 'residential',
'building_subtype': 'single-family',
'bedrooms': '2',
'bathrooms': '1', …Run Code Online (Sandbox Code Playgroud) 在SQL Server中是否有相当于Postgresql的hstore?我正在使用Web应用程序运行SQL Server 2008,该应用程序对数据库上的稀疏键/值配对的需求越来越大.在我们的情况下,每次发生这种情况时都不可能创建新列.目前,我们使用标准列并将所有这些"无模式"稀疏数据抛出到单个列中,然后在应用程序中运行检查以获取所需的密钥.这不是很干净/优雅.
我刚刚开始研究另一个使用Postgresql的项目,并使用hstore来解决一个非常类似的问题.对于我们遇到的问题,hstore是一个更清晰的解决方案,所以现在我想知道SQL Server 2008中是否有相同的功能?
hstore ×10
postgresql ×10
django ×2
python ×2
jdbc ×1
nose ×1
ruby ×1
sql ×1
sql-server ×1
yaml ×1