在 table 行内聚合 JSON 数组/将格式函数应用于 postgres JSON 列
Aggregate JSON arrays within table rows / Apply format function to postgres JSON column
我有一个 postgres table,其中包含这样一个 jsonb
行:
MyTable.refs
[{"url": "url1", "name": "name1"}, {"url": "url2", "name": "name2"}]
[]
[{"url": "url3", "name": "name3"}
我想编写一个创建新列的 postgres 函数,如下所示:
结果
['<a href="url1">name1</a>', '<a href="url2">name2</a>']
[]
['<a href="url3">name3</a>'}
我已经有东西了:
SELECT
jsonb_agg(format('<a href="%s">%s</a>', (elem ->> 'url'), (elem ->> 'name')))
FROM jsonb_array_elements('[{"url": "url1", "name": "name1"}, {"url": "url2", "name": "name2"}]'::jsonb) elem;
哪个returns:
["<a href="url1">name1</a>", "<a href="url2">name2</a>"]
如何将此转换应用到整个列?
我猜您正在寻找嵌套的 select 语句:
with mytable (refs) as (
values
('[{"url": "url1", "name": "name1"}, {"url": "url2", "name": "name2"}]'::jsonb),
('[]'),
('[{"url": "url3", "name": "name3"}]')
)
select (select coalesce(jsonb_agg(format('<a href="%s">%s</a>',
elem->>'url', elem->>'name')),
'[]')
from jsonb_array_elements(refs) elem) result
from mytable;
(顺便说一句,references
是 PostgreSQL 中的保留关键字,可能会导致错误消息令人困惑。)
我有一个 postgres table,其中包含这样一个 jsonb
行:
MyTable.refs |
---|
[{"url": "url1", "name": "name1"}, {"url": "url2", "name": "name2"}] |
[] |
[{"url": "url3", "name": "name3"} |
我想编写一个创建新列的 postgres 函数,如下所示:
结果 |
---|
['<a href="url1">name1</a>', '<a href="url2">name2</a>'] |
[] |
['<a href="url3">name3</a>'} |
我已经有东西了:
SELECT
jsonb_agg(format('<a href="%s">%s</a>', (elem ->> 'url'), (elem ->> 'name')))
FROM jsonb_array_elements('[{"url": "url1", "name": "name1"}, {"url": "url2", "name": "name2"}]'::jsonb) elem;
哪个returns:
["<a href="url1">name1</a>", "<a href="url2">name2</a>"]
如何将此转换应用到整个列?
我猜您正在寻找嵌套的 select 语句:
with mytable (refs) as (
values
('[{"url": "url1", "name": "name1"}, {"url": "url2", "name": "name2"}]'::jsonb),
('[]'),
('[{"url": "url3", "name": "name3"}]')
)
select (select coalesce(jsonb_agg(format('<a href="%s">%s</a>',
elem->>'url', elem->>'name')),
'[]')
from jsonb_array_elements(refs) elem) result
from mytable;
(顺便说一句,references
是 PostgreSQL 中的保留关键字,可能会导致错误消息令人困惑。)