
Ryzhikov
09.12.2016
09:49:23
@Komzpa - выглядит как решение
только я на два запроса разобью - первый оценит селективность
второй уже вытащит данные либо с ранкигом либо без

Darafei
09.12.2016
09:51:10
зачем?

Google

Darafei
09.12.2016
09:51:16
это на что-то повлияет?

Stas
09.12.2016
09:51:35
чет я потерял нить рассуждений) как оценить количество доков если там лимит 100?

Ryzhikov
09.12.2016
09:53:30
сейчас сделаю explain
завис :)

Stas
09.12.2016
10:01:31
нуу должны быть те же 10 секунд если запрос не менялся


Ryzhikov
09.12.2016
10:01:44
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=63778.35..63778.60 rows=100 width=1231) (actual time=13632.699..13632.803 rows=100 loops=1)
-> Sort (cost=63778.35..63825.46 rows=18843 width=1231) (actual time=13632.697..13632.744 rows=100 loops=1)
Sort Key: (ts_rank(p.search, query.query, 1)) DESC
Sort Method: top-N heapsort Memory: 126kB
-> Nested Loop (cost=194.28..63058.18 rows=18843 width=1231) (actual time=27.701..13191.481 rows=74376 loops=1)
-> Function Scan on to_tsquery query (cost=0.25..0.26 rows=1 width=32) (actual time=0.025..0.026 rows=1 loops=1)
-> Bitmap Heap Scan on practitioner p (cost=194.03..62822.39 rows=18843 width=1227) (actual time=27.661..12971.466 rows=74376 loops=1)
Recheck Cond: (search @@ query.query)
Rows Removed by Index Recheck: 198605
Heap Blocks: exact=40567 lossy=27306
-> Bitmap Index Scan on practitioner_ts_idx (cost=0.00..189.32 rows=18843 width=0) (actual time=19.734..19.734 rows=74376 loops=1)
Index Cond: (search @@ query.query)
Planning time: 0.582 ms
Execution time: 13633.103 ms
(14 rows)


Stas
09.12.2016
10:03:52
буфферы не включил)


Ryzhikov
09.12.2016
10:04:24
кстати видимо статистика набралась - стало быстее :)
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=63778.35..63778.60 rows=100 width=1231) (actual time=1286.499..1286.593 rows=100 loops=1)
Buffers: shared hit=67946
-> Sort (cost=63778.35..63825.46 rows=18843 width=1231) (actual time=1286.497..1286.540 rows=100 loops=1)
Sort Key: (ts_rank(p.search, query.query, 1)) DESC
Sort Method: top-N heapsort Memory: 126kB
Buffers: shared hit=67946
-> Nested Loop (cost=194.28..63058.18 rows=18843 width=1231) (actual time=27.777..846.612 rows=74376 loops=1)
Buffers: shared hit=67946
-> Function Scan on to_tsquery query (cost=0.25..0.26 rows=1 width=32) (actual time=0.032..0.033 rows=1 loops=1)
-> Bitmap Heap Scan on practitioner p (cost=194.03..62822.39 rows=18843 width=1227) (actual time=27.728..627.899 rows=74376 loops=1)
Recheck Cond: (search @@ query.query)
Rows Removed by Index Recheck: 198605
Heap Blocks: exact=40567 lossy=27306
Buffers: shared hit=67936
-> Bitmap Index Scan on practitioner_ts_idx (cost=0.00..189.32 rows=18843 width=0) (actual time=19.763..19.763 rows=74376 loops=1)
Index Cond: (search @@ query.query)
Buffers: shared hit=27
Planning time: 0.560 ms
Execution time: 1286.979 ms
(19 rows)


Stas
09.12.2016
10:05:01
закешировалось скорее
а до этого в шаред буфферс читалось с диска
секунда больше уже похожа на правду

Google

Stas
09.12.2016
10:06:46
а теперь убрать сорт, подзапрос и просто каунт сделать)
два раза подряд
а потом поставить нормальные настройки shared_buffers)

Ryzhikov
09.12.2016
10:08:02
SELECT count(*) FROM "practitioner" "p", to_tsquery($TSQUERY$john$TSQUERY$) "query" WHERE "search" @@ "query" LIMIT 100;
count
-------
74376
(1 row)
Time: 877.708 ms
а нормальные - это что значит?

Stas
09.12.2016
10:08:49
чтоб индекс помещался в него

Ryzhikov
09.12.2016
10:09:23
pg_settings where name='shared_buffers';
name | setting | min_val | max_val | context
----------------+---------+---------+------------+------------
shared_buffers | 262144 | 16 | 1073741823 | postmaster
(1 row)

Stas
09.12.2016
10:09:29

Ryzhikov
09.12.2016
10:09:49
я понял - просто запрос правил

Stas
09.12.2016
10:10:38
это два гига?
там они в 8к страницах

Ryzhikov
09.12.2016
10:10:58
что-то типа того

Stas
09.12.2016
10:11:11
это чрезмерно консервативно

Roman
09.12.2016
10:11:20

Stas
09.12.2016
10:11:37
три бэктика
`
код
`

Roman
09.12.2016
10:12:09
спасибо)

Stas
09.12.2016
10:12:13
только три)

Ryzhikov
09.12.2016
10:12:44
Стас спасибо - буду ковырятся

Google

Anton [Mgn, az09@osm]
09.12.2016
10:36:52

