@pgsql

Страница 250 из 1062
Evgeniy
19.02.2017
21:14:17
но тут такое ебаное тестовое, когда оно оторвано от реальности

он тебе говорит про первую букву б а в проде будет не только буква б, или нетолько первая

и вот что ему хочется, хуй проссыш

но очевидно что тебе нужен составной индекс от первой буквы с возрастом

Google
Evgeniy
19.02.2017
21:15:35
заодно узнаешь что такое составной и функциональный индекс

и даже если на работу не возьмут - пойдет в вг

нам такие люди нужны, которые умеют в составные и функциональные

ато развели понимаешь постгреса

Darafei
19.02.2017
21:19:07
тут же ж partial в чистом виде

о, гы, постгрес молча позволяет каст в "char", который однобайтный и без коллейшенов

gis=# select ('ф'::"char") = ('ы'::"char"); ?column? —------— t (1 row)

Evgeniy
19.02.2017
21:44:18
тут же ж partial в чистом виде
конечно, если совсем не думать что буква "б" с потолка. потому и говорю что оторвано от реальности

Darafei
19.02.2017
21:55:49
ну человека с именем с маленькой буквы b тоже поискать надо

Артур
20.02.2017
07:13:54


Айтуар
20.02.2017
07:15:35
Чекпоинтер

Петр
20.02.2017
07:15:41
в pg_stat_activity не видно? тогда процессы смотри

Darafei
20.02.2017
12:58:35
кто-нибудь понимает, что тут происходит? gis=# select ascii('ф'::"char"::text); ascii ------- 1088 (1 row) gis=# select ascii('ф'::"char"); ascii ------- 1109 (1 row) gis=# select ascii('ф'); ascii ------- 1092 (1 row)

Google
Darafei
20.02.2017
12:59:26
я всегда считал, что ascii-коды больше 127, ну крайний случай 255 - не бывают

Anatoliy
20.02.2017
12:59:38
Это видимо надо уже по табличке смотреть

Darafei
20.02.2017
12:59:59
и совсем уж неясно, как оно влезает в однобайтный "char"

потому что gis=# select bit_length('ф'::char); bit_length ------------ 16 (1 row) gis=# select bit_length('ф'::"char"); bit_length ------------ 8 (1 row)

Alexey
20.02.2017
13:01:53
ASCII base — 7 бит, а расширенная — 256. Иначе бы раньше жизни не было бы. :)

Евгений
20.02.2017
13:02:22
так у вас там utf-8 символ? 2 байта

консоль в какой локали? ru_RU.UTF-8?

Darafei
20.02.2017
13:03:44
be_BY.UTF-8

но суть та же

ASCII base — 7 бит, а расширенная — 256. Иначе бы раньше жизни не было бы. :)
ASCII определяет латиницу и управляющие в 0..127, а выше уже другой бНОПНЯ

Alexey
20.02.2017
13:06:38
ASCII что семибитная, что восьмибитная — это ASCII.

Darafei
20.02.2017
13:07:31
да в любом случае. 'ф'::"char" - это восемь бит данных откуда там берётся ascii-код 1109?

Alexey
20.02.2017
13:07:51
О_о

Darafei
20.02.2017
13:08:37
вот и у меня то же ощущение

Igor
20.02.2017
13:10:17
https://www.postgresql.org/docs/9.4/static/functions-string.html

ASCII code of the first character of the argument. For UTF8 returns the Unicode code point of the character. For other multibyte encodings, the argument must be an ASCII character.

ну в документации же есть :(

Darafei
20.02.2017
13:11:40
но там же только половина кодпоинта :)

Igor
20.02.2017
13:13:30
почему половина? "ф" в utf8 - 0x444, она же 1092 а что за неведомая херня происходит при кастинге - хороший вопрос, конечно %)

Google
Darafei
20.02.2017
13:14:13
к 1092 никаких претензий

Igor
20.02.2017
13:14:55
зацените igor=# select ascii('ф'::"char"); 1151 igor=# select ascii('ф'::char); 1092 igor=# select ascii('ф'::"char"); 1088 о, теперь 1123 выпало с "char". прям можно RNG писать

Darafei
20.02.2017
13:16:16
о, так это ж buffer overflow! :)

он после combining sequence следующий байт вытаскивает, не глядя на размер буфера, небось

gis=# select ascii('ф'::"char"),1,ascii('ф'::"char"),ascii('ф'::"char"),ascii('ф'::"char"); ascii | ?column? | ascii | ascii | ascii —-----+----------+-------+-------+------- 1109 | 1 | 1088 | 1088 | 1088 (1 row)

Darafei
20.02.2017
13:23:58
какой ошибки?



на графике ascii(chr(generate_series(1,10000))::"char") от generate_series(1,10000)

Anton [Mgn, az09@osm]
20.02.2017
13:53:23
Сильно рано остановился. Функция ascii возвращает int

