
Dmitry
16.07.2017
13:26:29
Тут вопрос умений слоя работы с БД, если он умеет прозрачно вложенные транзакции путем сейвпоинтов, то по идее можно обернуть тест в транзакцию

Stas
16.07.2017
13:29:48

Dmitry
16.07.2017
13:35:36

Stas
16.07.2017
13:36:12
хм, с таким не сталкивался пока.
у меня бихат.

Google

Stas
16.07.2017
13:37:30
но просто такой тест не предусматривает зависимость от записанных данных

Fike
16.07.2017
13:37:37

Anatoliy
16.07.2017
13:39:02
Ну тогда надо опустить речь о транзакциях и начать о воспроизведении базы. Т.е. тест должен разворачивать базу и работать с ней, потом дропать.

Fike
16.07.2017
13:39:28
С проблем с этим обсуждение и началось

Dmitry
16.07.2017
13:40:37
для бихата тоже есть расширения для работы через потроха, по крайней мере с симфони и как-то там через before/afterScenario делают просто старт и ролбек транзакции

Stas
16.07.2017
13:42:50
интересно. надо будет почитать на досуге.

Andrey
16.07.2017
14:18:04
Отвертка предназначена для закручивания шурупов, а транзакции - для обеспечения консистентности данных.
Атомарность транзакции следует из требования консистентности, это особенность, а не ключевое свойство

Pavel
16.07.2017
14:23:30
Электричество предназначено для появления молний а не для того чтобы его люди по проводам пускали
А вообще - прогон теста это и есть типичный пример в котором нужно обеспечить консистентность данных. 0 данных было до теста, 0 данных должно остаться после теста.

Darafei
16.07.2017
14:33:03

Google

Darafei
16.07.2017
14:33:50
даже банально второе хранилище в виде какого-нибудь мемкеша сразу ломает идею "а давайте только транзакциями тестировать"

Pavel
16.07.2017
14:35:36
Открыли транзакцию, потестировали, почистили мемкеш, откатили транзакцию. Вроде все благородно.

Darafei
16.07.2017
14:37:55
что такое "почистили"? :)
его-то надо не в пустое, а в предыдущее состояние вернуть

Fike
16.07.2017
14:39:14

Pavel
16.07.2017
14:41:01

Сергей
16.07.2017
14:41:23

Fike
16.07.2017
14:41:53
они не чистить друг за другом должны, а быть изолированными друг от друга

Сергей
16.07.2017
14:43:13
Да. А возврат в предыдущее состояние уже делает какой-то ресурс глобальным и изменяемым,что плохо

Pavel
16.07.2017
14:44:33
Ну в реальности обеспечить изолированность друг от друга 1000 тестов трудновато. А подчистка ресурсов или откат транзакции дает по сути такую же изолированность с т.з. поведения

Fike
16.07.2017
14:45:03
этим все равно не тест занимается

Pavel
16.07.2017
14:45:05
А если нет разницы то зачем платить больше
Ну да, система запуска тестов. А вопрос/тезис то в чем?

Kirill
16.07.2017
14:45:58
Sequence не откатывается в постгресе. Логика некоторых тестов может опираться на определенную последовательность.

Сергей
16.07.2017
14:47:27
Некоторые вещи конечно приходится самому откатывать, но их обычно гораздо меньше чем простых юнит тестов

Andrey
16.07.2017
15:01:39

Dmitry
16.07.2017
15:06:11

Andrey
16.07.2017
15:09:04

Google

Darafei
16.07.2017
15:09:08
кажется, проблема в том, что не все тут понимают, что тестов бывает много, разных видов, и не все из них можно подвести под любимый паттерн :)

Pavel
16.07.2017
15:09:17
Andrey, в чем эссенциале ваших сообщений?? Причем тут нагрузочное тестирование когда мы говорим о функциональном? Кто ставит эти необязательные требования? Ребята с форума? Поток сознанкия какой-то.

Dmitry
16.07.2017
15:09:46

