if (select count(*) > 5 from mytable) then ...
if (select count(*) from mytable) > 5 then ...
или более смешной
if 5 < count(*) from mytable then ...
select * from mytable;
является недопустимым plpgsql
утверждением, поэтому ROW_COUNT
не подходит для этого случая.
Обычно ROW_COUNT
используется чтобы получить число строк , обработанное предыдущим оператором (вставка, обновление, удаление).
Обновление
Если вы не ' Точное количество строк не нужно, но нужно только проверить, больше или меньше его значение, более эффективный способ таких проверок:
select count(*) > 5 from (select 1 from mytable limit 6) as t(x);
# create table mytable(id bigserial not null primary key, x numeric);
# insert into mytable(x) select random() from generate_series(1,10000000) as a;
# explain analyze select count(*) > 5 from mytable;
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ QUERY PLAN │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Finalize Aggregate (cost=116777.88..116777.89 rows=1 width=1) (actual time=348.815..348.815 rows=1 loops=1) │
│ -> Gather (cost=116777.66..116777.87 rows=2 width=8) (actual time=348.713..368.395 rows=3 loops=1) │
│ Workers Planned: 2 │
│ Workers Launched: 2 │
│ -> Partial Aggregate (cost=115777.66..115777.67 rows=1 width=8) (actual time=328.703..328.703 rows=1 loops=3) │
│ -> Parallel Seq Scan on mytable (cost=0.00..105361.13 rows=4166613 width=0) (actual time=0.013..211.543 rows=3333333 loops=3) │
│ Planning Time: 0.080 ms │
│ JIT: │
│ Functions: 8 │
│ Options: Inlining false, Optimization false, Expressions true, Deforming true │
│ Timing: Generation 1.422 ms, Inlining 0.000 ms, Optimization 0.484 ms, Emission 9.246 ms, Total 11.152 ms │
│ Execution Time: 369.318 ms │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Time: 369,740 ms
# explain analyze select count(*) > 5 from (select 1 from mytable limit 6) as t(x);
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ QUERY PLAN │
├────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Aggregate (cost=0.17..0.19 rows=1 width=1) (actual time=0.020..0.020 rows=1 loops=1) │
│ -> Limit (cost=0.00..0.10 rows=6 width=4) (actual time=0.013..0.015 rows=6 loops=1) │
│ -> Seq Scan on mytable (cost=0.00..163693.71 rows=9999871 width=4) (actual time=0.012..0.013 rows=6 loops=1) │
│ Planning Time: 0.104 ms │
│ Execution Time: 0.046 ms │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Time: 0,507 ms