【问题标题】:Is there a way to generate columns in a view based on table row data?有没有办法根据表行数据在视图中生成列?
【发布时间】:2017-09-14 08:58:59
【问题描述】:

我有这张表,其中包含应用程序的设置,我只想在视图中显示它。每个设置的数据存储为一行。

Code (varchar64)| Value (varchar1000)
----------------------
ALLOW_MAC_ADDR  | 1
----------------------
ALLOW_SAVE      | 1
----------------------
USER_ALIAS      | James

现在这有点复杂,我必须在视图中将这些行转换为jsonbvalue 列名称的键必须基于 Code 列数据的值。

这里是首选jsonb的例子:

[dt:{ALLOW_MAC_ADDR: 1, ALLOW_SAVE: 1, USER_ALIAS: 'James'}]

在我看来,我正在考虑做一些这样的事情:

SELECT .. FROM generate_jsonb()

那么我该如何实现这样的jsonb呢?

编辑:如果有帮助,我正在使用 v9.6。

【问题讨论】:

  • 你的 postgres 版本是什么?现有的 json 函数有什么问题?..
  • 版本没什么问题,我只需要一个高效的例子来生成这样的jsonb
  • 请用您的 postgres 版本更新您的帖子 - 多年来对 json 的 json 支持非常不同
  • 版本:v9.6

标签: postgresql function view jsonb


【解决方案1】:

https://www.postgresql.org/docs/current/static/functions-json.html

聚合函数 json_object_agg 聚合成对的值 到 JSON 对象中

例如:

t=# create table tt(code text, value text);
CREATE TABLE
t=# insert into tt values('ALLOW_MAC_ADDR',1),('USER_ALIAS','James');
INSERT 0 2
t=# select json_object_agg(code,value) from tt;
                  json_object_agg
----------------------------------------------------
 { "ALLOW_MAC_ADDR" : "1", "USER_ALIAS" : "James" }
(1 row)

【讨论】:

  • 那些是硬编码的,我正在寻找选择code的数据并将其用作键并循环遍历整个记录的东西
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多