powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / пятничная задачка
11 сообщений из 11, страница 1 из 1
пятничная задачка
    #39633406
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в разборе проблем пж на хабре есть хадачка

https://habrahabr.ru/company/devconf/blog/353682/#comment_10763534
авторТам была не очень специфическая задача: раз в день переносить изменения из PostgreSQL в OLAP, для чего в PostgreSQL завели заполняемую триггером таблицу change_log. Нужно было всего-то вычитать из нее данные и почистить ее. Так вот: мне не удалось найти решение, которое бы работало за линейное время и при этом умело вычитывать эту таблицу по частям.

Получилось либо удаление всех записей в одной большой транзакции с чтением удаляемых при этом данных, либо квадратичный алгоритм (оптимизатор упрямо сует в план запроса на удаление полный проход по таблице). Итог в любом случае один и тот же: если позволить данным скопиться, то их уже никогда не удастся оттуда вычитать.

проверяем :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table trash.tcopy  AS 
with del as (
DELETE FROM trash.ngrams4w as t
 WHERE ctid = 
 (select ctid FROM trash.ngrams4w limit 1)
 returning t.*
) select * from del

 ;


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
'CTE Scan on del  (cost=4.04..4.06 rows=1 width=152) (actual time=38.276..38.278 rows=1 loops=1)'
'  Output: del.id, del.keyword_1, del.keyword_2, del.keyword_3, del.keyword_4, del.ck1, del.ck2, del.ck3, del.ck4, del.ci'
'  Buffers: shared hit=3 read=1 dirtied=1'
'  CTE del'
'    ->  Delete on trash.ngrams4w t  (cost=0.03..4.04 rows=1 width=6) (actual time=38.273..38.275 rows=1 loops=1)'
'          Output: t.id, t.keyword_1, t.keyword_2, t.keyword_3, t.keyword_4, t.ck1, t.ck2, t.ck3, t.ck4, t.ci'
'          Buffers: shared hit=3 read=1 dirtied=1'
'          InitPlan 1 (returns $0)'
'            ->  Limit  (cost=0.00..0.02 rows=1 width=6) (actual time=38.241..38.242 rows=1 loops=1)'
'                  Output: ngrams4w.ctid'
'                  Buffers: shared read=1'
'                  ->  Seq Scan on trash.ngrams4w  (cost=0.00..90099.37 rows=3958637 width=6) (actual time=38.239..38.239 rows=1 loops=1)'
'                        Output: ngrams4w.ctid'
'                        Buffers: shared read=1'
'          ->  Tid Scan on trash.ngrams4w t  (cost=0.00..4.01 rows=1 width=6) (actual time=38.252..38.252 rows=1 loops=1)'
'                Output: t.ctid'
'                TID Cond: (t.ctid = $0)'
'                Buffers: shared hit=1 read=1'
'Planning time: 0.147 ms'
'Execution time: 422.965 ms'



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with del as (
DELETE FROM trash.ngrams4w as t
 WHERE ctid = any( 
 array(select ctid FROM trash.ngrams4w limit 100))
 returning t.*
) 
insert into trash.tcopy
select * from del
 ;


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
'Insert on trash.tcopy  (cost=42.39..42.59 rows=10 width=152) (actual time=0.783..0.783 rows=0 loops=1)'
'  Buffers: shared hit=401 read=4 dirtied=3'
'  CTE del'
'    ->  Delete on trash.ngrams4w t  (cost=2.29..42.39 rows=10 width=6) (actual time=0.143..0.424 rows=100 loops=1)'
'          Output: t.id, t.keyword_1, t.keyword_2, t.keyword_3, t.keyword_4, t.ck1, t.ck2, t.ck3, t.ck4, t.ci'
'          Buffers: shared hit=301 read=1 dirtied=1'
'          InitPlan 1 (returns $0)'
'            ->  Limit  (cost=0.00..2.28 rows=100 width=6) (actual time=0.021..0.094 rows=100 loops=1)'
'                  Output: ngrams4w.ctid'
'                  Buffers: shared hit=1 read=1'
'                  ->  Seq Scan on trash.ngrams4w  (cost=0.00..90099.37 rows=3958637 width=6) (actual time=0.020..0.078 rows=100 loops=1)'
'                        Output: ngrams4w.ctid'
'                        Buffers: shared hit=1 read=1'
'          ->  Tid Scan on trash.ngrams4w t  (cost=0.01..40.11 rows=10 width=6) (actual time=0.126..0.179 rows=100 loops=1)'
'                Output: t.ctid'
'                TID Cond: (t.ctid = ANY ($0))'
'                Buffers: shared hit=101 read=1'
'  ->  CTE Scan on del  (cost=0.00..0.20 rows=10 width=152) (actual time=0.145..0.466 rows=100 loops=1)'
'        Output: del.id, del.keyword_1, del.keyword_2, del.keyword_3, del.keyword_4, del.ck1, del.ck2, del.ck3, del.ck4, del.ci'
'        Buffers: shared hit=301 read=1 dirtied=1'
'Planning time: 0.163 ms'
'Execution time: 0.824 ms'



