标签: hstore

如何创建已安装hstore扩展的新数据库?

最近我在尝试使用Djang与Django时遇到了麻烦.我用这种方式安装了hstore:

$ sudo -u postgres psql
postgres=# CREATE EXTENSION hstore;
WARNING:  => is deprecated as an operator name
DETAIL:  This name may be disallowed altogether in future versions of PostgreSQL.
CREATE EXTENSION
postgres=# \dx
                           List of installed extensions
  Name   | Version |   Schema   |                   Description                    
---------+---------+------------+--------------------------------------------------
 hstore  | 1.0     | public     | data type for storing sets of (key, value) pairs
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)
Run Code Online (Sandbox Code Playgroud)

并天真地认为我的新数据库将包括hstore.情况并非如此:

$ createdb dbtest …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgresql-9.1 hstore

54
推荐指数
1
解决办法
3万
查看次数

为什么只有超级用户CREATE EXTENSION hstore,而不是Heroku?

当我尝试在我的数据库上启用hstore时:

=> CREATE EXTENSION IF NOT EXISTS hstore;
ERROR:  permission denied to create extension "hstore"
HINT:  Must be superuser to create this extension.
Run Code Online (Sandbox Code Playgroud)

我的用户是不是超级用户,但是数据库的所有者.

根据CREATE EXTENSION文档:

加载扩展需要具有创建其组件对象所需的相同权限.对于大多数扩展,这意味着需要超级用户或数据库所有者权限.运行CREATE EXTENSION的用户将成为扩展的所有者,以便以后进行权限检查,以及扩展程序脚本创建的任何对象的所有者.

什么是hstore,需要超级用户权限?它是否会影响我将其添加到数据库外部的群集部分?


进一步的混乱:

数据库用户Heroku Postgres提供的不是超级用户:

Heroku Postgres用户被授予其数据库的所有非超级用户权限.这些措施包括SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT,TEMPORARY,EXECUTE,和USAGE.

但是,该用户能够CREATE EXTENSION hstore:

要创建任何支持的扩展,请使用heroku pg:psql打开一个会话并运行相应的命令:

$ heroku pg:psql
Pager usage is off.
psql (9.2.4)
SSL …
Run Code Online (Sandbox Code Playgroud)

postgresql heroku hstore

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

Postgresql JSONB即将推出.现在用什么?Hstore?JSON?EAV?

在完成关系DB/NoSQL研究辩论之后,我得出的结论是,我将继续将PG作为我的数据存储.该决定的一个重要部分是宣布JSONB达到9.4.我的问题是我现在应该怎么做,从头开始构建一个应用程序,知道我想要迁移到(我的意思是现在使用!)jsonb?对我来说,DaaS选项将会运行9.3.

从我所知道的,并纠正我,如果我错了,hstore会运行得更快,因为我将在hstore列中对许多键进行大量查询,如果我要使用普通的json我就不会能够利用索引/ GIN等.但是我可以利用json嵌套,但运行任何查询都会非常慢,用户会感到沮丧.

那么,我是否围绕当前版本的hstore或json数据类型,"good ol"EAV或其他东西构建我的应用程序?我应该以某种方式构建我的数据库和应用程序代码吗?任何建议将不胜感激.我相信其他人可能会面临同样的问题,因为我们等待PostgreSQL的下一次正式发布.

关于我想要构建的应用程序的一些额外细节:

- 非常关系(下面有一个例外) -
强大的社交网络方面(群组,朋友,喜欢,时间轴等) -
基于具有可变用户分配属性的单个对象,可能是10或1000+(这是无模式设计的地方)需要发挥作用)

提前感谢任何输入!

postgresql json hstore jsonb

22
推荐指数
1
解决办法
5588
查看次数

如何使用由南方管理的现有应用程序设置django-hstore?

我尝试使用这个很好的教程使用django-hstore .我在South管理的现有应用中添加了两个类:

class Attribute(models.Model):
    name  = models.CharField(max_length=200, verbose_name=_("name"))
    description = models.CharField(max_length=1000, verbose_name=_("description"))

class Measure(models.Model):
    attribute = models.ForeignKey(Attribute)
    data = hstore.DictionaryField(db_index=True)
    objects = hstore.HStoreManager()
Run Code Online (Sandbox Code Playgroud)

做了一个schemamigration --auto,启动了迁移并得到了一个django.db.utils.DatabaseError: type "hstore" does not exist.

好吧,tuto似乎不完整,django-hstore 文档告诉我使用自定义数据库后端,我将以下内容添加到我的设置文件中:

DATABASES['default']['ENGINE'] = 'django_hstore.postgresql_psycopg2'
Run Code Online (Sandbox Code Playgroud)

后来我有一个KeyError: 'default'south/db/__init__.py", line 78.此时,intertubes +一些试验/错误将我指向SOUTH_DATABASE_ADAPTERS设置变量,我在设置中添加了以下内容:

SOUTH_DATABASE_ADAPTERS = {'default': 'south.db.postgresql_psycopg2'}
Run Code Online (Sandbox Code Playgroud)

新错误:

File ".../psycopg2/extras.py", line 769, in register_hstore
"hstore type not found in the database. "
psycopg2.ProgrammingError: hstore type not found in the database. …
Run Code Online (Sandbox Code Playgroud)

python django psycopg2 hstore

21
推荐指数
2
解决办法
8521
查看次数

我可以使用Rails在hstore中存储数组

我想保存这样的数据:

User.create(name:"Guy", properties:{url:["url1","url2","url3"], street_address:"asdf"})

我可以在Rails 4中这样做吗?到目前为止,我尝试过迁移: add_column :users, :properties, :hstore, array: true

但是当我在hstore中保存数组时,它返回错误:

PG::InvalidTextRepresentation: ERROR: array value must start with "{" or dimension information

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

21
推荐指数
3
解决办法
9231
查看次数

如何使用Ruby on Rails 4.0.1/PostgreSQL Hstore更新数据记录的值?

我遇到一个奇怪的问题,我必须是用户错误,但无法弄明白.

我正在使用Ruby 1.9.3-p194,Rails 4.01,PostgreSQL.

我有一个模型Customer,其中有一个名为data的列,它是一个hstore类型.出于某种原因,我无法使用任何新的键/值更新数据(hstore)列,也无法更新现有键的值.我可以插入并指定任何没有任何问题的键/值.

客户ID:1,first_name:"Mark",last_name:"Test",data:{"balance"=>"0"},created_at:"2013-11-27 14:39:09",updated_at:"2013- 11-27 14:39:09"

c.data["balance"] = "100"

c.save
Run Code Online (Sandbox Code Playgroud)

(0.2ms)BEGIN

(0.3ms)COMMIT => true

如果我执行update_attributes,它会保存它.

c.update_attributes({:data => {"balance" => "343"}})
Run Code Online (Sandbox Code Playgroud)

当我使用c.save时,我没有看到任何错误或异常!.有人有主意吗?

ruby-on-rails rails-postgresql hstore

18
推荐指数
3
解决办法
4793
查看次数

从hstore的所有行检索唯一键列表的最有效方法?

为简单起见,假设我有一个只有一个hstore的列的表.从hstore的所有行获取所有键的unqiue列表的最有效方法是什么?

例如.

my_hstore
------------
a=>1,b=>2
b=>2,c=>3
x=>10,y=>11
y=>11,z=12
Run Code Online (Sandbox Code Playgroud)

检索包含(a,b,c,x,y,z)的列表/数组/集的最有效方法是什么?

postgresql postgresql-9.1 hstore

17
推荐指数
1
解决办法
4695
查看次数

如何在PostgreSQL hstore中使用通配符查询值

我正在尝试查询hstore以查找与搜索条件匹配的某个键的所有值.

我可以获得某个键的所有值,如下所示:

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier']))
FROM "products"
Run Code Online (Sandbox Code Playgroud)

我也可以得到一个特定的价值:

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier'])) AS sup
FROM "products"
WHERE data @> 'Supplier => Toshiba'
Run Code Online (Sandbox Code Playgroud)

我真正喜欢的是(这不起作用):

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier'])) AS sup
FROM "products"
WHERE data @> 'Supplier => %tosh%'
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT DISTINCT
svals(slice(data, ARRAY['Supplier'])) AS sup
FROM "products"
WHERE lower(sup)
LIKE '%tosh%'
Run Code Online (Sandbox Code Playgroud)

用于不区分大小写的搜索.这是怎么做到的?

postgresql hstore

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

为PostgreSQL中的记录变量动态传递列名

使用PostgreSQL,第一条记录的表中的列值存储在记录变量中.例如:让变量为:recordvar

recordvar.columnname
Run Code Online (Sandbox Code Playgroud)

给出指定列名的值.我将columname在变量中定义:

var := columnname
Run Code Online (Sandbox Code Playgroud)

在地方columnname,如果我与变量如更换recordvar.var,这是行不通的.

请让我知道如何处理这种情况.以下是示例代码:

CREATE OR REPLACE FUNCTION getrowdata(id numeric, table_name character varying)
RETURNS SETOF void AS
$BODY$ 
DECLARE

srowdata record;
reqfield character varying;
value numeric;


BEGIN

RAISE NOTICE 'id: %',id; 
reqfield:= 'columnname';

EXECUTE 'select * from datas.'||table_name||' WHERE id = '||id into srowdata;

RAISE NOTICE 'srowdata: %',srowdata; 

RAISE NOTICE 'srowdatadata.columnname: %',srowdata.columnname;

value:= srowdata.reqfield;

RAISE NOTICE 'value: %',value;


END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
Run Code Online (Sandbox Code Playgroud)

postgresql types dynamic-sql plpgsql hstore

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

何时应该使用HStoreField而不是JSONField?

Django 1.8提供了HStoreField,而Django 1.9将为PostgreSQL提供JSONField(它使用jsonb).

我的理解是hstore比json快,但是不允许嵌套并且只允许字符串.

应该何时使用另一个?一个人应该优先于另一个吗?与jsonb相比,hstore仍然是性能的明显赢家吗?

python django postgresql hstore jsonb

17
推荐指数
1
解决办法
2124
查看次数