Павел П.
09.12.2016
11:12:14
Чат, вопрос простенький.
Есть запрос
UPDATE table1 SET "somefield" = foo.fieldvalue
FROM( SELECT id,
COALESCE(
CASE
WHEN (table2.json_field ->> 'Imeetsya_deneg') IS NULL THEN ''
ELSE (table2.json_field -> 'Imeetsya_deneg' -> 'value')::text END
, '') as fieldvalue
FROM table2 WHERE ...) as foo WHERE table1.value_id = foo.id;
Он выполняется, всё ок
НО как только я его хочу выполнить из триггера, обернув в EXECUTE 'Update ....' Ругается на cannot extract element from a scalar (ибо не всегда в джейсоне есть нужные мне значения)
Но для этого проверку в кейсе и писал.
Вопрос:
Внутри функции кейсы как-то по-другому работают?
А вообще, ну его нафиг это всё, ежу понятно что не в кейсах дело, пойду лучше пива выпью

Славик
09.12.2016
11:27:08
обращайся

Anastasia
09.12.2016
11:28:13
кавычки

Павел П.
09.12.2016
11:29:17
Спасибо гуглу, другая проверка помогла

Darafei
09.12.2016
11:55:31
а можно ли как-нибудь у постгресового экстеншена дропнуть тип? :)

Arthur
09.12.2016
11:58:44
насколько я знаю, тип можно удалять только вместе с экстеншенем

Denis
09.12.2016
12:03:13
можно, большинство эекстеншенов идут с sql который запускается при create extentions,и в нем эти типы и создаются
их и можно допнуть

Darafei
09.12.2016
12:13:55
да, но вот уже созданный и импортированный экстеншен хочется разломать и заменить кусочек

Denis
09.12.2016
12:15:40
замени операции у типа, может этого хватит

Darafei
09.12.2016
12:17:22
надо тип :(

Arthur
09.12.2016
12:23:17
можно конечно попробовать хак, удалив вхождения типа из pg_depend
select * from pg_depend where objid = 657444 or refobjid = 657444;
delete from pg_depend where objid = 657444 or refobjid = 657444;
потом добавить oid нового типа

Павел П.
09.12.2016
12:45:18
Чат, а как начать гуглить чтобы догуглиться о том чтобы
Select только те колонки, тип которых - integer ?

Google

Славик
09.12.2016
12:46:48
я бы предположил, что сначала нужно получить список колонок с типами из таблицы и тогда уже делать запрос

Павел П.
09.12.2016
12:47:46
получить-то получу из information_schema , а вот дальше как быть не придумаю

Darafei
09.12.2016
12:51:26

Arthur
09.12.2016
12:55:44
не уверен ) но добавлять возможно тоже неправильно. От этого типа могут зависеть другие объекты, например функции, и они могут перестать работать. Поэтому лучше перед удалением посмотреть зависимости с помощью
select * from pg_depend where refobjid = 657444; (refobjid - это oid родительского объекта в отношении зависимости)

Admin
ERROR: S client not available

Павел П.
09.12.2016
12:59:02

Sergey
09.12.2016
13:12:38
Es

Yury
09.12.2016
13:13:21
кому то теперь будут страшные сны снится

Ivan
09.12.2016
13:13:45
и тёмные люди в погонах за спиной

blkmrkt
10.12.2016
22:05:33
короче странно, пробую делать`VACUUM FULL COMMENTS`, получаю:
WARNING: concurrent delete in progress within table "comments"
ERROR: MultiXactId 3036690260 does no longer exist -- apparent wraparound
Забытых процессов постгрес нет, но есть вот эта ситуация с xmax, которых должно быть 0, тк других процессов там нет.
Есть ли смысл попробовать UPDATE comments SET xmax = 0;?

Павел П.
12.12.2016
06:51:05
Чат, вопрос.
Create table foo(
"money_total" text,
"101676ba" text,
"cdc6889c" text
);
почему поле "101676ba" в созданной таблице остается с кавычками, а поле cdc6889c - без них?
В нем есть какие-то прерывающие символы (их последовательность)?
А если есть, почему постгр их не обрабатывает?

Yury
12.12.2016
06:53:04

Павел П.
12.12.2016
06:53:18
такая же фигня если назвать поля
f21d8bf4
de6aa783
d588e20d
они не с цифры начинаются

Александр
12.12.2016
06:53:35
Так в том и дело

Аггей
12.12.2016
06:53:36
Hex?

Александр
12.12.2016
06:53:54
2 разных названия, одно с цифры другео с буквы, не?

Павел П.
12.12.2016
06:54:11
еще раз

Google

Александр
12.12.2016
06:54:15
или f21... тоже в кавычках?

Yury
12.12.2016
06:54:20
тогда не понял вопросса
сделай \d на таблицу

Павел П.
12.12.2016
06:54:46
Create table foo(
"money_total" text,
"cdc6889c" text );
поле мани создается с кавычками в названии,
cdc6889c - без кавычек

Александр
12.12.2016
06:55:44
А если заменить на апостраф или вообще без кавычек?
Откуда вообще кавычки?
В доке же на сколько я помню нет кавычек ни каких при создании таблицы

Павел П.
12.12.2016
06:57:18

Александр
12.12.2016
06:57:39
Но тут же их нет
Всё равно не понимаю. ересь какая-та..\

Павел П.
12.12.2016
07:01:16

Петр
12.12.2016
07:01:40

Павел П.
12.12.2016
07:02:56
...а может это просто пгадмин не так показывает..?

Darafei
12.12.2016
07:03:47
любое название таблицы можно заключать в кавычки