кажется работает. нет ?
или я что-то просмотрел ?


зы. статья полезная. хотя злобная и "хайповая"
...
Рейтинг: 0 / 0
пятничная задачка
    #39633496
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот с учетом иерархии все грустно:

1. using сделали, а научить ему планировщик забыли. даже без tableoid:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with del as (
DELETE FROM trash.ngrams4w as t
using (select tableoid,ctid FROM trash.ngrams4w limit 100) L 
 WHERE --t.tableoid =L.tableoid and  
 t.ctid = L.ctid
 returning t.*
) 
insert into trash.tcopy
select * from del
 ;


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
'Insert on trash.tcopy  (cost=651947.42..651949.42 rows=100 width=152) (actual time=2808.390..2808.390 rows=0 loops=1)'
'  Buffers: shared hit=461 read=50374 dirtied=18, temp read=9823 written=14318'
'  CTE del'
'    ->  Delete on trash.ngrams4w t  (cost=632152.74..651947.42 rows=100 width=40) (actual time=2808.090..2808.262 rows=100 loops=1)'
'          Output: t.id, t.keyword_1, t.keyword_2, t.keyword_3, t.keyword_4, t.ck1, t.ck2, t.ck3, t.ck4, t.ci'
'          Buffers: shared hit=354 read=50374 dirtied=14, temp read=9823 written=14318'
'          ->  Merge Join  (cost=632152.74..651947.42 rows=100 width=40) (actual time=2808.058..2808.121 rows=100 loops=1)'
'                Output: t.ctid, l.*'
'                Merge Cond: (t.ctid = l.ctid)'
'                Buffers: shared hit=154 read=50374 dirtied=13, temp read=9823 written=14318'
'                ->  Sort  (cost=632146.14..642042.73 rows=3958637 width=6) (actual time=2401.230..2695.417 rows=1657115 loops=1)'
'                      Output: t.ctid'
'                      Sort Key: t.ctid'
'                      Sort Method: external merge  Disk: 61912kB'
'                      Buffers: shared hit=140 read=50373 dirtied=13, temp read=9823 written=14318'
'                      ->  Seq Scan on trash.ngrams4w t  (cost=0.00..90099.37 rows=3958637 width=6) (actual time=0.199..445.360 rows=3957436 loops=1)'
'                            Output: t.ctid'
'                            Buffers: shared hit=140 read=50373 dirtied=13'
'                ->  Sort  (cost=6.60..6.85 rows=100 width=40) (actual time=0.119..0.132 rows=100 loops=1)'
'                      Output: l.*, l.ctid'
'                      Sort Key: l.ctid'
'                      Sort Method: quicksort  Memory: 32kB'
'                      Buffers: shared hit=14 read=1'
'                      ->  Subquery Scan on l  (cost=0.00..3.28 rows=100 width=40) (actual time=0.030..0.095 rows=100 loops=1)'
'                            Output: l.*, l.ctid'
'                            Buffers: shared hit=14 read=1'
'                            ->  Limit  (cost=0.00..2.28 rows=100 width=10) (actual time=0.024..0.070 rows=100 loops=1)'
'                                  Output: ngrams4w.tableoid, ngrams4w.ctid'
'                                  Buffers: shared hit=14 read=1'
'                                  ->  Seq Scan on trash.ngrams4w  (cost=0.00..90099.37 rows=3958637 width=10) (actual time=0.023..0.062 rows=100 loops=1)'
'                                        Output: ngrams4w.tableoid, ngrams4w.ctid'
'                                        Buffers: shared hit=14 read=1'
'  ->  CTE Scan on del  (cost=0.00..2.00 rows=100 width=152) (actual time=2808.092..2808.283 rows=100 loops=1)'
'        Output: del.id, del.keyword_1, del.keyword_2, del.keyword_3, del.keyword_4, del.ck1, del.ck2, del.ck3, del.ck4, del.ci'
'        Buffers: shared hit=354 read=50374 dirtied=14, temp read=9823 written=14318'
'Planning time: 0.210 ms'
'Execution time: 2815.757 ms'