Andrey
16.07.2017
15:09:50

Kirill
16.07.2017
15:10:47

Andrey
16.07.2017
15:11:00

Pavel
16.07.2017
15:11:20
Например прочтите 4 предложение.
приветствую всех. Господа, есть вопрос.
Пишу проект, решил сменить БД с MySQL на PostgreSQL. Пока все хорошо, кроме одного момента.
В функциональных тестах на каждый сценарий делаю TRUNCATE с cascade=true. И вот, что-то на постгресе транкейт отнимает прилично времени - 25сек. для каждого сценария.
Есть какие-то лайфхаки, что подтюнить, чтобы сократить это время?
Мб заменить на
DELETE FROM table;
VACCUUM (FULL, ANALYZE) table;
Что посоветуете?

Dmitry
16.07.2017
15:11:50

Fike
16.07.2017
15:11:59
нагрузочный тест на беременность [x]

Andrey
16.07.2017
15:12:17

Dmitry
16.07.2017
15:14:45

Dmitry
16.07.2017
15:17:58
Транзакция тут, конечно, костыль.... но когда костыль позволяет двигаться быстрее, чем на своих двоих - это уже не костыль. И если его можно применить - то почему бы и нет. Другое дело, что не всегда можно, так что не панацея

Pavel
16.07.2017
15:19:46
> это уже не костыль
, а технологический крепеж ?

Айтуар
16.07.2017
15:52:56

Артур
16.07.2017
16:52:46
Тут у меня спор возник. Или даже скажем так непонимание.
Разговаривали о гос. тайне, обсуждали мандатное управдление доступом.
Как я понимаю это доступ "сверух вниз". То есть если человек, допустим с допуском "секретно" создал документ, доступ к этому документу имеют только пользователи с аналогичным уровнем доуступа, конкретного подразделения. То есть смотреть документ не может другой департамент и пользователи с меншим уровнем допуска
Или я что-то не так понимаю?
Есть в postgres эта функция с 9.2. (частично). Но ее применение и сама методология мне до конца не ясна.

Arthur
16.07.2017
16:58:14

Артур
16.07.2017
17:03:13
Так, но получается что субъект не может создавать объект с более низким уровнем досутпа.

Google

Артур
16.07.2017
17:07:08
То есть в случае мандатного доступа субъект не только не может указывать права доступа к объекту. Он вообще ничего не может. Система сама решает какого уровня объект и кто может его смотреть.

Arthur
16.07.2017
17:08:55
ну у человека есть минимальный и максимыйльный возможный уровень доступа, он может переключаться между ними и промежуточными уровнями. Например при логине

Артур
16.07.2017
17:11:00

Arthur
16.07.2017
17:11:57
мне кажется, он не сможет этого сделать. Но я могу ошибаться
он может только повысить уровень доступа, как я понимаю

Артур
16.07.2017
17:13:06
То есть только вверх. Ни шагу вниз ?
А как тогда происходит понижение уровня доступа к объекту и предоставление доступа другим департаментам? Пересозданием копии объекта?

Admin
ERROR: S client not available

Stas
16.07.2017
17:18:06
мне кажется, что изменить на доступ вниз, можно (но уже другими инструментами). Основной посыл не делать этого при создании объекта, чтобы по ошибке не дать права субъектам, у которых уровень доступа ниже.
Но могу и ошибаться.

Arthur
16.07.2017
17:18:11
понижать сможет суперпользователь какой-нибудь :) Но не обычные пользователи. У документа кроме уровня доступа, также есть категории, по этим категориям можно определять, у каких департаментов есть доступ к документу.

Артур
16.07.2017
17:20:26

Arthur
16.07.2017
17:25:42
проблема в диискреционной политике в том, что если пользователь создаст документ, он сможет дать права и другим группам тоже
а в мандатной политике он не сможет менять категории

