Postgres 多列到 json

Ali*_*iBZ 33 postgresql row json

我正在运行 postgresql 9.3.4。我有一个包含 3 个字段的表:

id   name  addr
---  ----  ----
1    n1    ad1
2    n2    ad2
...
Run Code Online (Sandbox Code Playgroud)

我需要将数据移动到包含以下字段的新表:

id   data
---  ----
1    {'name': 'n1', 'addr': 'ad1'}
2    {'name': 'n2', 'addr': 'ad2'}
...
Run Code Online (Sandbox Code Playgroud)

row_to_json对我来说不是解决方案,因为它也SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t增加id了结果。有没有办法在我的数据字段中选择我需要的字段(名称和地址)?

Erw*_*ter 81

json_build_object()在 Postgres 9.4+ 中有一个更好的选择:

SELECT id, json_build_object('name', name, 'addr', addr) AS data
FROM   myt;
Run Code Online (Sandbox Code Playgroud)

但是row_to_json()在 Postgres 9.3 中还有一种更简单、更快的方法:

SELECT id, row_to_json((SELECT d FROM (SELECT name, addr) d)) AS data
FROM   myt;
Run Code Online (Sandbox Code Playgroud)

db<>fiddle here Postgres 9.6 上的
SQL Fiddle

相关回答:

  • 这是一个更好的答案,小提琴有证据。 (2认同)

Ali*_*iBZ 9

我从这个链接找到了答案:

select * from (
  select id,
    (
      select row_to_json(d)
      from (
        select name, addr
        from myt d
        where d.id=s.id
      ) d
    ) as data
  from myt s
)
Run Code Online (Sandbox Code Playgroud)

  • 除了外部查询中缺少表别名之外,这也比必要的更加复杂和昂贵。我用小提琴添加了另一个答案来演示。 (2认同)