c row все грустно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with top as (select tableoid,ctid FROM trash.ngrams4w limit 100)
, del as (
DELETE FROM trash.ngrams4w as t
 WHERE 
(tableoid,ctid) = any(array(select (tableoid,ctid) FROM top))
 returning t.*
) 
insert into trash.tcopy
select * from del

 ;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
'Insert on trash.tcopy  (cost=139586.61..143457.35 rows=193537 width=152) (actual time=52707.944..52707.944 rows=0 loops=1)'
'  Buffers: shared hit=569 read=50340 dirtied=3'
'  CTE top'
'    ->  Limit  (cost=0.00..2.28 rows=100 width=10) (actual time=0.012..0.050 rows=100 loops=1)'
'          Output: ngrams4w.tableoid, ngrams4w.ctid'
'          Buffers: shared hit=15'
'          ->  Seq Scan on trash.ngrams4w  (cost=0.00..90099.37 rows=3958637 width=10) (actual time=0.011..0.044 rows=100 loops=1)'
'                Output: ngrams4w.tableoid, ngrams4w.ctid'
'                Buffers: shared hit=15'
'  CTE del'
'    ->  Delete on trash.ngrams4w t  (cost=2.00..139584.33 rows=193537 width=6) (actual time=0.497..52707.687 rows=100 loops=1)'
'          Output: t.id, t.keyword_1, t.keyword_2, t.keyword_3, t.keyword_4, t.ck1, t.ck2, t.ck3, t.ck4, t.ci'
'          Buffers: shared hit=459 read=50340'
'          InitPlan 2 (returns $1)'
'            ->  CTE Scan on top  (cost=0.00..2.00 rows=100 width=32) (actual time=0.018..0.115 rows=100 loops=1)'
'                  Output: ROW(top.tableoid, top.ctid)'
'                  Buffers: shared hit=15'
'          ->  Seq Scan on trash.ngrams4w t  (cost=0.00..139582.33 rows=193537 width=6) (actual time=0.464..52707.412 rows=100 loops=1)'
'                Output: t.ctid'
'                Filter: (ROW(t.tableoid, t.ctid) = ANY ($1))'
'                Rows Removed by Filter: 3957336'
'                Buffers: shared hit=259 read=50340'
'  ->  CTE Scan on del  (cost=0.00..3870.74 rows=193537 width=152) (actual time=0.500..52707.735 rows=100 loops=1)'
'        Output: del.id, del.keyword_1, del.keyword_2, del.keyword_3, del.keyword_4, del.ck1, del.ck2, del.ck3, del.ck4, del.ci'
'        Buffers: shared hit=459 read=50340'
'Planning time: 0.162 ms'
'Execution time: 52707.999 ms'



