小编Bak*_*ker的帖子

plpgsql 中的动态变量名称(字符串到变量名称)

有没有办法动态使用变量名,我的意思是将其组成一个字符串,然后使用它。

请不要告诉我使用数组,我展示的示例只是为了更好的图片而进行的简化。

do $$ 
declare 
  var1 int:=1; 
  var2 int:=2; 
  var3 int:=3;  
  i int; 
begin
  raise notice 'Variable x %' , var1; 
  raise notice 'Variable x %' , var2; 
  raise notice 'Variable x %' , var3; 
  for i in 1..3 loop raise
     notice 'Variable x %' , 'var' || i; 
  end loop; 
end 
$$

Result

NOTICE:  Variable x 1
NOTICE:  Variable x 2
NOTICE:  Variable x 3
NOTICE:  Variable x var1
NOTICE:  Variable x var2
NOTICE:  Variable x var3
Run Code Online (Sandbox Code Playgroud)

所以我需要这样的东西,除了结果应该是数字而不是字符串,Variable …

postgresql dynamic-sql plpgsql

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

如何在 PostgreSQL 中创建位图索引?(它甚至有位图索引吗?)

我已经“谷歌搜索”了至少一个小时,但我无法找到如何在 PostgreSQL 中创建位图索引,所以我的问题很简单:如何在 PostgreSQL 中编写这个命令(来自 Oracle):

CREATE BITMAP INDEX name  ON table (column);
Run Code Online (Sandbox Code Playgroud)

postgresql bitmap-index

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

PostgreSQL:如何在函数中并行运行查询?

我有一个简单的查询

select bod_vykonu_kod, count(1)
from cdc_s5_zdroj
group by 1
order by 1 desc;
Run Code Online (Sandbox Code Playgroud)

它应该像它应该的那样并行运行。
解释分析: https: //explain.depesz.com/s/auVt

然后,如果我将相同的查询放入函数中,它就不会并行运行。我尝试了STABLEVOLATILE,但仍然没有相似之处。我还添加了PARALLEL SAFE但没有区别。

CREATE OR REPLACE FUNCTION 
test_par () 
returns table (
t_column1 bigint,
t_column2 bigint
)

volatile
PARALLEL SAFE
AS $dbvis$

BEGIN

RETURN QUERY
select bod_vykonu_kod, count(1)
from cdc_s5_zdroj
group by 1
order by 1 desc;

END;
$dbvis$ LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

解释分析易失性:https://explain.depesz.com/s/glFO
解释分析稳定:https://explain.depesz.com/s/vnXO
Explain analyze stable and parallel safe: https://explain.depesz.com/s/QlKM

x86_64-pc-linux-gnu 上的 PostgreSQL 11.5,由 gcc (GCC) …

sql postgresql parallel-processing

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

PostgreSQL:查询中的限制使其不使用索引

我有一个带有 BRIN 索引的大表,如果我使用 limit 进行查询,它会忽略索引并进行序列扫描,如果没有它,它会使用索引(我尝试了几次,结果相同)

explain (analyze,verbose,buffers,timing,costs) 
select *
from testj.cdc_s5_gpps_ind
where id_transformace = 1293
limit 100

Limit  (cost=0.00..349.26 rows=100 width=207) (actual time=28927.179..28927.214 rows=100 loops=1)
  Output: id, date_key_trainjr...
  Buffers: shared hit=225 read=1680241
  ->  Seq Scan on testj.cdc_s5_gpps_ind  (cost=0.00..3894204.10 rows=1114998 width=207) (actual time=28927.175..28927.202 rows=100 loops=1)
        Output: id, date_key_trainjr...
        Filter: (cdc_s5_gpps_ind.id_transformace = 1293)
        Rows Removed by Filter: 59204140
        Buffers: shared hit=225 read=1680241
Planning Time: 0.149 ms
Execution Time: 28927.255 ms

explain (analyze,verbose,buffers,timing,costs) 
select *
from testj.cdc_s5_gpps_ind
where id_transformace = 1293

Bitmap Heap …
Run Code Online (Sandbox Code Playgroud)

sql postgresql indexing

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

Postgres为组创建ID

我正在尝试解决一个一开始看起来很简单但无法找到任何(简单)解决方案的问题

我有一个包含几列的表,我想在由某些列定义的组上创建一个ID

最好在示例中显示三列,并且我想在由col1和col2定义的组上具有ID,这看起来像是窗口函数的工作,但是以某种方式我无法做到这一点

col1 col2 col3 ID
val1 valA x    1
val1 valA y    1
val1 valB y    2
val2 valC z    3
val3 valA v    4
val3 valA r    4
Run Code Online (Sandbox Code Playgroud)

sql postgresql window-functions

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