相关疑难解决方法(0)

在PostgreSQL中计算和节省空间

我有一个像pg这样的表:

CREATE TABLE t (
    a BIGSERIAL NOT NULL,               -- 8 b
    b SMALLINT,                         -- 2 b
    c SMALLINT,                         -- 2 b
    d REAL,                             -- 4 b
    e REAL,                             -- 4 b
    f REAL,                             -- 4 b
    g INTEGER,                          -- 4 b
    h REAL,                             -- 4 b
    i REAL,                             -- 4 b
    j SMALLINT,                         -- 2 b
    k INTEGER,                          -- 4 b
    l INTEGER,                          -- 4 b
    m REAL,                             -- 4 b
    CONSTRAINT a_pkey PRIMARY KEY (a)
);
Run Code Online (Sandbox Code Playgroud)

以上每行最多可添加50个字节.我的经验是,我需要另外40%到50%的系统开销,甚至没有任何用户创建的索引.所以,每行约75个字节.我将在表中有许多行,可能超过1450亿行,因此该表将推动13-14太字节.我可以使用什么技巧来压缩这个表?我的可能想法如下......

将 …

postgresql storage database-design bigdata

58
推荐指数
4
解决办法
2万
查看次数

返回与plpgsql函数中的输入数组元素匹配的行

我想创建一个PostgreSQL函数,它执行以下操作:

CREATE FUNCTION avg_purchases( IN last_names text[] DEFAULT '{}' )
  RETURNS TABLE(last_name text[], avg_purchase_size double precision)
AS
$BODY$
DECLARE
  qry text;
BEGIN
qry := 'SELECT last_name, AVG(purchase_size) 
          FROM purchases
          WHERE last_name = ANY($1)
          GROUP BY last_name'
RETURN QUERY EXECUTE qry USING last_names;
END;
$BODY$
Run Code Online (Sandbox Code Playgroud)

但我在这里看到两个问题:

  1. 我不清楚数组类型是最有用的输入类型.
  2. 当我这样做时,这当前返回零行:

    SELECT avg_purchases($${'Brown','Smith','Jones'}$$);
    
    Run Code Online (Sandbox Code Playgroud)

我错过了什么?

arrays postgresql plpgsql aggregate-functions postgresql-9.2

3
推荐指数
1
解决办法
1637
查看次数