
elfiki
11.09.2018
11:14:26

AlexAnder
11.09.2018
11:14:41
ок, посмотрю)

Vadim
11.09.2018
12:03:58
В системе в качестве ключей хранятся uuidы вместо привычного цифрового id. Но все колонки в которых они лежат имеют тип не UUID а просто текст. Имеет ли смысл переделывать? Постгрес будет как то иначе их обрабатывать? Поменял тип и явного прироста в скорости не увидел

Yaroslav
11.09.2018
12:06:58

Google

Ilia
11.09.2018
12:07:17

Vadim
11.09.2018
12:08:58

Denis
11.09.2018
12:09:07
а еще:
2) индексы будут компактнее
3) данные не будут выноситься в toast

Yaroslav
11.09.2018
12:11:19

Fike
11.09.2018
12:12:44
Хранить uuid просто соответствующим типом / как 16 байт - это хороший тон, но не обязательный.

Yaroslav
11.09.2018
12:14:50

stixlink
11.09.2018
13:03:38
всем привет! какой оператор более эффективный IN или ANY, а может еще какая альтернатива?
нагуглить не получилось

Darafei
11.09.2018
13:04:01
посмотри в план

stixlink
11.09.2018
13:05:00
ну может есть какое устоявшееся мнение?

Darafei
11.09.2018
13:05:33

Artyem
11.09.2018
13:26:52

Google

stixlink
11.09.2018
13:27:27

Ilia
11.09.2018
13:32:17

Yaroslav
11.09.2018
13:45:40

stixlink
11.09.2018
13:46:48

Yaroslav
11.09.2018
13:49:13
Ах, да — API должно поддерживать передачу параметров-массивов (не все умеют).

stixlink
11.09.2018
13:50:21
да, параметризованные

Александр
11.09.2018
13:51:01
Если gin висит, то лучше @@ использовать, чтобы индекс юзался
Точнее, @>, <@

Yaroslav
11.09.2018
13:51:45
да, параметризованные
Всё равно, проверьте. Кажется, на psycopg2 ругались, что с виду всё хорошо, а на самом деле используется string substitution (если не путаю). :(

Dmitry
11.09.2018
14:16:00
Кстати, в Pgfe всё по-честному - запросы параметризованные, причём с именованными параметрами. Ну и полноценная поддержка N-мерных массивов Постгреса с отображением в любой N-мерный STL-контейнер. Используйте Pgfe. ?


Alexander
11.09.2018
16:00:46
Ребята, можете помочь со сборкой pglogical? Внутренние ресурсы закончились...
Необходимо собрать pglogical под Windows Server R2 Standart 64-bit для PostgreSQL 9.5.12.
Что было сделано....
Изучена инструкция - https://blog.2ndquadrant.com/compiling-postgresql-extensions-visual-studio-windows/
Установлена Visual Studio 2017 под винду.
Создан проект.
Загружен код из репозитория https://github.com/2ndQuadrant/pglogical
При попытке сборки первая ошибка что нет пути к файлу postgres.h
Гугл говорит, что файл postgres.h можно найти в исходниках постгреса.
Скачаны исходники постгреса версии 9.5.12, в свойствах проекта прописаны пути к ним.
Результат отрицательный - куча ошибок на отсутствие необходимых файлов.
Основные вопросы:
1. Как указать компилятору, под какую версию постгреса должен быть собран pglogical?
2. Какие пути и где должны быть прописаны?
3. Что я делаю не так?
Собирал
Павел, спасибо за готовую сборку, но может отсталась какая-нибудь виртуалка с настроенным окружением или инструкция по сборке? Нужно собрать под определённую версию - PostgreSQL 9.5.12 Не такое это простое дело, как оказалось.


Сергей
11.09.2018
16:05:13
а из докер файла не пробовали подергать команды?
там послдовательность воспроизводимая как собрать

Alexander
11.09.2018
16:05:43

Сергей
11.09.2018
16:05:58
попробуйте)

