小编Kim*_*Kim的帖子

如何在postgres中编写组合函数?

我有这种形式的PostgreSQL表:

base_id int | mods smallint[]
     3      |   {7,15,48}
Run Code Online (Sandbox Code Playgroud)

我需要填充这种形式的表格:

combo_id int | base_id int | mods smallint[]
     1       |     3       |      
     2       |     3       |      {7}
     3       |     3       |      {7,15}   
     4       |     3       |      {7,48}   
     5       |     3       |      {7,15,48}
     6       |     3       |      {15}
     7       |     3       |      {15,48}
     8       |     3       |      {48}
Run Code Online (Sandbox Code Playgroud)

我想我可以使用几乎完全相同的函数完成此操作,迭代第一个表并将组合写入第二个表: 在SQL中生成所有组合

但是,我是Postgres新手,不能为我的生活找出如何使用plpgsql做到这一点.它不需要特别快; 它只会在后端定期运行.第一个表有大约80个记录,粗略计算表明我们可以预期第二个表的大约2600条记录.

任何人都可以至少指出我正确的方向吗?

编辑:克雷格:我有PostgreSQL 9.0.我成功地使用了UNNEST():

FOR messvar IN SELECT * FROM UNNEST(mods) AS mod WHERE mod BETWEEN 0 AND POWER(2, …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql combinatorics

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

为什么这个PostgreSQL全文搜索会在不同的(RDS)服务器上中断?

在多个开发服务器上,此查询已返回预期记录:

SELECT name, name_tsv FROM vision 
WHERE name_tsv @@ plainto_tsquery('Washington Square Park');
Run Code Online (Sandbox Code Playgroud)

name_tsv最初是在我的开发服务器上填充的

UPDATE vision SET name_tsv=to_tsvector(name);
Run Code Online (Sandbox Code Playgroud)

并通过触发器保持最新状态.

我在AWS PostgreSQL RDS实例上创建了相同的数据库.dev和RDS postgres版本均为9.3.1.据我所知,每个pg_catalog都有相同的FTS配置,字典,解析器和模板(默认情况下;我没有在这里搞乱任何东西).当然,我无法访问RDS实例上的pg conf文件.在此RDS实例上,上面的查询返回0条记录.

我在两个上运行了这个诊断查询:

SELECT name, 
name_tsv, 
to_tsvector(name), 
plainto_tsquery('Washington Square Park'), 
name_tsv @@ plainto_tsquery('Washington Square Park') AS matches_stored_name,
to_tsvector(name) @@ plainto_tsquery('Washington Square Park') AS matches_fresh_tsvector
FROM vision WHERE id_vision = 2977;
Run Code Online (Sandbox Code Playgroud)

RDS实例的结果是:

"1609: Washington Square Park";"'1609':1 'park':4 'squar':3 'washington':2";"'1609':1 'park':4 'square':3 'washington':2";"'washington' & 'square' & 'park'";f;t
Run Code Online (Sandbox Code Playgroud)

dev实例的结果是:

"1609: Washington Square Park";"'1609':1 'park':4 'squar':3 'washington':2";"'1609':1 'park':4 'squar':3 'washington':2";"'washington' & 'squar' & …
Run Code Online (Sandbox Code Playgroud)

postgresql full-text-search amazon-web-services amazon-rds

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