相关疑难解决方法(0)

Postgres 多列到 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了结果。有没有办法在我的数据字段中选择我需要的字段(名称和地址)?

postgresql row json

33
推荐指数
2
解决办法
5万
查看次数

为什么 array_agg() 比非聚合 ARRAY() 构造函数慢?

我刚刚查看了一些为8.4 之前的 PostgreSQL编写的旧代码,我看到了一些非常棒的东西。我记得以前有一个自定义函数可以做一些这样的事情,但我忘记了预先的array_agg()样子。回顾一下,现代聚合是这样写的。

SELECT array_agg(x ORDER BY x DESC) FROM foobar;
Run Code Online (Sandbox Code Playgroud)

然而,曾几何时,它是这样写的,

SELECT ARRAY(SELECT x FROM foobar ORDER BY x DESC);
Run Code Online (Sandbox Code Playgroud)

所以,我用一些测试数据试了一下..

CREATE TEMP TABLE foobar AS
SELECT * FROM generate_series(1,1e7)
  AS t(x);
Run Code Online (Sandbox Code Playgroud)

结果令人惊讶..#OldSchoolCool 方式要快得多:加速了 25%。此外,在没有ORDER 的情况下简化它,表现出同样的缓慢。

# EXPLAIN ANALYZE SELECT ARRAY(SELECT x FROM foobar);
                                                         QUERY PLAN                                                          
-----------------------------------------------------------------------------------------------------------------------------
 Result  (cost=104425.28..104425.29 rows=1 width=0) (actual time=1665.948..1665.949 rows=1 loops=1)
   InitPlan 1 (returns $0)
     ->  Seq Scan on foobar  (cost=0.00..104425.28 rows=6017728 width=32) (actual time=0.032..716.793 rows=10000000 loops=1) …
Run Code Online (Sandbox Code Playgroud)

postgresql benchmark aggregate array

16
推荐指数
2
解决办法
1万
查看次数

标签 统计

postgresql ×2

aggregate ×1

array ×1

benchmark ×1

json ×1

row ×1