Alexander
11.09.2018
16:08:04
Пытались использовать готовую сборку под 9.6, но из-за несовместимости новой и старой версий ничего не заработало.

Pavel
11.09.2018
16:16:15

Google

Alexander
11.09.2018
16:16:39
Ок. Благодарю)))

Pavel
11.09.2018
16:17:10
Пока не за что )))

Let Eat
11.09.2018
18:16:01

Yaroslav
11.09.2018
18:17:28

Let Eat
11.09.2018
18:18:40
Да и вообще, если все равно ждать, то зачем отменять >=RR? Ведь после ожидания будут новые данные, как будто транзакция началась после их коммита

Yaroslav
11.09.2018
18:22:08

Let Eat
11.09.2018
18:26:02

Fike
11.09.2018
18:29:40
я не следил за вашей дискуссией, но вполне возможно что write skew

Yaroslav
11.09.2018
18:30:44
Что такое рваный снапшот? Вот начинается вторая транзакция, она seralized, первой же запрос в ней select for update. Она ждёт пока закомитится предыдущая транзакция и вылетает с конфликтом. Чем этот вылет "лучше" , чем просто продолжить? Ведь данные будут такие же, будто ждущая транзакция началась после предыдущей
Во-первых, это крайний случай (вообще редко когда на SERIALIZABLE делают SELECT FOR UPDATE, мне кажется).
Во-вторых, это бы сработало, только если а) в первом запросе б) все выбираемые FOR UPDATE rows в) были бы ранее locked одной и той же транзакцией... и уже не слишком ли это (а может быть, есть и другие обязательные условия, дальше не думал)?

Terminator
11.09.2018
23:13:53
@serboox будет жить. Поприветствуем!


Alexey
12.09.2018
03:03:34
Что такое рваный снапшот? Вот начинается вторая транзакция, она seralized, первой же запрос в ней select for update. Она ждёт пока закомитится предыдущая транзакция и вылетает с конфликтом. Чем этот вылет "лучше" , чем просто продолжить? Ведь данные будут такие же, будто ждущая транзакция началась после предыдущей
Я думаю, что тут такой нобор случаев
1. Первая транзакция взяла for update, стартанула вторая транзакция и тоже хочет for update, после первая откатывается, тогда вторая может продолжить работу, ведь данные не изменены и соответствуют на момент старта второй.
2. Первая взяла for update, потом вторая, потом первая сделал а комит без изменения данных. Скорей всего вторая может просто продолжить работу
3. Первая взяла for update, потом вторая, первая сделал а комит, второй придётся кидать ошибку, так как данные изменены другой транзакцией и не соответствуют на момент старта второй.
Эти случаи вроде как для => RR.
Для RC скорей всего ошибка не кидается, она как раз может продолжить работу после блокировки.
Я не проверял, позже проверю.
Вообще я думал, что никаких блокировок >= RR не бывает, сразу ошибка кидается.
Я думаю, что тут такой нобор случаев
1. Первая транзакция взяла for update, стартанула вторая транзакция и тоже хочет for update, после первая откатывается, тогда вторая может продолжить работу, ведь данные не изменены и соответствуют на момент старта второй.
2. Первая взяла for update, потом вторая, потом первая сделал а комит без изменения данных. Скорей всего вторая может просто продолжить работу
3. Первая взяла for update, потом вторая, первая сделал а комит, второй придётся кидать ошибку, так как данные изменены другой транзакцией и не соответствуют на момент старта второй.
Эти случаи вроде как для => RR.
Для RC скорей всего ошибка не кидается, она как раз может продолжить работу после блокировки.
Я не проверял, позже проверю.
Вообще я думал, что никаких блокировок >= RR не бывает, сразу ошибка кидается.
Проверил, так и работает.
И при >= RR действительно блокируется.
Вообщем-то неудивительно, что именно так это работает, если вы знаете, от каких аномалий спасает каждый уровень изоляции (в данном случение RR).