Darafei
20.02.2017
13:53:55
да, но дальше скучно, ERROR: requested character not valid for encoding: 55296

Stas
20.02.2017
14:54:33
непонятность
вполне, можно репортить

если собрать с ассертами — то падает, в текущем мастере тоже

* frame #0: 0x00007fffa964add6 libsystem_kernel.dylib`__pthread_kill + 10 frame #1: 0x00007fffa9736787 libsystem_pthread.dylib`pthread_kill + 90 frame #2: 0x00007fffa95b0420 libsystem_c.dylib`abort + 129 frame #3: 0x0000000107574970 postgres`ExceptionalCondition(conditionName="!((data[i] & 0xC0) == 0x80)", errorType="FailedAssertion", fileName="oracle_compat.c", lineNumber=884) + 128 at assert.c:54 frame #4: 0x00000001074b54de postgres`ascii(fcinfo=0x00007f9df900c5c0) + 734 at oracle_compat.c:884 frame #5: 0x00000001071ed352 postgres`ExecMakeFunctionResultNoSets(fcache=0x00007f9df900c550, econtext=0x00007f9df900ce00, isNull="") + 290 at execQual.c:1865 frame #6: 0x00000001071e7e17 postgres`ExecEvalFunc(fcache=0x00007f9df900c550, econtext=0x00007f9df900ce00, isNull="") + 103 at execQual.c:2241 frame #7: 0x00000001071e3e4b postgres`ExecEvalExprSwitchContext(expression=0x00007f9df900c550, econtext=0x00007f9df900ce00, isNull="") + 59 at execQual.c:4227 frame #8: 0x00000001072e875e postgres`evaluate_expr(expr=0x00007f9df9010470, result_type=23, result_typmod=-1, result_collation=0) + 158 at clauses.c:4684 frame #9: 0x00000001072e9445 postgres`evaluate_function(funcid=1620, result_type=23, result_typmod=-1, result_collid=0, input_collid=100, args=0x00007f9df9010438, funcvariadic='\0', func_tuple=0x0000000107ab31c0, context=0x00007fff58cb2f58) + 565 at clauses.c:4241 frame #10: 0x00000001072e8002 postgres`simplify_function(funcid=1620, result_type=23, result_typmod=-1, result_collid=0, input_collid=100, args_p=0x00007fff58cb15a8, funcvariadic='\0', process_args='\x01', allow_non_const='\x01', context=0x00007fff58cb2f58) + 370 at clauses.c:3880 frame #11: 0x00000001072e4995 postgres`eval_const_expressions_mutator(node=0x00007f9df9009e50, context=0x00007fff58cb2f58) + 1189 at clauses.c:2536 frame #12: 0x0000000107248853 postgres`expression_tree_mutator(node=0x00007f9df9009ea8, mutator=(postgres`eval_const_expressions_mutator at clauses.c:2415), context=0x00007fff58cb2f58) + 5763 at nodeFuncs.c:2846 frame #13: 0x00000001072e6e4a postgres`eval_const_expressions_mutator(node=0x00007f9df9009ea8, context=0x00007fff58cb2f58) + 10586 at clauses.c:3530 frame #14: 0x0000000107248a80 postgres`expression_tree_mutator(node=0x00007f9df9009f00, mutator=(postgres`eval_const_expressions_mutator at clauses.c:2415), context=0x00007fff58cb2f58) + 6320 at nodeFuncs.c:2895 frame #15: 0x00000001072e6e4a postgres`eval_const_expressions_mutator(node=0x00007f9df9009f00, context=0x00007fff58cb2f58) + 10586 at clauses.c:3530 frame #16: 0x00000001072e44e1 postgres`eval_const_expressions(root=0x00007f9df900a060, node=0x00007f9df9009f00) + 97 at clauses.c:2378 frame #17: 0x00000001072c5c1b postgres`preprocess_expression(root=0x00007f9df900a060, expr=0x00007f9df9009f00, kind=1) + 123 at planner.c:865 frame #18: 0x00000001072c4fa1 postgres`subquery_planner(glob=0x00007f9df9009838, parse=0x00007f9df90094e0, parent_root=0x0000000000000000, hasRecursion='\0', tuple_fraction=0) + 897 at planner.c:587 frame #19: 0x00000001072c45fe postgres`standard_planner(parse=0x00007f9df90094e0, cursorOptions=256, boundParams=0x0000000000000000) + 638 at planner.c:303 frame #20: 0x00000001072c436e postgres`planner(parse=0x00007f9df90094e0, cursorOptions=256, boundParams=0x0000000000000000) + 78 at planner.c:181 frame #21: 0x00000001073c2f69 postgres`pg_plan_query(querytree=0x00007f9df90094e0, cursorOptions=256, boundParams=0x0000000000000000) + 137 at postgres.c:798 frame #22: 0x00000001073c30be postgres`pg_plan_queries(querytrees=0x00007f9df900a028, cursorOptions=256, boundParams=0x0000000000000000) + 238 at postgres.c:864 frame #23: 0x00000001073c5d3e postgres`exec_simple_query(query_string="select ascii('ф'::\"char\");") + 782 at postgres.c:1029 frame #24: 0x00000001073c50ed postgres`PostgresMain(argc=1, argv=0x00007f9df883dfe0, dbname="stas", username="stas") + 2349 at postgres.c:4066