хотя если оставит его на речек:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with top as (select tableoid,ctid FROM trash.ngrams4w limit 1000)
, del as (
DELETE FROM trash.ngrams4w as t
 WHERE 
(tableoid,ctid) = any(array(select (tableoid,ctid) FROM top))
 and ctid = any (array(select ctid FROM top))
 returning t.*
) 
insert into trash.tcopy
select * from del
 ;


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
'Insert on trash.tcopy  (cost=103.00..103.02 rows=1 width=152) (actual time=124.512..124.512 rows=0 loops=1)'
'  Buffers: shared hit=4074 read=15 dirtied=33'
'  CTE top'
'    ->  Limit  (cost=0.00..22.76 rows=1000 width=10) (actual time=0.032..0.556 rows=1000 loops=1)'
'          Output: ngrams4w.tableoid, ngrams4w.ctid'
'          Buffers: shared hit=15 read=12 dirtied=2'
'          ->  Seq Scan on trash.ngrams4w  (cost=0.00..90099.37 rows=3958637 width=10) (actual time=0.031..0.412 rows=1000 loops=1)'
'                Output: ngrams4w.tableoid, ngrams4w.ctid'
'                Buffers: shared hit=15 read=12 dirtied=2'
'  CTE del'
'    ->  Delete on trash.ngrams4w t  (cost=40.01..80.24 rows=1 width=6) (actual time=2.042..122.293 rows=1000 loops=1)'
'          Output: t.id, t.keyword_1, t.keyword_2, t.keyword_3, t.keyword_4, t.ck1, t.ck2, t.ck3, t.ck4, t.ci'
'          Buffers: shared hit=3015 read=12 dirtied=14'
'          InitPlan 2 (returns $1)'
'            ->  CTE Scan on top  (cost=0.00..20.00 rows=1000 width=32) (actual time=0.002..0.460 rows=1000 loops=1)'
'                  Output: ROW(top.tableoid, top.ctid)'
'          InitPlan 3 (returns $2)'
'            ->  CTE Scan on top top_1  (cost=0.00..20.00 rows=1000 width=6) (actual time=0.036..1.090 rows=1000 loops=1)'
'                  Output: top_1.ctid'
'                  Buffers: shared hit=15 read=12 dirtied=2'
'          ->  Tid Scan on trash.ngrams4w t  (cost=0.01..40.24 rows=1 width=6) (actual time=2.015..119.621 rows=1000 loops=1)'
'                Output: t.ctid'
'                TID Cond: (t.ctid = ANY ($2))'
'                Filter: (ROW(t.tableoid, t.ctid) = ANY ($1))'
'                Buffers: shared hit=1015 read=12 dirtied=2'
'  ->  CTE Scan on del  (cost=0.00..0.02 rows=1 width=152) (actual time=2.044..122.844 rows=1000 loops=1)'
'        Output: del.id, del.keyword_1, del.keyword_2, del.keyword_3, del.keyword_4, del.ck1, del.ck2, del.ck3, del.ck4, del.ci'
'        Buffers: shared hit=3015 read=12 dirtied=14'
'Planning time: 0.216 ms'
'Execution time: 124.614 ms'



2 вопроса. 3 вопроса
1. зачем забыли юзинг
2. есть ли (более) элегантное решение ?
3. у кого-нть под рукой есть трешовая иерархия на 100--1000 миллионников от гб ?

...4. нет ли готового системного типа для пары табоид-тид ? так шобы планер его узнавал
...
Рейтинг: 0 / 0
пятничная задачка
    #39633513
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

а в предложенном решении же не линейное время получается? следующая итерация будет читать уже удаленные строки пока не придет автовакуум и не почистит их. скорее надо по диапазонам ctid читать (можно предварительно создать таблицу с диапазонами и удалять записи оттуда при чтении), правда пока будем читать кто-то в уже пройденные диапазоны может записать данные и в одной пачке получится не фиксированное число строк. хотя в 9.6+ можно заставить автовакуум просто сильно чаще по таблице ходить и не заморачиваться.
задача по идее решается просто партициями (если данные insert only), отцепляем нужную партицию, читаем по кускам по id, а потом drop/truncate.
...
Рейтинг: 0 / 0
пятничная задачка
    #39633565
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexiusqwwq,