Vladimir
12.09.2018
06:48:43
Добрый день!
Накатал тест/статью PostgreSQL
https://habr.com/post/422461/
Приглашаю заценить)

Denis
12.09.2018
06:59:09
неплохо
про нахождение подстроки и регулярки только скучновато

Leonid
12.09.2018
07:31:41

Виктор
12.09.2018
07:33:17
Скажи это JS программистам, там иногда невероятную наркоманию спрашивают, потому что язык много чего позволяет), но естественно, в здравом уме, никто делать так не будет как в примерах)

Vladimir
12.09.2018
07:35:28
Понял
Я закладывал обучающий характер, проблема - ответ
Нежели реальный тест на собеседовании

Leonid
12.09.2018
07:35:31
а уж sum от ::TEXT - это смешно, конечно, но как нормального человека это может даже интересовать?
не, инетересовать может, но это же не использовать. а если приходится, то из-за идиота до тебя, который сделал числовое поле строкой и тебе надо там конвертировать.

Google

Leonid
12.09.2018
07:37:00
короче, идея подачи этих мест, как вопросов на собеседовании, ИМХО, не очень хорошая

Vladimir
12.09.2018
07:38:39

Leonid
12.09.2018
07:40:44

Eugeny
12.09.2018
07:57:22
Тут очевидно речь про parent_id is Null
SELECT * FROM any_table WHERE parent_id = parent_id;
SELECT * FROM any_table WHERE parent_id IS NOT DISTINCT FROM parent_id
наши CodeFirst ждуны обычно не знают что в SQL Null <> Null ))

Yaroslav
12.09.2018
07:59:32

Vladimir
12.09.2018
08:42:04

Yaroslav
12.09.2018
08:42:59

Vladimir
12.09.2018
08:45:37

Yaroslav
12.09.2018
08:46:51

Айтуар
12.09.2018
08:46:52

Eugeny
12.09.2018
08:49:24

Yaroslav
12.09.2018
08:51:55

Alexey
12.09.2018
09:21:32
Добрый день!
Накатал тест/статью PostgreSQL
https://habr.com/post/422461/
Приглашаю заценить)
Лично я считаю, что на собеседовании можно задавать любые вопросы.
Но, если бы на вашем собеседовании были только эти вопросы, то я бы его не прошёл, ведь я не знаю ответа почти на каждый.
В 13-ом не понимаю сценарий, когда user_1 ввёл команду на увеличение на 5. В тот момент, когда пользователь User_2 вводит свою команду, команда от User_1 завершилась или она в процессе?

Vladimir
12.09.2018
09:22:05
Убрал эту фразу, вызывает проблемы при чтении по диагонали
Кроме собеседования никто ничего не увидел
Добавил лишь для привлечения внимания, а зря

Yaroslav
12.09.2018
09:32:34
Кроме собеседования никто ничего не увидел
Добавил лишь для привлечения внимания, а зря
Допустим, но я всё равно не понимаю, как вот это может быть "тонкостью" или "типичным рабочим моментом" (и зачем вообще это знать ;) ):
> Как вычислить количество ЗАГЛАВНЫХ (английских) букв в строке с помощью SQL?
> Как посчитать сумму чисел (не цифр) в строке с помощью SQL
То же самое касается вопроса номер 13. Мало того, что он сформулирован нечётко (может быть несколько исходов, включая неожиданные), но и, опять-таки, зачем это знать?

Terminator
12.09.2018
09:54:31
@BRenat будет жить. Поприветствуем!

Renat
12.09.2018
09:55:26
Всем привет. У меня тут вопрос по джоинам таблиц
если джоины идут друг за другом то джоин происходит по результатам предыдущего джоина?
`
LEFT JOIN "zones" ON "zones"."organization_id" = "user_organizations"."organization_id"
LEFT JOIN "groups" ON "groups"."organization_id" = "zones"."organization_id"
`
Вот группы приджонятся относительно выбранных зон или относительно всей таблицы зон?