标签: jsonb

如何将PostgreSQL 9.4的jsonb类型转换为float

我正在尝试以下查询:

SELECT (json_data->'position'->'lat') + 1.0 AS lat FROM updates LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

(+ 1.0只是强制转换为浮点数.我的实际查询要复杂得多,这个查询只是问题的一个测试用例.)

我收到错误:

ERROR:  operator does not exist: jsonb + numeric
Run Code Online (Sandbox Code Playgroud)

如果我添加显式转换:

SELECT (json_data->'position'->'lat')::float + 1.0 AS lat FROM updates LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

错误变成:

ERROR:  operator does not exist: jsonb + double precesion
Run Code Online (Sandbox Code Playgroud)

我知道大多数jsonb值都不能转换成浮点数,但在这种情况下我知道lats都是JSON数.

是否有一个函数将jsonb值转换为浮点数(或为uncastable返回NULL)?

sql postgresql casting jsonb postgresql-9.4

33
推荐指数
5
解决办法
4万
查看次数

将PostgreSQL JSON列升级到JSONB?

升级到PostgreSQL 9.4之后,如何将所有JSON列转换为JSONB列?

我不介意丢失任何重复的密钥和空白.

postgresql jsonb

33
推荐指数
2
解决办法
6432
查看次数

使用PostgreSQL 9.4计算JSONB数组长度

我正在运行最新版本的PostgreSQL 9.4.5-1.pgdg14.04+1,并尝试使用PostgreSQL 9.4文档中JSON_ARRAY_LENGTH描述的函数计算JSONB数组的长度

这是我试图运行的确切查询:

SELECT JSON_ARRAY_LENGTH('["hi","ho"]'::jsonb) AS length
Run Code Online (Sandbox Code Playgroud)

当我运行该查询时,我希望返回一个值2,但是遇到错误:ERROR: function json_array_length(jsonb) does not exist

我错过了文档中非常明显的内容吗?它特别声明您可以调用JSON_ARRAY_LENGTH传递jsonjsonb数据类型.我明确地施展,jsonb所以我有点不知所措.

有没有其他人遇到过这个问题,或者有人会指出我在这里做错了什么?

更新:我误读了文档

我本来应该打电话JSONB_ARRAY_LENGTH,而不是JSON_ARRAY_LENGTH.注意"JSON"之后的"B".多谢你们.

postgresql jsonb postgresql-9.4

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

在PostgreSQL 9.5+中追加(推送)和从JSON数组中删除

对于小于9.5的版本,请参阅此问题

我使用这个在PostgreSQL中创建了一个表:

CREATE TEMP TABLE jsontesting
AS
  SELECT id, jsondata::jsonb FROM ( VALUES
    (1, '["abra","value","mango", "apple", "sample"]'),
    (2, '["japan","china","india", "russia", "australia"]'),
    (3, '["must", "match"]'),
    (4, '["abra","value","true", "apple", "sample"]'),
    (5, '["abra","false","mango", "apple", "sample"]'),
    (6, '["string","value","mango", "apple", "sample"]'),
    (7, '["must", "watch"]')
  ) AS t(id,jsondata);
Run Code Online (Sandbox Code Playgroud)

现在我想要的是

  • 添加append_to_json_array这样的东西,实际的jsondata是一个json数组,而newString是我必须添加到jsondata数组的,这个函数应该返回更新的json数组.

    UPDATE jsontesting
    SET jsondata=append_to_json_array(jsondata, 'newString')
    WHERE id = 7;
    
    Run Code Online (Sandbox Code Playgroud)
  • 从json数据数组中删除一个值,一个用于删除值的函数.

我试图搜索PostgreSQL的文档,但没有发现任何内容.

arrays postgresql array-push jsonb postgresql-9.5

24
推荐指数
3
解决办法
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 1.9中,使用JSONField(本机postgres jsonb)的惯例是什么?