frame #25: 0x00000001073180be postgres`BackendRun(port=0x00007f9df8700000) + 654 at postmaster.c:4310 frame #26: 0x00000001073174b3 postgres`BackendStartup(port=0x00007f9df8700000) + 483 at postmaster.c:3982 frame #27: 0x00000001073164a5 postgres`ServerLoop + 597 at postmaster.c:1722 frame #28: 0x0000000107313cb5 postgres`PostmasterMain(argc=3, argv=0x00007f9df8402bc0) + 5397 at postmaster.c:1330 frame #29: 0x000000010724192f postgres`main(argc=3, argv=0x00007f9df8402bc0) + 751 at main.c:228 frame #30: 0x00007fffa951c255 libdyld.dylib`start + 1

падает в oracle_compat.c =)

Google
Darafei
20.02.2017
14:56:44
ну вот

а начиналось-то всё с безобидного по сути вопроса "а выберите самым быстрым способом без индексов всех на B" :)

Andrey
20.02.2017
14:58:21
Скажите, а это в какой версии поймали?

Darafei
20.02.2017
14:58:44
подозреваю, во всех

(у меня custom 9.6.1 от pgpro)

Igor
20.02.2017
14:59:31
Скажите, а это в какой версии поймали?
у меня на 9.6.2 воспроизводится

Stas
20.02.2017
15:02:01
Скажите, а это в какой версии поймали?
Судя по git blame эту функцию добавили в 8.3 и не меняли с тех пор. (если проблема в ней, а не кривые данные ей уже пришли)

пока не понял

select ascii('ф'::"text"); — вот так нормально себя ведет

и вот так select ascii('ф'::char); тоже

Darafei
20.02.2017
15:05:07
так там никто юникодный кодпоинт пополам и не режет

а что на select ascii('ф'::"char"::text); ?

Dmitriy
20.02.2017
15:06:41
wal_compression - стоит ли включать? уменьшит ли нагрузку на диск? не приведет ли к потенциальным проблемам с восстановлением БД после креша?

Alexander
20.02.2017
15:14:07
char – это тупо один байт. когда кастуешь мульибайтовую строку в него, то просто отрезается первый байт.

ascii потом по первому байту видит, что должен быть ещё и второй и читает из него мусор.

Если постгрес собран с ассертами, то он ещё и падает.

Короче, тип постгресовый тип char в современном мире выглядит глуповато :)

А баг нужно поправить просто репортом ошибки при попытке привести мультибайтовый символ в char.

Репортите в hackers.

Darafei
20.02.2017
15:40:45
а почему ошибки? 'aaaaaaaaaaaa'::varchar(4) ведь молча режет

Google
Pavel
20.02.2017
15:42:09
а почему ошибки? 'aaaaaaaaaaaa'::varchar(4) ведь молча режет
А что нам выдаст SELECT ascii('ф'::bpchar) ?

Darafei
20.02.2017
15:42:57
1092, как положено

Pavel
20.02.2017
15:43:26
1092, как положено
Так может его юзать. "char" — это ж старый системный

Darafei
20.02.2017
15:44:25
мы вообще вопрос с собеседования человеку решали

Pavel
20.02.2017
15:44:35
Darafei
20.02.2017
15:45:07
то, что "char" нигде использовать не надо, это понятно

но он показался самым быстрым способом откусить первую букву

настолько быстрым, что даже валидность не проверяет

Pavel
20.02.2017
15:47:08
мы вообще вопрос с собеседования человеку решали
Это там где надо было избавиться от вызова трёх функций? Ну тогда читтерство. Приведение типов, все равно, по сути, вызов функции ))

Darafei
20.02.2017
15:56:35
а кто хочет в hackers написать? :)

Pavel
20.02.2017
15:57:49
Ааа, нет. Там тоже надо вводить свои данные. Думал можно анонимно запульнуть ?

Darafei
20.02.2017
16:04:27
Also, please do not send reports to the developers' mailing list <pgsql-hackers@postgresql.org>. (c) https://www.postgresql.org/docs/9.4/static/bug-reporting.html

Alexander
20.02.2017
16:06:04
Да, баг лучше в bugs, в hackers уже с патчем.

vitaliy
20.02.2017
17:23:50
https://t.me/Blockchain_Developers

Артур
21.02.2017
00:37:00
всем привет. Как оптимальнее котроллировать обновление или заполнение поля? в бэкенде или в postgres?

Страница 250 из 1062