а в предложенном решении же не линейное время получается? следующая итерация будет читать уже удаленные строки пока не придет автовакуум и не почистит их. скорее надо по диапазонам ctid читать (можно предварительно создать таблицу с диапазонами и удалять записи оттуда при чтении), правда пока будем читать кто-то в уже пройденные диапазоны может записать данные и в одной пачке получится не фиксированное число строк. хотя в 9.6+ можно заставить автовакуум просто сильно чаще по таблице ходить и не заморачиваться.
задача по идее решается просто партициями (если данные insert only), отцепляем нужную партицию, читаем по кускам по id, а потом drop/truncate.это макет. как мы выбираем топ 100 -- это еще можно определяться. важно чтобы после этого мы удаляли отработку близко к линейному.

если это лог, как у постановщика, то у него наверняка есть индекс по ид лога и нет апдейтов. видимо джоб должен бежать по ид и разгребать. (там автор не смог добиться линейного удаления по индексу).

пробежка по цтид с фиксацией достигнутого тоже хорошее решение. и да в 9.6 + нужно видимо включить вакуум . м.б. авто. м.б. -- в текст джоба. последним шагом. т.к. там он почти инкрементален.

то, что можно нарезать на партиечки -- само-собой. но борьба за "ДЕЛЕТ ТОП 1000"
...
Рейтинг: 0 / 0
пятничная задачка
    #39633590
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius,

вот тестируем индексный проход :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with pre AS (SELECT ARRAY(SELECT (ctid)  from test order by a limit 1000 for update)As ctids)
,del as (delete from test a WHERE a.ctid = ANY((select pre.ctids from pre)::tid[])
returning a.*)
INSERT into test2 select * from del;
-----------
Query returned successfully: 1000 rows affected, 31 msec execution time.
-----------
vacuum freeze analyze test;
-----------
Query returned successfully with no result in 71 msec.



планчик
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Insert on test2  (cost=80.99..81.19 rows=10 width=4) (actual time=3.526..3.526 rows=0 loops=1)
  Buffers: shared hit=6032 read=3
  CTE pre
    ->  Result  (cost=40.85..40.86 rows=1 width=32) (actual time=1.252..1.252 rows=1 loops=1)
          Buffers: shared hit=2008 read=3
          InitPlan 1 (returns $1)
            ->  Limit  (cost=0.42..40.85 rows=1000 width=16) (actual time=0.022..1.143 rows=1000 loops=1)
                  Buffers: shared hit=2008 read=3
                  ->  LockRows  (cost=0.42..40375.10 rows=998827 width=16) (actual time=0.022..1.058 rows=1000 loops=1)
                        Buffers: shared hit=2008 read=3
                        ->  Index Scan using test_a_idx on test  (cost=0.42..30386.83 rows=998827 width=16) (actual time=0.007..0.284 rows=1000 loops=1)
                              Buffers: shared hit=8 read=3
  CTE del
    ->  Delete on test a  (cost=0.03..40.13 rows=10 width=6) (actual time=1.282..2.558 rows=1000 loops=1)
          Buffers: shared hit=5013 read=3
          InitPlan 3 (returns $3)
            ->  CTE Scan on pre  (cost=0.00..0.02 rows=1 width=32) (actual time=1.255..1.255 rows=1 loops=1)
                  Buffers: shared hit=2008 read=3
          ->  Tid Scan on test a  (cost=0.01..40.11 rows=10 width=6) (actual time=1.276..1.598 rows=1000 loops=1)
                TID Cond: (ctid = ANY ($3))
                Buffers: shared hit=3008 read=3
  ->  CTE Scan on del  (cost=0.00..0.20 rows=10 width=4) (actual time=1.283..2.737 rows=1000 loops=1)
        Buffers: shared hit=5013 read=3
Planning time: 1.313 ms
Execution time: 3.567 ms