Django 强烈建议 不要使用null=TrueCharField和TextField基于字符串的字段,以便不为"无数据"提供两个可能的值(假设您允许使用空字符串blank=True).这对我来说很有意义,我在所有项目中都这样做.

Django 1.9引入了JSONField,它使用底层的Postgres jsonb数据类型.上面的建议是否会延续到JSONField(即blank=True应该用于代替null=True)?或者,应该null=True使用?或者,应该default=dict使用?要么, ..?为什么?

换句话说,当您只想允许一个"无数据"值时,新的本机JSONField的约定是什么?请支持你的答案,因为我做了很多研究,找不到任何正式的.提前致谢.

python django postgresql json jsonb

21
推荐指数
1
解决办法
6405
查看次数

jsonb字段中的PostgreSQL重命名属性

在postgresql 9.5中,有没有办法在jsonb字段中重命名属性?

例如:

{ "nme" : "test" }
Run Code Online (Sandbox Code Playgroud)

应该重命名为

{ "name" : "test"}
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb postgresql-9.5

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

运算符不存在:json = json

当我尝试从表中选择一些记录时

    SELECT * FROM movie_test WHERE tags = ('["dramatic","women", "political"]'::json)
Run Code Online (Sandbox Code Playgroud)

sql代码抛出错误

LINE 1: SELECT * FROM movie_test WHERE tags = ('["dramatic","women",...
                                        ^
HINT:  No operator matches the given name and argument type(s). You might      need to add explicit type casts.

********** ?? **********

ERROR: operator does not exist: json = json
SQL ??: 42883
????:No operator matches the given name and argument type(s). You might need to add explicit type casts.
??:37
Run Code Online (Sandbox Code Playgroud)

我错过了什么或者我可以在哪里了解这个错误.

sql postgresql json jsonb postgresql-9.4

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

存储嵌套JSON的访问器

我有"组织"模型,它存储与组织相关的所有信息.有一个名为"集成"的JSONB类型的字段,用于存储与组织具有的所有外部服务集成有关的信息.

如何使用存储访问器访问存储在嵌套JSON中的信息,例如:

{
 "mailchimp": {"api_key":"vsvsvef", "list_id":"12345"},
 "sendgrid" : {"username":"msdvsv", "password":"123456"}
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用这样的商店访问器访问mailchimp:

store_accessor :integrations, :mailchimp
Run Code Online (Sandbox Code Playgroud)

如何轻松访问mailchimp的api_key?

activerecord json ruby-on-rails jsonb

19
推荐指数
2
解决办法
9847
查看次数

怎么逃避?(问号)运算符在Rails中查询Postgresql JSONB类型

我正在使用Rails 4.2和Postgres 9.4来尝试新的JSONB数据类型.我的数据库中的一个JSONB列包含一个数组,我希望能够查询此数组包含特定值的记录.我想出了如何使用新的JSONB"问号"("包含")运算符来完成此操作,如下所示:http: //www.postgresql.org/docs/9.4/static/functions-json.html

所以在原始SQL中我可以像在这个例子中那样工作:

SELECT * FROM people WHERE roles ? '32486d83-4a38-42ba-afdb-f77ca40ea1fc';
Run Code Online (Sandbox Code Playgroud)

但我无法通过ActiveRecord看到从Rails中进行此查询的任何方法.我尝试使用"where"方法进行原始查询,如下所示:

Person.where("roles ? ?", "32486d83-4a38-42ba-afdb-f77ca40ea1fc")
Run Code Online (Sandbox Code Playgroud)

但由于问号是用于替换参数的特殊字符,我收到此错误:

ActiveRecord :: PreparedStatementInvalid:在:roles中错误的绑定变量数(1为2)??

我想我需要一种方法来逃避"?" 因为我希望它从字面上传递出来.我试过了 \?和?? 没有运气.任何帮助表示赞赏!

postgresql activerecord ruby-on-rails jsonb

18
推荐指数
2
解决办法
4336
查看次数