在postgresql json字段中搜索关键字
我目前正在使用postgres 9.3.3 下面是我的桌子的样子-在postgresql json字段中搜索关键字,sql,json,postgresql,postgresql-9.1,Sql,Json,Postgresql,Postgresql 9.1,我目前正在使用postgres 9.3.3 下面是我的桌子的样子- Column | Type | Modifiers | Storage | Stats target | Description --------------------+--------------------------+-----------------
Column | Type | Modifiers | Storage | Stats target | Description
--------------------+--------------------------+--------------------------------------------------------------------+----------+--------------+-------------
id | integer | not null default nextval('playerbase_palyerdata_id_seq'::regclass) | plain | |
date_joined | timestamp with time zone | not null | plain | |
belongs_to_camp_id | integer | not null | plain | |
belongs_to_coach_id | integer | not null | plain | |
json_kvps | character varying(2000) | not null | extended | |
一个样本数据如下所示:
id | date_joined | belongs_to_camp_id | belongs_to_coach_id | json_kvps
1 | 2014-03-07 18:10:45.824749+05:30 | 1 | 1 | {"alumnicode": "2003360009", "emailusername": "aaron@hotmail.com", "altemail": "", "salutation": "Mrs", "fname": "Aaron", "mname": "V", "lname": "Schwartz", "fullname": "Aaraon M Scwartz", "programmename": "MEP", "batchyearin": "2003"}
SELECT * FROM playerbase_playerdata WHERE json_kvps->>'emailusername' = 'aaron@hotmail.com';
现在我想搜索整个表,并找到一个具有“emailusername”的用户:aaron@hotmail.com"
正如这里所提到的-
我试着写一个如下的查询-
id | date_joined | belongs_to_camp_id | belongs_to_coach_id | json_kvps
1 | 2014-03-07 18:10:45.824749+05:30 | 1 | 1 | {"alumnicode": "2003360009", "emailusername": "aaron@hotmail.com", "altemail": "", "salutation": "Mrs", "fname": "Aaron", "mname": "V", "lname": "Schwartz", "fullname": "Aaraon M Scwartz", "programmename": "MEP", "batchyearin": "2003"}
SELECT * FROM playerbase_playerdata WHERE json_kvps->>'emailusername' = 'aaron@hotmail.com';
我希望得到一个如上所述的列,但我得到了以下错误-
ERROR: operator does not exist: character varying ->> unknown
LINE 1: ...ELECT * FROM memberbase_memberdata WHERE json_kvps->>'emailu...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
有人能告诉我,我缺少什么吗?像这样的功能只存在于PostgreSQL 9.3版。 因此,不幸的是,要进行这样的查询,您需要更新您的PostgreSQL 如果您有9.3,那么您需要使用json列类型 这里你可以看到一些例子。它帮助了我,早些时候:
祝您今天愉快。对于django车型,您可以使用JsonField
它工作正常,但如果您使用的是低于9.2的PostgreSQL版本,它将创建字符列。对于PostgreSQL 9.3或更高版本,一种可能的解决方案是使用json转换:
select [Required Fields] from [Table Name] WHERE [Column Name]::text = '{[Key]}' ::text
从playerbase\u playerdata中选择*其中json\u kvps->>“emailusername”='aaron@hotmail.com';
SELECT*FROM playerbase\u playerdata WHERE CAST(json\u kvps AS json)->“emailusername”='aaron@hotmail.com';代码>“有人能告诉我,我缺少什么吗?”文档中的postgres版本号。这些操作员添加到9.3中。9.2中提供的一些功能。但是9.1.1中的任何内容都没有升级到9.3.3版本,因此标题和标签中也没有反映正确的版本。-对于您的问题:您必须使用json
类型,而不是text
或varchar
。该表由django ORM生成。任何如何指定json的指针?在这里找不到任何东西,但如果您能够运行原始查询,您可以在创建后将其类型更改为json
。-您还可以在运行时查询时将CAST
转换为json
,但这会使查询速度变慢。