...
Рейтинг: 0 / 0
пятничная задачка
    #39633736
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТам была не очень специфическая задача: раз в день переносить изменения из PostgreSQL в OLAP, для чего в PostgreSQL завели заполняемую триггером таблицу change_log. Нужно было всего-то вычитать из нее данные и почистить ее. Так вот: мне не удалось найти решение, которое бы работало за линейное время и при этом умело вычитывать эту таблицу по частям.
а весь последний день перенести, не?
или брать последний ts из целевой таблицы
...
Рейтинг: 0 / 0
пятничная задачка
    #39633753
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78авторТам была не очень специфическая задача: раз в день переносить изменения из PostgreSQL в OLAP, для чего в PostgreSQL завели заполняемую триггером таблицу change_log. Нужно было всего-то вычитать из нее данные и почистить ее. Так вот: мне не удалось найти решение, которое бы работало за линейное время и при этом умело вычитывать эту таблицу по частям.
а весь последний день перенести, не?
или брать последний ts из целевой таблицы
это к автору по ссылке.

весь день может быть очень велик. обработка джобом может быть сложной. чтобы не поставить колом используемый инструмент (пж, длинные транзакции на котором, если он в режиме ОЛТП, более чем не приветствуются, чему посвящен весь хай по ссылке) -- обработку нарезают на части. примерно такой подход\паттерн при кодировании джобов.

убер на этом спалился. (что там невнятно проборматывается). на наличии сверхдлинных транзакций при наличии склонных к раздутию индексов часто обновляемых табличек. для пж это очень неудачный режим. индексы м.б. раздуты в 100-и раз.
...
Рейтинг: 0 / 0
пятничная задачка
    #39633787
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда...
tip78или брать последний ts из целевой таблицы
^ повторить 24 раза ^

зы: я читал эту статью
а ещё смотрел видео выступления кого-то из убера
по итогу сделал вывод, что в убере захватили власть рукожопики, поэтому там всё как-то не сложилось..
...
Рейтинг: 0 / 0
пятничная задачка
    #39634013
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,

блин, задача:
сэмулировать "ДЕЛЕТ ТОП 1000" в пж. за приемлемое время.
подзадача -- то же с иерархией вместо сингла.

подвопросы -- какого хера оптимайзер знает только про цтиды, но не про тейблоиды и их компаунды с цтидами.
например
//* у подвопроса есть история и супербаг был на этом деле в форейнг-дата-враппере пежовом.

или почему юнион не умеет цтид--скана. какая редиска его не обучила ? почему не наказан ?
ну и т.д.



а задача с линейным временем в пж делается на ротирующихся партициях. это не так интересно.
я как-то присматривался нельзя ли таким револьверным способом "уберовские случаи" обслуживать. при некоторых допущениях о природе вещей -- вполне можно.
...
Рейтинг: 0 / 0
пятничная задачка
    #39634025
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqподвопросы -- какого хера оптимайзер знает только про цтиды, но не про тейблоиды и их компаунды с цтидами.
например
//* у подвопроса есть история и супербаг был на этом деле в форейнг-дата-враппере пежовом.

или почему юнион не умеет цтид--скана. какая редиска его не обучила ? почему не наказан ?
ну и т.д.
на это вроде тот же самый Фролков ответил так:
постгрес это не оракл, который может нанять 2000 индусов на разработку
с разработчиками там туго, поэтому они сосредотачиваются на самых актуальных задачах, про которые больше всего запросов
...
Рейтинг: 0 / 0
пятничная задачка
    #39634394
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,

тут фенечка в том, что пж -- не оракл в том смысле, что там где в пж работающий синтаксис -- у оракла сидит цельный патентованный том, на цепи, и все его активно аскают. забава "аск том" называется.
пока было так -- любителей пж росло. (по ссылке эвона пара мсскльщиков посрались на эту тему -- про прозрачность языка).

а число индусов вторично


там кстати автор так и не въехал, насколько они лажают с "аналогиями" прилагая мерку инно-беды к пж.
https://habrahabr.ru/company/devconf/blog/353682/#comment_10768556
т.е. как уберовцы изначально переврали про "вторичные индексы" (волосы дыбом вставали), так последыши на головах и стоят. вместо того чтобы похерить эту постыдную псевдоаналогию.
адын мишатюрин бъёдца с немчурой.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / пятничная задачка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]