Артур
16.07.2017
17:27:32
Спасибо большое.
С чего началось то. В postgres c версии 9.2 якобы есть поддержка мандатного управления доступом в связке с SELinux. Вот с женой за чашкой чая и начался разговор об этом. Потом чуть глубже ушли и загооворили о том возможно ли это реализовать на уровне БД без использования SELinux и как это реализуемо.
А вот когда оба челвоека не на 100% понимают тему, возникают "дискуссии" ?

Arthur
16.07.2017
17:29:32
в Astra Linux есть патченный постгрес, там без SELinux, но он я думаю платный

Google

Сергей
16.07.2017
17:33:01
Он еще и отдельных юзеров требует, это много соединений
Может быть очень много под нагрузкой

Артур
16.07.2017
17:39:20
Хотя глупый вопрос. Атомарен. Иначе нормализации нет
По идее реалзиация мандатного доступа в postgres решается более глобальным программно-аппаратным комплексом, а не самой субд
Я прав?

Сергей
16.07.2017
17:43:56
Я не оч понял твои вопросы. Row level security в доке постгреса это называется

Артур
16.07.2017
17:51:08

Айтуар
16.07.2017
17:51:59

Артур
16.07.2017
17:57:34

Айтуар
16.07.2017
18:01:40

Артур
16.07.2017
18:04:58
Есть CRM клиента, там дискреционный контроль доступа, обсуждали с женой возможность перебраться на мандатку, т.к. сейчас разделение доступа уже реализуется больше алгоритмами на основе меток строк, чем простым "пользователь" - "группа"
М.б. полезно кому-нибудь будет. Во время обсуждения нарвались на старую статейку (аж 2002, но всеравно хорошая) в инете по поводу доступов
http://citforum.ru/security/articles/safe_db/


Igor
16.07.2017
19:30:35
Подскажите, а насколько плохая идея использовать индекс по hash(text_field) вместо обычных b-tree? постгря 9.6.
WARNING: hash indexes are not WAL-logged and their use is discouraged
я правильно понимаю, что если не wal-logged, то при сбое индекс не восстановится? это, вроде, не критично, потому что щас он создался за <1 сек, а аналогичный запрос на создание b-tree индекса проработал больше часа (таблица с ~300к строк), я задолбался ждать и отменил.
как вообще лучше поступить в таком случае?
поле с utf-8 строчкой размером в среднем ~30 символов.
хочется быстрые селекты со сравнением "=" по этой строчке. ни лайков, ничего такого.
поменял столбцу LC_COLLATE с "en_US.UTF-8" на "C.UTF-8" и, похоже, стало прям отлично вообще. это чем-нибудь чревато в моем случае?(

Артур
16.07.2017
23:16:29
Вот честно ничего по этому поводу сказать не могу ?

Igor
16.07.2017
23:16:34
Ребят, подскажите пожалуйста.
Есть такая таблица
id json
1 [{value: 1, bool: true}, {value: 2, bool: true}]
2 [{value: 1, bool: false}, {value: 3, bool: true}]
3 [{value: 3, bool: false}]
мне в результате нужны записи (id, value) в тех случаях, когда внутри json объекта bool: true.
тоесть результат должен быть такой
id value
---- -------
1 1
1 2
2 3
json_array_elements(json)->>'value' отлично справляется с тем что бы вывести все значения Value, но к сожалению нельзя добавить нигде условия, что бы выводило только в случае WHEN bool = true.


Артур
16.07.2017
23:17:44
Ребят, подскажите пожалуйста.
Есть такая таблица
id json
1 [{value: 1, bool: true}, {value: 2, bool: true}]
2 [{value: 1, bool: false}, {value: 3, bool: true}]
3 [{value: 3, bool: false}]
мне в результате нужны записи (id, value) в тех случаях, когда внутри json объекта bool: true.
тоесть результат должен быть такой
id value
---- -------
1 1
1 2
2 3
json_array_elements(json)->>'value' отлично справляется с тем что бы вывести все значения Value, но к сожалению нельзя добавить нигде условия, что бы выводило только в случае WHEN bool = true.
when или while?