Phi*_*ord 2 nosql postgresql view relational-theory json
我可以从 JSON 数据类型创建 VIEW 但将其作为关系结构吗?
例子:
SELECT *
FROM json_test;
Run Code Online (Sandbox Code Playgroud)
结果
[
{
"name": "Roy",
"Country": "USA",
"hobby": "Swim",
"address": "Church Street",
"sex": "M"
},
{
"name": "Roy",
"Country": "USA",
"hobby": "Cricket",
"address": "Amsterdam",
"sex": "F"
},
{
"name": "Anam",
"country": "Greece",
"hobby": "Polo",
"address": "MG Road",
"sex": "M"
}
]
Run Code Online (Sandbox Code Playgroud)
然后创建 VIEW 将类似于(不确定是否/如何执行此操作)
CREATE VIEW normalized AS
SELECT name, country, hobby, address, sex
FROM JSON data
Run Code Online (Sandbox Code Playgroud)
然后我可以用这样的东西查询视图
SELECT *
FROM normalized
Run Code Online (Sandbox Code Playgroud)
结果集
name | country | hobby | address | sex
------+---------+---------+---------------+----
Roy | USA | Swim | Church Street | M
Roy | USA | Cricket | Amsterdam | F
Anam | Greece | Polo | MG Road | M
(3 rows)
Run Code Online (Sandbox Code Playgroud)
由于 JSON 列中有多行,因此您需要一个返回集合的函数。这可以使用以下json_to_recordset()函数完成:
select j.*
from json_test,
json_to_recordset(json_data) as j(name text, country text, hobby text, address text, sex text);
Run Code Online (Sandbox Code Playgroud)
由于这是一种匿名记录类型,您必须明确定义每一列。如果你想把它放到一个视图中,可能不是什么大事。请注意,您的示例数据不会返回CountryJSON 数据中键的值,只会返回命名的值,country因为列名和 JSON 键之间的匹配区分大小写。
如果您不想创建视图,可以使用自定义类型缩短上述内容:
create type person_t as (name text, country text, hobby text, address text, sex text);
select j.*
from json_test,
json_populate_recordset(null::person_t, json_data) as j;
Run Code Online (Sandbox Code Playgroud)
SQLFiddle:http ://sqlfiddle.com/#!15/91b85/1
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |