相关疑难解决方法(0)

数组的有效合并(删除重复项)

我有两张桌子,left2right2。两个表都会很大(1-10M 行)。

CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER);
ALTER TABLE left2 ADD PRIMARY KEY (id,t1);

CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] );
ALTER TABLE right2 ADD PRIMARY KEY(t1,d);
Run Code Online (Sandbox Code Playgroud)

我将执行这种类型的查询:

SELECT l.d + r.d,
       UNIQ(SORT((array_agg_mult(r.arr)))
FROM left2 l,
     right2 r
WHERE l.t1 = r.t1
GROUP BY l.d + r.d
ORDER BY l.d + r.d;
Run Code Online (Sandbox Code Playgroud)

在哪里聚合数组我使用函数:

CREATE AGGREGATE array_agg_mult(anyarray) (
SFUNC=array_cat,
STYPE=anyarray,
INITCOND='{}');
Run Code Online (Sandbox Code Playgroud)

连接数组后,我使用模块的UNIQ功能intarray。有没有更有效的方法来做到这一点?该arr字段上是否有任何索引可以加速合并(删除重复项)?聚合函数可以直接去除重复吗?如果有帮助,可以将原始数组视为已排序(并且它们是唯一的)。

SQL小提琴在这里

postgresql aggregate array postgresql-9.3

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

如何获取 Postgres 数据库的页面大小?

有没有办法选择 Postgres 数据库的页面大小?

我知道页面大小通常是 8K。我还从 2003 年开始阅读此电子邮件主题。我不知道这pg_controldata会起作用,因为我无权访问托管数据库的文件系统。

postgresql

6
推荐指数
1
解决办法
4298
查看次数

如何选择不为空的数组?

为什么这如此棘手,令牌设置为什么,它不等于 null 也不等于空字符串?

SELECT lexemes
FROM ts_debug('This is a title')
WHERE alias = 'asciiword';

 lexemes 
---------
 {}
 {}
 {}
 {titl}
(4 rows)
Run Code Online (Sandbox Code Playgroud)

好吧..所以我想摆脱{}

SELECT lexemes
FROM ts_debug('This is a title')
WHERE alias = 'asciiword'
  AND lexemes <> '{}'
  AND lexemes <> ARRAY[]::text[]
  AND lexemes IS NOT NULL
  AND lexemes <> ARRAY[' ']
  AND lexemes <> ARRAY[null]::text[];
Run Code Online (Sandbox Code Playgroud)

我知道其中大多数都行不通。,但我完全困惑为什么<> '{}'不起作用<> ARRAY[]::text;。我该如何过滤掉这个?

postgresql null condition array postgresql-9.5

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

如何按行查找列中的单词数(所有单词和唯一单词)?

我的 Postgresql 数据库中有一个名为Description包含文本的列。出于某些分析目的,我想查找该描述中的单词总数(以空格分隔)(所有单词和唯一单词),并在 columnsword_count和中设置这些计数unique_word_count。例如。

ID 描述
1 美好的一天
2 这是一个产品。它是有益的

我想要有以下输出:

ID 字数 唯一字数 描述
1 4 4 美好的一天
2 7 6 这是一个产品。它是有益的

for是 6 unique_word_countid = 2因为这个词is已经重复了 2 次。

postgresql

5
推荐指数
1
解决办法
8977
查看次数