Сохранен 402
https://2ch.hk/pr/res/2424142.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Универсальный баз данных тред #6 /sql/

 Аноним 03/08/22 Срд 23:47:36 #1 №2424142 
изображение.png
изображение.png
Прошлый >>2336742 (OP)

Ссылки:
- https://www.postgresqltutorial.com/
- https://www.mysqltutorial.org/
- https://www.sqlitetutorial.net/
- https://www.oracletutorial.com/
- https://github.com/agarcialeon/awesome-database

Задачи:
- https://www.sql-ex.ru
- https://www.codewars.com/?language=sql

Продвинутый MySQL:
- https://www.mysqltutorial.org/mysql-resources.aspx
- https://shlomi-noach.github.io/awesome-mysql/

Инструменты проектирования БД
- https://www.mysql.com/products/workbench/
- https://explain.dalibo.com/

Видосики:
- Плейлисты по разным СУБД: https://www.youtube.com/c/SQLDeveloperBI/playlists
- https://www.youtube.com/watch?v=EHvzvwAv7RU&list=PLY7PmJJFH5nT-lbFKxfbp3rw5BBuq5Azo

Литература:
- Томас Кайт. Oracle для профессионалов
- https://postgrespro.ru/education/books/dbtech
- Алан Бьюли. Изучаем SQL. - про MySQL
- К. Дж. Дейт. Введение в системы баз данных

Прочее:
- https://dbdb.io/
- https://db.cs.cmu.edu/
- https://www.youtube.com/channel/UCHnBsf2rH-K7pn09rb3qvkA/playlists
- Сравнение диалектов SQL: http://troels.arvin.dk/db/rdbms/
- Как БД работают изнутри: https://habr.com/ru/company/mailru/blog/266811/

Ссылки для аутистов:
- https://www.w3schools.com/sql/
- https://learnxinyminutes.com/docs/sql/
- https://metanit.com/sql/
- http://sql-tutorial.ru/
- MongoDB: https://metanit.com/nosql/mongodb/


FAQ:
Q: Нужно ли знать английский?
A: Да.

Q: Что лучше, SQL или NoSQL?
A: По задачам.

Q: Вопросы с лабами и задачками
A: Задавай, ответят, но могут и обоссать.

Здесь мы:
- Негодуем, почему шапка - говно, и предлагаем коллективному ОПу идеи, как её улучшить.
- Разбираемся, почему PostgreSQL - не Oracle
- Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
- Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе
- Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование
- Анализируем, как работает поиск вконтакте
- И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно.

Поехали!
Аноним 04/08/22 Чтв 00:10:34 #2 №2424156 
куда аноны слились?

>>2423015 →
>>2423016 →
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=c5dc53e328da9e54989f48c34183f868

Аноним 04/08/22 Чтв 02:41:31 #3 №2424206 
>>2424142 (OP)
Мигрировался в этот тред.
Аноним 04/08/22 Чтв 16:12:33 #4 №2424689 
>>2424156
не у всех постгрес где есть generate_series для дат

Аноним 04/08/22 Чтв 17:16:21 #5 №2424731 
>>2424689
Но в этом playground можно все потестить же
Аноним 04/08/22 Чтв 18:39:56 #6 №2424799 
Screenshot 2022-06-26 at 17.51.47.png
>>2424156
Бананы, ну что, даже подсказки не будет?
Ебаанииии рёЁт, с кем я на одной борде...
Аноним 04/08/22 Чтв 18:49:20 #7 №2424805 
>>2424799
Это нетипичная задачка для скл, надо быть ебать знатком, чтобы через жопу извернуться.
Если бы это был какой-то цсв, то решается в десять строчек и можно быстро молотить гигабайты, а тут хуй знает.
Аноним 04/08/22 Чтв 18:50:25 #8 №2424808 
>>2424805
Можешь молотить построчно из базы, но это хуевое решение, канеш.
Аноним 05/08/22 Птн 08:48:50 #9 №2425004 
>>2424156
Ну допустим
https://pastebin.com/cJdcDvye
а чо в постгресе такие ебнные функции работы со временем? Где datediff?
Аноним 05/08/22 Птн 15:25:44 #10 №2425296 
image.png
Есть такая сущность как Location - она объеденяет в себе коды вот этих 3х таблиц. Как это лучше всего представлять в Базе? Как View?
Это не самостоятельная сущность - полностью зависит от этих трех
Аноним 05/08/22 Птн 15:55:15 #11 №2425345 
https://dbfiddle.uk/?rdbms=postgres_13&fiddle=7a1ef1ab0a09577874a726743ea6f5cb
Как делать условные селекты? Нужно чтобы колонка name в результате была или null если у профиля нет имён, или первое имя профиля.
Аноним 05/08/22 Птн 21:37:03 #12 №2425812 
>>2425345
select case when ... then ... else ... end from yourtable
Аноним 05/08/22 Птн 21:46:02 #13 №2425821 
Пацаны, помогите долбоебу, не вдупляю, как это правильно решить.
У меня есть таблица с некими периодами со значениями, они могут накладываться друг на друга.
Нужно в итоге посчитать суммы этих значений во времени.
Ну типа
А-C - 1
B-D - 2
Результат
A-B - 1
B-C - 3
C-D - 2

Я короч придумал как это решить https://www.db-fiddle.com/f/8DoGuaWbJC8yeLwNxUadHg/0
но меня терзают смутные сомнения, что сделал это по-уебански совсем, и очень неэффективно.
Как сделать это правильно?

---

Моё решение такое, я подумал что логично будет сначала просто разбить всё множество периодов на отрезки.

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

Ну а имея отрезки уже можно было джойнуть их с периодами и уже агрегацией посчитать суммы, изи.
Аноним 05/08/22 Птн 22:40:26 #14 №2425864 
>>2425821
join по периодам + пропорциональный расчёт занчений на пересечении
Аноним 05/08/22 Птн 22:50:54 #15 №2425868 
>>2425864
Не понял. Что значит пропорциональный расчет? Можешь кодом?
Аноним 06/08/22 Суб 00:38:48 #16 №2425943 
>>2425868
нет, кодом только за деньги
ну смотри если у тебя разные отрезки времени, тебе же надо будет порезать по ним. Например первый 14:00-14:30 второй 14:10-14:20, соответственно пересечение 20 минут, а не 30. Делаешь джоин потом при помощи iif считаешь begin/end
Аноним 06/08/22 Суб 01:23:29 #17 №2425963 
Насколько оптимальное (и безопасно) предпочесть raw SQL запросы методам ORM интефрейса (django ORM)?
Аноним 06/08/22 Суб 02:43:00 #18 №2425980 
>>2425963
С ORM надо в деталях знать механизм его работы вплоть до чтения его исходников, читать книги на тысячи страниц, знать про проблемы типа N+1, очень внимательно и осторожно описывать конфиг ORM и все сущности, очень хорошо знать SQL, чтобы смотреть сгенерированные запросы и мочь при их неоптимальности переписать на нативный SQL (примерно в половине случаев).
Вообще, хуй знает, для кого придумали ORM, они не решают проблем, которые на них возложены. Работа с базами данных только усложнилась.
Аноним 06/08/22 Суб 06:53:26 #19 №2426027 
>>2425963
Если нравиться быть обсосанным на кодревью, иметь проблемы с миграцией и фейлить тесты безопасности, смело бери raw sql
Аноним 06/08/22 Суб 09:32:34 #20 №2426059 
>>2426027
Как тебе ORM с миграциями помогает? Таблицу с айдишниками запросиков, проверяемую на старте, ты можешь и без ORM сделать. А в экранизацию значений можешь даже самый паршивый драйвер/адаптер на %языкнейм%.
Аноним 06/08/22 Суб 14:23:45 #21 №2426227 
>>2426059
Это как вебмакакаи, которые выучили модный фреймворкнейм и не знают, как без него что-то сделать.
Аноним 06/08/22 Суб 15:00:29 #22 №2426247 
>>2426227
Кабану интересно только чтобы сделать с или без, а как ты сделал интересно только твоей мамке.
Аноним 06/08/22 Суб 15:05:54 #23 №2426251 
>>2426247
Долбоёб, к чему ты это высрал? Тут обсуждение технологий, а с кабанами съеби в МВП-тред.
Аноним 06/08/22 Суб 15:27:46 #24 №2426273 
>>2426251
А ты в технологиях разбираешься? ORM технологичне, миграции не нужны с ORM, так они на лету генерятся из Entity обычно. ORM не запрещает raw запросы строчить, когда реально нужно.
Аноним 06/08/22 Суб 16:17:05 #25 №2426308 
>>2425943
А, типа прям империативно кодом. Не, эт читерство, так можно вообще всё вытянуть в приложение и уже нормальным ЯПом посчитать мб даже эффективнее всего будет, чтобы базу не нагружать кстати. я хочу прям sql'ем, декларативно.
Аноним 06/08/22 Суб 16:40:20 #26 №2426324 
>>2425963
Значится, это очень холиварный вопрос.
Концептуально нам как программистам не хочется писать plain sql в бизнес-логике, потому что во первых эта логика засирается всякой sql-специфичной херней (ну там вместо одного логического upsert иногда приходится делать if !select then insert else update), а во вторых, иногда приходится захуяривать всякие промежуточные рантайм кеши и прочую особую логику и когда у тебя sql уже расползся по всему коду, то как-то задекорировать это дело становистя нереально.
Короч, хочется, чтобы бизнес-логика содержала просто действия вида "найди", "укради", "роди", а вся базоспецифичная хуйня тусила отдельно.

Тут в целом нормальный подход просто запилить интерфейс репозитория с соответствующими методами, а в отдельном слое бахнуть реализацию, уже прям с хардкодными запросами. Вот этот прям норм схема, если можешь такое сделать, не стесняйся.

Но некоторые пошли дальше и сказали, что типа а давайте вообще запросы никакие не писать, у нас будет одна универсальная либа, в которой мы будем описывать сущности и связи между ними и что мы хотим найти, а эта либа сама будет нам всё находить, сама за нас понимать, какие запросы сделать и всё такое.
И вот это всё звучит хорошо, но довольно быстро превращается в пиздец, потому что эта ORM просто становится ещё одним промежуточным языком и если раньше ты должен был знать только твой ЯП и SQL, то теперь приходится знать ЯП->ORM->SQL. А все базы, заразы такие, очень специфичны, и для эффективной работы требуют кучи всяких рюшечек, да и просто поддерживать все фишки всех бд ни одна орм нормально не может, в итоге поддерживая только какую-то общую базу, в результате чего, какую бы бд ты ни выбрал, тебе всё равно придется писать на generic sql, используя уникальные возможности бд на 20%.
Ну и про эффективную работу, тебе придётся досконально знать то, как работает твоя ORM, чтобы заставлять её каждый раз генерировать эффективный код для базы.
В итоге ты ебешься со всеми этими сложностями и такой думаешь "нахуй мне вообще этот комбайн, просто напишу плейн запросы и норм будет".
Но это тоже не вся правда, потому что в итоге тебе придется велосипедить и колхозить многие вещи, которые в орм уже сделаны и так или иначе продуманы.

В-общем, орм'ки хороши для формошлепства и всяких несложных запросов, CRUD'ов и тому подобного, а все сложные вещи лучше всего всё же писать руками в отдельном слое.

А, и да, Hibernate это какое-то монструозное говно, на которое без ужаса смотреть нельзя, если что, то бывают орм попроще и посимпатичнее.
Аноним 06/08/22 Суб 17:30:38 #27 №2426353 
>>2426308
причём тут приложение? SQL умет в if.
Просто после джоина у тебя будут отрезки и надо найти их пересечение в рамках строки, это делается через if
если конкретно в постгре нет имплементации можно тоже самое через case сделать
Аноним 06/08/22 Суб 19:31:20 #28 №2426440 
>>2425004
Ну ты и пчел.. Какую-то хуйню сделал))
Аноним 06/08/22 Суб 19:33:11 #29 №2426441 
>>2425821
Почти как у меня выше
Аноним 06/08/22 Суб 19:39:20 #30 №2426448 
>>2425943
> кодом только за деньги
> предлагает неправильное решение
ммм
Аноним 06/08/22 Суб 20:50:35 #31 №2426532 
>>2426059
Ну разве орм мне не поможет, если я во время миграции поменяю имя колонки в табличке? Ели рав-скл, то мне придется во всех запросах менять имя колонки.
Или удалю колонку.
Аноним 06/08/22 Суб 20:55:01 #32 №2426537 
>>2426532
С raw SQL у тебя есть такое достижение языков программирования, как повторное использование кода. Ты пишешь репозиторий, который знает, как работать с этой таблицей, а во всех остальных местах тупо этот репозиторий используешь, инкапсулировав уровень доступа к базе данных, и если захотел переименовать/удалить столбец, то только в этом репозитории и переименовываешь/удаляешь.
Аноним 06/08/22 Суб 21:05:47 #33 №2426545 
изображение.png
>>2426448
кабан кабаныч, а никто и не обещал что будет правильно
Аноним 06/08/22 Суб 21:14:21 #34 №2426553 
>>2426440
Да, действительно, не учёл что может быть больше 1 отрезка подряд, тогда использовать row_number() вместо lead, и в конец ещё подсчёт суммы.
Аноним 06/08/22 Суб 21:18:42 #35 №2426560 
>>2426537
Ну да. Но с орм мне придется поменять только модельку и написать чендж сет, а с рав-скл минимум поменять половину методов в репошке.
А если у меня есть методы, делающие селекты из нескольких табличек, то и в других репошках тоже придется менять поля в рав-скл запросах.
Мы так то билдером запросов пользуемся(жук) с генерацией модельки, который попроще орм(хибера), но все таки не совсем рав скл. И вместо переписывания скл-скриптов надо перегенерить модельку, а иде уже сама подчеркнет, где нужно поменять репошку. Но есть вопросы о хранениии сгенеренного кода. И еще пару мелочей, уже не помню каких.
Аноним 06/08/22 Суб 21:44:24 #36 №2426585 
>>2426553
>>2426545
Решение уже нашли, постить не буду, но то что вы описываете - не ок
Аноним 06/08/22 Суб 22:16:16 #37 №2426622 
Как защитить Бд от взлома,базовые правила
Аноним 06/08/22 Суб 22:22:26 #38 №2426625 
>>2426585
То есть не нашли.
Аноним 06/08/22 Суб 22:29:44 #39 №2426630 
>>2426622
- Параметры всех запросов экранировать, т.е. вместо конкатенации строк везде использовать SqlCommand.Prepare(), PreparedStatement и подобное.
- Включить шифрование соединения с БД.
- Если приложение и логика у тебя в БД, и пользователи подключаются к ней напрямую, то создавать для каждого юзера по схеме, создавать публичные синонимы для хранимых процедур, выдавать гранты, пермишены, настраивать ACL.
- На случай, если уж взломали, строить архитектуру так, чтобы ущерб был минимальным. Пароли хешировать, не хранить все данные в одном месте, вынося данные в другие системы и т.д.
Аноним 06/08/22 Суб 22:31:18 #40 №2426632 
>>2426630
>пользователи подключаются к ней напрямую,
это как без сервера-прокладки?
Аноним 06/08/22 Суб 22:36:35 #41 №2426640 
>>2426632
Да, это называется двухзвенная архитектура. Было популярно в двеяностых-начале нулевых, когда языки для серверной разработки были в зачаточном состоянии, масштабные энтерпрайзные проекты не тянули, так что удобнее всего было вести разработку бизнес-логики прямо в базе данных. Тогда и клиенты были в основном десктопными. Сейчас в основном легаси.
Аноним 06/08/22 Суб 23:42:26 #42 №2426704 
>>2426585
Что за манеквры ёбана?
Задача сводится к нахождению непрерывных временных отрезков, сделать агрегацию по ним дело техники. Эта задача решается через row_number

https://stackoverflow.com/questions/20402089/detect-consecutive-dates-ranges-using-sql
Аноним 06/08/22 Суб 23:44:01 #43 №2426705 
20160205100222fb8a394c357a490b08d5fc6b34a4c585.jpg
>>2426622
Пользоваться ORM, а не raw sql
Аноним 06/08/22 Суб 23:46:28 #44 №2426707 
>>2426705
Я ждал этого!
Аноним 07/08/22 Вск 01:03:45 #45 №2426747 
>>2426704
no
Аноним 07/08/22 Вск 10:32:41 #46 №2426892 
>>2426705
>raw sql
что это?
Аноним 07/08/22 Вск 15:38:51 #47 №2427072 
>>2426892
Это когда пишешь SQL-запросы сам вместо того, чтобы за тебя это делал волшебный зумерский фреймворк.
Аноним 07/08/22 Вск 19:19:23 #48 №2427452 
>>2427072
Ты еще расскажи ему про разные типы outer джойнов.
Аноним 07/08/22 Вск 20:37:47 #49 №2427531 
>>2427452
> джойнов
Хуйня без задач, есть WHERE table1.id = table2.table1_id.
Аноним 07/08/22 Вск 20:40:48 #50 №2427534 
>>2427531
тян_прыскающая_газировкой.jpg
Аноним 07/08/22 Вск 21:28:30 #51 №2427621 
>>2427534
Не пользуюсь джойнами, всё через where, код намного понятнее, чем ебля с FULL OUTER RIGHT INNER CROSS JOIN, но брат умер.
Аноним 07/08/22 Вск 21:47:16 #52 №2427645 
>>2427621
Как ты блядь не пользуешься джоинами а только вэрэ? Ты не пользуешься ногами, а только ботинками? Как ты соединишь таблицы без джоина? Соединение таблиц это и есть джоин. Даже если пишешь from a, b where a.id = b.a_id
Аноним 07/08/22 Вск 22:04:54 #53 №2427670 
>>2427645
Не использую синтаксис джойнов, значит, не пользуюсь джойнами. Меня не ебёт, что СУБД у себя внутри построит почти одинаковый план запроса, что и с джойном, и будет выполнять его через один и тот же механизм. Я же не говорю, что пользуюсь регистрами и прерываниями, хотя внутри тоже через них всё работает. Потому что важна только семантика языка запросов.
Аноним 07/08/22 Вск 22:15:06 #54 №2427682 
>>2427645
подзапрос же

мимо
Аноним 08/08/22 Пнд 08:17:34 #55 №2427829 
в чём различие между window и подзапросами? Зачем нужны эти окна, если есть подзапросы?
Аноним 08/08/22 Пнд 08:21:38 #56 №2427830 
>>2427829
Меньше кода писать в некоторых случаях.
Аноним 08/08/22 Пнд 08:34:20 #57 №2427833 
>>2427682
Дядя Петя, ты дурак?
Аноним 08/08/22 Пнд 08:40:24 #58 №2427835 
>>2427830
и всё? Значит могу на них забить?
Аноним 08/08/22 Пнд 08:43:33 #59 №2427836 
>>2427835
Можешь, но однажды ты наткнёшься на какой-нибудь сломавшийся отчёт, написанный кем-то другим с активным использованием оконных функций, и тогда придётся учить. Да там и учить почти нечего.
Аноним 08/08/22 Пнд 16:01:54 #60 №2428187 
Есть целый набор условий (6 штук), в некой таблице A мы заполняем поле mode исходя из выполнения этих условий (от 0 до 5 соответственно). Это как делать? Через CASE? Там каждое условие ппц объемное и включает в себя подзапросы к другим таблицам121734
Аноним 08/08/22 Пнд 16:03:00 #61 №2428191 
>>2428187
Не говоря уже о том, что после выполнения первого же условия мы должны забить хуй на остальные и заполнить поле mode нужной цифрой, CASE это обеспечивает? Или он всегда исполняет все ветки условий?
Аноним 08/08/22 Пнд 17:35:35 #62 №2428284 
>>2428191
---CASE это обеспечивает?---
Должен.

---Или он всегда исполняет все ветки условий?---
Но зачем спрашивать про специфику работы какой-то языковой конструкции на двачах, ищи в документации по СУБД
Аноним 09/08/22 Втр 12:51:59 #63 №2428784 
Пацаны, вытаскиваю из таблица строку - список параметров, надо в следующем query сделать проверку по типу:

SELECT name FROM table WHERE mode NOT IN (alpha, beta, zeta)

Строку "alpha, beta, zeta" я как раз и вытащил, но бля, если я просто вставлю ее через питоновское форматирование строк в мое следующее query то может быть потенциальная инъекция (и тулза bandit не даст гитлаб пайплайну пройти), но если я буду пытаться вставить ее через обычные параметры и ? то постгря неправильно меня поймет - она будет видеть одну строку, но на самом-то деле это не единая строка и 3 разных параметра
Аноним 09/08/22 Втр 13:51:28 #64 №2428818 
>>2428784
поищи в документации, можно ли вставлять массивы через твою тулзу и как это делать
Аноним 09/08/22 Втр 16:43:17 #65 №2429039 
>>2424142 (OP)
Есть ли способ обновить строчки в таблице по GROUP BY?
Вот мы сгруппировали строки по 2м колонкам: GROUP BY item, address - как внутри каждой такой группы обновить поле start_date, установив максимальную среди всей группы? Чет вроде должно быть просто, select запрос и так ясно как писать, но как из него сделать update блэт?
Аноним 09/08/22 Втр 17:12:01 #66 №2429068 
>>2429039
тебе надо найти записи с максимальным start_date и заапдейтить их?
Аноним 09/08/22 Втр 18:00:21 #67 №2429102 
1608621683364.jpg
>>2429039
Думаю как-то так
Аноним 10/08/22 Срд 10:17:39 #68 №2429522 
Парни, вопрос.
Работаю в open panel server, запускаю локальный сервак
При работе с формой поиска бд выдает parse error, смотрю логи апача, а там обычная 408.
Вы уже наверное поняли про что идет речь лол. Буквально месяц назад форма работала. В чем блядь проблема? В какую сторону копать?
Аноним 10/08/22 Срд 14:26:55 #69 №2429680 
Уважаемые sql-господа, есть ли какой-то быстрый способ немного изменить все значения в столбце? Например, там лежали значения: qwerty, Asdf, lk; надо получить: [qwerty], [Asdf], [lk].
Аноним 10/08/22 Срд 14:35:00 #70 №2429685 
>>2429680
update table set value='['||value||']'
Аноним 10/08/22 Срд 14:45:28 #71 №2429690 
>>2429685
Благодарю
Аноним 10/08/22 Срд 15:58:03 #72 №2429740 
Часто вижу что говорят "создать выборку Т из джойнов бла-бла" а потом с этой выборкой Т провести какие-то манипуляции, например сджойнить ее с чем-нибудь еще и отсортировать, как это в рамках sql решается?
Аноним 10/08/22 Срд 16:53:12 #73 №2429788 
>>2429740
Подзапрос? Или ты мудово формулируешь задачу.
Аноним 10/08/22 Срд 17:36:18 #74 №2429808 
>>2429788
Вообще подзапрос, но он может несколько раз переиспользоваться.
Аноним 10/08/22 Срд 17:48:20 #75 №2429822 
>>2429522
Помогите пожалуйста бляди..
Аноним 10/08/22 Срд 17:49:45 #76 №2429824 
>>2429822
Хуй сосешь?
Аноним 10/08/22 Срд 17:53:10 #77 №2429826 
>>2429824
И бочку делаю тоже.
Аноним 10/08/22 Срд 17:56:58 #78 №2429829 
>>2429808
Так хранимая процедура же?
Аноним 10/08/22 Срд 18:04:44 #79 №2429838 
>>2429808
Вроде по русски это называется представление, with гугли.
Аноним 10/08/22 Срд 18:16:40 #80 №2429850 
>>2429522
Копать в сторону пхп-треда.
Аноним 10/08/22 Срд 18:48:03 #81 №2429878 
>>2429740
табличные выражения
Аноним 10/08/22 Срд 20:59:02 #82 №2430018 
>>2429850
Типа дело не в базе данных? Спасибо за ответ в любом случае, братишка.
Аноним 10/08/22 Срд 21:34:50 #83 №2430055 
>>2430018
Может и в базе данных, но там сложно получить непонятные ошибки, СУБД либо работает, либо нет. Скорее что-то не так с конфигурацией твоего open panel server, про это здесь никто не подскажет, это проблемы, специфичные для языков программирования, на которых работает приложение, использующее БД,
Аноним 10/08/22 Срд 23:53:12 #84 №2430151 
>>2430055
Да в том и прикол, что на сайте все работало, а потом раз и все, я просто уже не понимаю, где копать, потому что сайт не мой, движок не определить из за клаудфаер защиты, это точно не настройка open panel, это словно магическим образом вываливающаяся ошибка, я настолько нуб что даже не знаю как прогнать форму на ошибки, тупо как посмотреть где она, есть какие то логи апача, но это не то все, мб это специальная ошибка создателей, как ковырять, в каком месте хз. Ну вот допустим как прогнать конкретно форму сайта на ошибки?
Аноним 11/08/22 Чтв 16:14:53 #85 №2430592 
Есть некая "промежуточная" таблица в которой временно храню данные, совершаю над ними манипуляции а потом стираю ее (TRUNCATE).
Проблема в том что после стирания последовательность для айдишников продолжает идти, то есть когда пишем в чистую таблицу новые данные, у нас id начинается не с 1 а с того числа, на котором закончилось. Как это фиксить?
Аноним 11/08/22 Чтв 16:41:53 #86 №2430618 
>>2430592
id берутся из sequence? Какая база, какой тип поля, кто заполняет id?
Аноним 11/08/22 Чтв 17:08:01 #87 №2430655 
>>2430592
делвй drop&create
Аноним 11/08/22 Чтв 17:47:07 #88 №2430702 
>>2430618
Да из sequence, обыкновенный integer из постгри
Аноним 11/08/22 Чтв 18:04:11 #89 №2430726 
>>2430702
значит секъюенс тоже апдейть
Аноним 12/08/22 Птн 22:46:06 #90 №2432171 
>>2430592
>Как это фиксить?
Прочитать доку к truncate.
Аноним 12/08/22 Птн 22:53:58 #91 №2432175 
>>2430592
После транкейта:
ALTER SEQUENCE tvoy_sekjuens RESTART WITH 1;
Аноним 12/08/22 Птн 22:54:48 #92 №2432176 
>>2432175
Это можно в самом трункейте указать.
Аноним 12/08/22 Птн 22:56:57 #93 №2432178 
>>2432176
Ну допустим.
TRUNCATE promejutochnaya_tablitsa RESTART IDENTITY CASCADE;

Гуглится за 10 секунд блять, хз, зачем он вообще задаёт вопрос и ждёт ответа несколько дней.
Аноним 14/08/22 Вск 20:34:25 #94 №2434069 
16580812830621.jpg
Посоветуйте, пожалуйста, книгу про MS SQL где подробно объясняются индексы и уровни изоляции.
Аноним 14/08/22 Вск 21:50:58 #95 №2434169 
А есть книга которая объясняет проще чем дейт введение в системы баз данных?
Мимо нуб
Аноним 14/08/22 Вск 22:09:35 #96 №2434188 
1576483302556.jpg
>>2434169
https://postgrespro.ru/education/books/dbtech
Советую.
Аноним 15/08/22 Пнд 12:30:44 #97 №2434697 
Как UNION под капотом работает? Просто склеивает результаты разных запросов вместе? Запросы по-прежнему отдельно отправляются?

В одном месте мы селектили данные из таблицы на основании пар колонок item и type а потом отдельно обрабатывали каждую такую группу данных (штук 30-40 таких групп обычно). Подумал что можно выполнить 1 sql запрос и объединить все с помощью Union. Но на локальных тестах не увидел какого-то подъема в производительности. union бесполезен для таких кейсов что ли?
Аноним 15/08/22 Пнд 12:31:23 #98 №2434698 
>>2434697
База - постгрес
Аноним 15/08/22 Пнд 12:50:24 #99 №2434714 
>>2434697
он склеивает только результаты с одинаковым типом и количеством колонок.
Т.е. должны быть селекты с одинаковым типом результата
Аноним 15/08/22 Пнд 12:58:20 #100 №2434720 
>>2434714
Ну да, они с одинаковым, ничего не упало. Просто какого-то прироста не заметил. Можно будет еще проверить на тестовой базе 10 миллиона строк но походу результат будет тот же
Аноним 15/08/22 Пнд 13:06:08 #101 №2434730 
>>2434697
Вообще мы тут с пацанами пытались оптимизировать питоновский celery pipeline, там внутри селери-тасков дергается постгря. Думали если уж union не помогает ускориться то можно не каждый раз вытягивать данные из таблицы а 1 раз целиком заселектить всю таблицу и передать эти данные в каждый из тасков, чтобы там уже данные отфильтровать. Но случился нежданчик с брокером - Реббитом:

"PRECONDITION_FAILED - message size 2253095235 is larger than configured max size 134217728"

То есть мы попытались 2 Гига засунуть в 1 месседж Реббита. И я вот думаю - даже если разобьем этот месседж на чанки по 100 Мб скажем, тут же все равно больно дохера памяти используется, не? Кто работал с Реббитом глубоко? Это вообще норм идея передавать столько данных по нему или это хуйня ебаная и так никто не делает?
Аноним 15/08/22 Пнд 13:42:34 #102 №2434761 
>>2434730
Оверхед на сериализацию/десериализацию, не?
Аноним 15/08/22 Пнд 14:07:09 #103 №2434802 
Есть задачка. Три таблицы 1.Students (1.id 2.Студент 3.курс) 2. Subjects (1.id 2. Предмет 3. Курс, на котором доступен предмет) 3. Exams (1.id 2.Students.id 3.Subjects id 4. Оценка) Нужно выяснить кто из студентов сдал все экзамены на своём факультете (положительная оценка 3 и выше). С джоинами понятно, условием оценки 3+ тоже, а как отсеять тех, кто сдал не все предметы?
В общем помогите плез кто чем может)
Аноним 15/08/22 Пнд 14:37:15 #104 №2434843 
>>2434802
сколько заплатишь?
Аноним 15/08/22 Пнд 16:28:25 #105 №2434960 
>>2434843
Сколько стоит твое очко?
Аноним 16/08/22 Втр 03:14:23 #106 №2435418 
>>2424142 (OP)

Есть ли какая-то IDE для MySQL с урезанным функционалом для новичков чтобы могла наглядно строить таблички или все эти связи между табличками как Воркбенч? Может есть какой-то хидден гем в вашей области для новичков?
Аноним 16/08/22 Втр 07:33:56 #107 №2435475 
>>2434802
Найди студентов которые не завалили ни одного предмета.
Аноним 16/08/22 Втр 07:36:18 #108 №2435476 
>>2435418
dbeaver умеет рисовать таблички со связями
Аноним 16/08/22 Втр 11:28:33 #109 №2435619 
Немного не понимаю, а проверить пока никак:

Вот у меня есть sqlite3 таблица, я добавляю туда строку через INSERT INTO и закрываю действие через .commit()
Но сейчас мне надо добавить строку, и сразу же ее обновить через UPDATE. Нужно ли делать коммит после первого действия?
Аноним 16/08/22 Втр 12:10:45 #110 №2435669 
>>2435619
> добавить строку, и сразу же ее обновить через UPDATE.
почему сразу нельзя записать то что нужно, шиз
Аноним 16/08/22 Втр 12:20:20 #111 №2435682 
Почему во время UPDATE постгря удалеят строку а потом делает INSERT вне зависимости от обновляемых полей? Они ебанутые што ле?
Аноним 16/08/22 Втр 12:58:04 #112 №2435714 
>>2435682
Сделано это для обеспечения изоляции параллельных транзакций. К примеру, когда ты обновляешь строку в своей транзакции, другие транзакции так же могут работать с ней. И для них как раз и нужно сохранить старую версию. И да, строка во время обновления со страницы физически не удаляется. Это произойдет позже, во время автоочистки.
Аноним 16/08/22 Втр 13:37:31 #113 №2435763 
Есть subquery из которого нужно сделать update. Проблема в том что в этом subquery могут дублировать данные из-за большого количества join-ов а у меня должна быть только 1 строка с выбранной парой ключей item - type

Небось скажете индексы юзать? А вот хрен, у нас в этой таблице много вставок и изменений, строк несколько десятков лямов, так что от индексов решили отказаться.

Как же быть?
Аноним 16/08/22 Втр 14:57:14 #114 №2435868 
>>2430592
Тут обоссанцы одни, ничего не шарят. Папка поможет:

TRUNCATE TABLE table_name RESTART IDENTITY
Аноним 16/08/22 Втр 17:19:54 #115 №2436119 
>>2435763
юзай ровнумбер ебана, ты чо как хлебушек
Аноним 17/08/22 Срд 12:50:55 #116 №2436915 
Поясните по компрессии в монге. Почему в моих тестах включение snappy на стороне клиента локально ухудшает скорость чтения на 7%, а с удаленным сервером никак
не влияет на ситуацию. Уменьшение объема передаваемых по сети данных должно ведь ускорять RPS, неужели распаковка съедает весь выигрыш?

Как тогда у этого чувака https://www.mongodb.com/developer/products/mongodb/mongodb-network-compression/ получился прирост на 33%?

Коллекция пожата в snappy, ~100k записей, клиент pymongo, тесты гонял по десятку итераций с усреднением результата.
Аноним 17/08/22 Срд 13:20:48 #117 №2436946 
Чтобы было меньше нагрузки на insert/update т.к. у нас часто идут эти операции и в таблицах от миллиона до нескольких десятков миллионов строк мы решили избавиться от Foreign Key везде в нашей Постгре. Насколько это здраво? Там будет какое-то значимое улучшение в производительности?
Аноним 17/08/22 Срд 13:25:31 #118 №2436951 
>>2436946
в любом случае надо начать с замеров и мониторинга. Сделать копию базы, убрать там форенкеи, и посмотреть на мониторинг, что изменится
Аноним 17/08/22 Срд 13:42:03 #119 №2436974 
Здароу. Щас понял что на собесах по бекенду много контор дрочит по БДшкам. Как будто блять кто-то до сих пор не хуярит своё говно через ORM. Ну да ладно. В общем, видимо пришло и моё время уже наконец по нормальному изучить эту хуйню. Кто что посоветует почитать? В частности чтобы там было за профилировку запросов, планы выполнения, индексы, нормальные формы - и всю хуйню что чаще всего спрашивают
Аноним 17/08/22 Срд 13:46:47 #120 №2436986 
>>2436974
> Как будто блять кто-то до сих пор не хуярит своё говно через ORM.
Толсто.
Аноним 17/08/22 Срд 13:50:43 #121 №2436989 
>>2436986
На своих проектах довольно редко юзаем чистоганом. Только если какаято специфичная хуйня, которую ОРМ осилить не может. Как правило это если он генерит какуюто медленную поеботу, или же какой нибудь долбоеб решил динамические свойства объектов реализовывать через добавление колоночек на лету
Аноним 17/08/22 Срд 13:57:58 #122 №2437009 
image.png
>>2436974
>Как будто блять кто-то до сих пор не хуярит своё говно через ORM
Посмотрел бы на тебя как ты бы вот это по маняОРМке писал

да, вверху еще кондишны в форматировании, строк на 40
Аноним 17/08/22 Срд 14:04:44 #123 №2437020 
>>2436974
>>2434188
Аноним 17/08/22 Срд 14:08:14 #124 №2437026 
>>2437020
О, спасибо!
Аноним 17/08/22 Срд 14:11:55 #125 №2437032 
image.png
>>2437009
Еще мякота
Аноним 17/08/22 Срд 14:15:35 #126 №2437037 
>>2437009
>>2437032
Можно переписать с SQL на обычный язык, чтобы всё тормозило, и делать за СУБД её работу.
Аноним 17/08/22 Срд 16:01:32 #127 №2437196 
Я человек простой, в закрепе мне сказали спросить здесь, я спрашиваю.

Ораклоебы здеся?
Поясните почему with select не возвращается через dbms return?
Че за наебалого?
Так не работает:

DECLARE
rc SYS_REFCURSOR;
BEGIN
OPEN rc FOR WITH q AS (SELECT 2 FROM dual) SELECT 1 FROM q;
dbms_sql.return_result(rc);
END;

а так типа норм:

DECLARE
rc SYS_REFCURSOR;
BEGIN
OPEN rc SELECT 2 FROM dual;
dbms_sql.return_result(rc);
END;

вижу в этом проявление глубокой несправедливости
Аноним 17/08/22 Срд 16:03:32 #128 №2437202 
>>2436974
ОРМы нужны для простой вещи - загрузить строку в виде объедка.
Те кто пытается надрочить там обжект квери языки, это долбоёбы с патерном головного мозга.
Аноним 17/08/22 Срд 16:09:46 #129 №2437216 
>>2436989
ОРМ генерит говно процентов в 50% случаев. Чтобы сдать работу заказчику - хватает. А вот что начинается потом - это другой разговор
Аноним 17/08/22 Срд 16:27:12 #130 №2437256 
distinctus.png
Чет не въехал, а как именно DISTINCT определяет уникальные значения? Вот я во всеми известном ресурсе сделал select с distinct на 2 поля - страна и город, но там все равно попадают одинаковые страны и города. как оно работает?

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_no_distinct
Аноним 17/08/22 Срд 16:29:31 #131 №2437260 
dist.png
>>2437256
Бля, скрин проебался
Аноним 17/08/22 Срд 16:33:19 #132 №2437268 
>>2437256
Вся строка - ключ.
А иначе подумой, что бы ты получил, если бы остались только уникальные страны и уникальные города? Это были бы записи, не имеющие отношения к исходным данным в бд.
Аноним 17/08/22 Срд 16:44:14 #133 №2437287 
>>2436974
>Как будто блять кто-то до сих пор не хуярит своё говно через ORM.
Если шлепаешь CRUDы, то да. Как только логика чуть сложнее, то пиздец ты под эту ебучую орм начинаешь подгонять необходимый sql запрос, в конечном итоге тебе нужно одновременно знать и sql и как при помощи orm накостылить этот запрос. Что в рельсах, что в ларавеле бесило этой хуйней заниматься, а писать чистый запрос не по феншую.
Уже давно пишу чистые запросы и это вообще кайф, особенно когда поднимешь локальную базу и настроишь всё в ide там почти все автокомплитом высекается. И можно уже по необходимости для каждого запроса свои структуры накидать, используя только нужные столбцы
Аноним 17/08/22 Срд 16:46:53 #134 №2437289 
Как же неохота работать. Как себя наградить, чтобы часочек сегодня пописать код? Я уже и подрочил и вкусненькое поел.
Если не поработаю завтра будет стремно перед пмом отчитываться. Хотя тасочка до пятницы. Но хочется сказать ему, что там немного осталось, когда уже все давно готово.
Аноним 18/08/22 Чтв 07:26:09 #135 №2437924 
Новиков Б.А. - Основы технологий баз данных - Издательство "ДМК Пресс" - 2019 - 240с. - ISBN: 978-5-94074-820-5 - Текст электронный // ЭБС ЛАНЬ

SQL — язык реляционных баз данных: Учебное пособие / Кара-Ушанов В.Ю., - 2-е изд., стер. - М.:Флинта, Изд-во Урал. ун-та, 2017.

Полякова Л.Н. Основы SQL : учебное пособие / Полякова Л.Н.. — Москва : Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Ар Медиа, 2020.

Астахова И.Ф., Мельников В.М., Толстобров А.П. - СУБД: язык SQL в примерах и задачах - Издательство "Физматлит" - 2009 - 168с. - ISBN: 978-5-9221-0816-4

Фиайли К. - SQL - Издательство "ДМК Пресс" - 2008 - 451с. - ISBN: 5-94074-233-5

Грабер Мартин. Понимание SQL – Издательство "Лори" - 2014

Кто-нибудь читал что-то из этого?
Аноним 18/08/22 Чтв 07:32:53 #136 №2437930 
>>2437924
Грубер это классека, была такая ещё совковая методичка из ранних 90-х, лол. Но там sql89, или это какое-то обновленное издание?
Местечковых хуев не знаю.
Аноним 18/08/22 Чтв 08:00:53 #137 №2437945 
>>2437930
Понял-принял.
Аноним 18/08/22 Чтв 08:55:20 #138 №2437959 
>>2437924
Новикова читал. Вполне неплохо. Для того, чтобы втянуться самое то. В отличие от других пособий, кроме того как пользоваться, объясняет ещё почему так сделано и как оно работает. Упор в книге идёт на постгрю. Но нужно искать второе издание. В первом только, так сказать, ознакомительная часть. Во втором же, появилась часть с деталями. Единственное, это все же учебное пособие и требует какой-никакой базы. К примеру, главу с формализацией аномалий конкурентного доступа и уровней изоляции транзакций без мат. базы читать и осознавать будет тяженько.
Аноним 18/08/22 Чтв 11:04:01 #139 №2438009 
Есть таблицы на постгресе:
https://dbfiddle.uk/?rdbms=postgres_13&fiddle=5f43cee06b406a523b5280a6523d21d4
Как вставлять случайное число строк в таблицу, подразумевая, что все колонки в ней необязательны? generate_sequence() похоже на то, но как его использовать в инсерте, игнорируя его значение?
При вставке в test_1 должна пройти такая процедурка:
- Вставить n число строк в test_1
- Вставить такое же число строк в test_2
- Добавить их связь в test_refs через индекс вставки. То есть первый новый вставленный test_1 будет связан с первым новым вставленным test_2, пятидесятый новый test_1 с пятидесятым новым test_2 и т.д. Гуглить это пиздец конечно, так как index в моём кейсе это что-то типа индекса массива, а не индекс таблицы.
Аноним 18/08/22 Чтв 11:06:29 #140 №2438013 
>>2438009
1. Используешь питон
2. Генерируешь строку с рандомным числом VALUES
3. Вставляешь
Аноним 18/08/22 Чтв 11:25:15 #141 №2438025 
>>2438013
Мне нужна SQL-онли генерация, для примера на фидле.
Аноним 18/08/22 Чтв 11:27:29 #142 №2438026 
>>2438025
Тогда как-то так
https://asktom.oracle.com/Misc/Random.html
Аноним 18/08/22 Чтв 12:29:41 #143 №2438079 
>>2438026
Посмотри блять на ссылку и скажи, куда ты там собрался устанавливать вот это:
> To install the dbms_random package, you need to run 4 scripts when connected as the user SYS or INTERNAL

В постгресе есть бюлтины для этого, вот только все инструкции или на уровне хэлловорлдов с простыми селектами, или вставляют значение в таблицу.
Аноним 19/08/22 Птн 05:19:26 #144 №2439073 
>>2434188
>>2437959

Я правильно понял, что одной этой книги хватит чтобы стать крепким джуном?
Аноним 19/08/22 Птн 06:29:29 #145 №2439093 
>>2439073
Вялым джуном.
Аноним 19/08/22 Птн 11:09:44 #146 №2439272 
>>2439093
А как вялого джуна довести до эрегированного состояния?
Аноним 19/08/22 Птн 16:58:59 #147 №2439705 
Как в запросе сделать проверку на наличие двух и более записей с идущими подряд датами?
Типа 2022-08-15, 2022-08-16, 2022-08-21 - берём все, а 2022-08-15, 2022-08-17, 2022-08-19 - нахуй.
Можно ли так вообще или надо в коде проверять это?
Аноним 19/08/22 Птн 17:25:56 #148 №2439739 
>>2439705
Я бы сделал lead, datediff и посмотрел есть ли где отличные от 1
Аноним 19/08/22 Птн 21:47:39 #149 №2440107 
Двач, поясни за Consistency. Я читал все эти примеры про согласованность данных, но нахуя эта буква в аббривеатуре ACID, если согласованность прямо вытекает из бизнес логики приложения и атомарности транзакций? Как так получается, что в каждом учебнике пишут, что ACID - набор требований к транзакциям, но согласованность данных это во-первых зависит от бизнес логики, а во-вторых вытекает из Atomicity?
Аноним 19/08/22 Птн 22:08:50 #150 №2440122 
>>2439272
Дать ему пошурудить в твоей дырявой базе данных, проникнуть в его оконную функцию. Пошалить с его табличным выражением. Изолировать свою транзакцию на 3/4 в его сессии.
Аноним 19/08/22 Птн 22:12:34 #151 №2440127 
>>2440107
не вытекает.
Представь что серверов несколько или ты в любой момент выдергиваешь шнур и выдавливаешь стекло компьютера.
Аноним 19/08/22 Птн 22:18:57 #152 №2440132 
>>2440127
> Представь что серверов несколько или ты в любой момент выдергиваешь шнур и выдавливаешь стекло компьютера.
И транзакция откатится в соответствии с atomicity, придя, как следствие, к consistency.
Аноним 22/08/22 Пнд 13:32:43 #153 №2442741 
Блэ, в ТЗ которое читаю указано:
"Выполнить поиск по соответствию полей (merge): S.item = P.item; S.start = P.start"

Только вот это постгрес и никакого merge (в версии 13) тут нет. Что блэт такое "поиск по соответствию полей"? Нихрена не гуглится
Аноним 23/08/22 Втр 20:07:55 #154 №2443993 
>>2442741
upsert
Аноним 24/08/22 Срд 19:17:10 #155 №2444706 
Саламалейкум

Делаю в постгресе такой запрос

SELECT *
FROM mytable
WHERE mycolumn = ANY('{JOPA, HUI, PIZDA}'::text[])

Соответственно он возвращает мне строки где mycolumn какое-то из значений в массиве. Если например нашел только HUI и PIZDA то вернет 2 записи.
Вопрос - можно ли сделать так, чтобы если значение не находилось все равно бы возвращалась пустая или определенная запись?

Типа сейчас на такой селект ответ

mycolum mycolum2 mycolumn3
HUI ZZZ XXXX
PIZDA ZZZ2 XXXX2

а например хочется

mycolum mycolum2 mycolumn3
[NULL] (или JOPA) [NULL] [NULL]
HUI ZZZ XXXX
PIZDA ZZZ2 XXXX2

или вместо NULL что-то еще. Причем важно чтобы сохранялся порядок элементов в переданном массиве, то есть в этом случае 'JOPA' вошла первой, и ее ответ был бы первым
Аноним 24/08/22 Срд 21:26:18 #156 №2444766 
223.png
Сап аноны, говнокодил на разных диалектах SQL, теперь надо перекатится на постгрес, он местами довольно сильно отличается, как быстро перекатится? Что почиткать\посмотреть, с учётом того, что все конструкции sql я знаю?
Аноним 24/08/22 Срд 21:28:04 #157 №2444768 
>>2444766
Какими местами? DDL/DML учится за день, а если у тебя там хранимки, быстро никак не перекатишься.
Аноним 24/08/22 Срд 21:42:24 #158 №2444781 
>>2444768
Да хоронимки
Аноним 25/08/22 Чтв 12:07:29 #159 №2445091 
>>2443993
Тащемта upsert производится по конфликту constrain t. merge работает по другому, он глядит если строка не сметчилась то тогда ее вставляет. Тут надо отправлять 2 запроса - update from select (с inner join) и insert from select (с left join чтобы спалить строки которые не сджойнились)
Аноним 25/08/22 Чтв 18:00:44 #160 №2445356 
изображение.png
>>2445091
Нет, сначала делается матч апдейта, если не прошёл инсерт.
Аноним 25/08/22 Чтв 18:03:28 #161 №2445360 
>>2445356
Это что за диалект?
Аноним 25/08/22 Чтв 20:26:57 #162 №2445446 
>>2445360
mssql, там нет insert ignore

а ваш этот мерж говно багованое
Аноним 26/08/22 Птн 10:27:13 #163 №2445760 
>>2444706
Ты типа хочешь чтобы если в mycolum было что-то не из твоего массива поиска, то показывалась пустая строка? Захера?
Аноним 26/08/22 Птн 10:33:12 #164 №2445762 
>>2439705
"2022-08-15, 2022-08-16, 2022-08-21 - берём все"
Имелось в виду "2022-08-15, 2022-08-16, 2022-08-17 - берём все"?
Иначе смысла не имеет.
Аноним 26/08/22 Птн 10:34:26 #165 №2445763 
>>2445446
Ну а вверху постгрес так что твое решение интересно только с академической точки зрения
Аноним 26/08/22 Птн 21:59:14 #166 №2446523 
>>2445763
Ну алгоритм тот же самый. Вопрос был про мерж, предложена мною конструкция повторяет мехнизм работы мержа, и может быть использована в постгрес. Конкретизирую мы не используем insert ignore или другую подобную конструкцию.
Аноним 27/08/22 Суб 16:10:36 #167 №2447211 
41243220405e76b3834c8o.jpg
Котаны, подскажите хорошую современную книгу по теории БД. По работе я постоянно работаю с базами данных, и порой коллеги оперируют некоторыми терминали, которые я не понимаю: например такими как "нормальная форма", write-ahead logging и прочими. Приходится это всё гуглить по отдельности. Хочу получить системные знания. Желательно чтобы эта книга или курс лекций были не огромными и не содержали в себе слишком глубокого погружения в практические аспекты использования баз данных, как например изучение языка запросов, но содержали знания о разных типах БД: не только реляционных, но и о колончатых, графовых, time-series, распределенных и прочих.
Аноним 27/08/22 Суб 16:38:35 #168 №2447252 
>>2447211
а хуй знает. пора бы привыкнуть что книг ориентированных точно на тебя нет.

работать продолжайц.

Дейта прочитал? Красную и вторую книги,я про "SQL и реляционная теория" ?
"Postgresql 14 изнутри" ?

вот еще что я хочу прочитать в ближайшие годы:
Daniel_Nichter_Efficient_MySQL_Performance_Best_Practices_and_Techniques.epub
"Database tuning principles 2002 .pdf" (старинная, конечно, но меня привлекают книги где чуваки толкают теорию, а не т.н. бросаенс)
Аноним 27/08/22 Суб 16:51:44 #169 №2447261 
>>2447252
Спасибо за наводку на Дейта, погляжу. Честно говоря, не хочется слишком много внимания уделять реляционной модели. У нас на работе такие БД в меньшинстве.
Аноним 27/08/22 Суб 16:57:29 #170 №2447265 
>>2447261
всмысли, наводку?
ты должен Дейта как просто по-дефолту. первую книгу, красную.
Но у него очень скучный язык.

Во всяком случае, вопросы о нормальных формах она закроет исчерпывающим образом.
Аноним 28/08/22 Вск 20:10:01 #171 №2448566 
>>2424142 (OP)
Как научиться правильно выбирать уровень изоляции транзакции? Ну так, чтобы не наломать дров.
Аноним 28/08/22 Вск 20:32:09 #172 №2448592 
>>2448566
ВСЕГДА использовать READ COMMITED, при необходимости с блокировками.
Аноним 28/08/22 Вск 20:39:14 #173 №2448599 
>>2448592
Какие книги почитать по этой теме?
Аноним 29/08/22 Пнд 13:07:26 #174 №2449122 
>>2424142 (OP)
Господа, с высоты вашего опыта подскажите литературу по MS Sql для сис админа. Решил слегка апнутся в знаниях, но даже не совсем понимаю, что требуется от админа в плане баз данных, кроме как бэкапить их. В общем нужна книга которая затронет большую часть функционала именно администрирования БД.
Аноним 30/08/22 Втр 00:24:05 #175 №2449807 
>>2447211
Silberschatz - Database Systems Concepts
Аноним 30/08/22 Втр 07:19:35 #176 №2449858 
Суп, двощ. У меня элементарный вопрос: хочу прочекать архив сообщений от ICQ хранящийся в формате qdb, но есть одна проблема - собственно, колонка, в которой находится непосредственно сообщение, заявлена с какого-то хуя то ли как CHAR то ли VARCHAR и, соответственно, обрезается на 255 сабжей. При этом, я точно помню, что в клиенте такой хуйни не было, т.е. дата в файле не должна быть проебана? Почему так и что можно поделать?
Сразу оговорюсь, что я ни разу не кодер и не оператор баз данных, а хуй простой; скл вчера впервые скачал в виде плагина для лисы и только знаю 3.5 команды для вывода и сортировки инфы.
Аноним 30/08/22 Втр 10:25:40 #177 №2449955 
>>2449858
Потому-что неправильно задан тип данных. Чтоб новые данные не обрезались поставь тип данных text. Что обрезалось, уже проёбано.
Аноним 30/08/22 Втр 15:22:48 #178 №2450176 
Сап. Есть желание вкатиться в биг дату, сколько нужно времени чтобы освоить базу с почти 0? по вашим ощущениям примерно
Аноним 30/08/22 Втр 16:09:28 #179 №2450235 
>>2450176
Шо е бiг дата? Какой набор инструментов ты подразумеваешь? База SQL учится за 2 недели если сильно хуй не пинать и не быть дауном, если одно из двух то месяц, если оба то как повезёт.
Аноним 30/08/22 Втр 16:27:30 #180 №2450258 
>>2450235
Ему ещё петухон с пандасом учить.
Аноним 30/08/22 Втр 16:29:24 #181 №2450262 
>>2450235
зная только SQL можно ли найти РАБоту? Какой минимальный габор программ нужно знать? Просто везде пишут прям про вообще дохуя какое кол-во знаний, вплоть до бизнес процессов. Так ли это, действительно ли надо 2 года дрочить, чтоб стать дата сайнтистом (или кем нить там бля хотя б)?
Аноним 30/08/22 Втр 16:39:47 #182 №2450268 
>>2450262
Ну смотри, я так сам устраивался и кореша своего устроил: учишь тупо SQL хотя бы чтобы left/right джоины нормально понимал ну и там группировки, оконные функции даже не обязательно и пиздуешь устраиваться в техподдержку Л2, не на телефон а инциденты разбирать, там платат по хуйне, но с годом опыта там уже можно качать права на аналитика 100к+ рекорд моего кореша за 6 месяцев на 140к, он он на двух разных техподдержках успел поработать перед тем как в аналитику укатиться. Предметная область это конечно плюс как и всякие UML/BPMN, но можно и без них, по сути найти чела который шарит и за финтех и при этом кнопки мыши не путает тяжело.
Аноним 30/08/22 Втр 16:54:50 #183 №2450279 
>>2450268
Хммм, спасибо! Полезно было услышать
Аноним 30/08/22 Втр 19:24:15 #184 №2450406 
>>2449955
А как тогда клиент читал эти данные, если они уже были заданы таким образом? Сам-то я ничего не менял.
Может ли такое быть, что тип данных поменялся от одного факта открытия базы в сторонней программе?
Аноним 30/08/22 Втр 22:13:33 #185 №2450536 
>>2450406
Щас клиент так же может читать?
Аноним 30/08/22 Втр 23:01:05 #186 №2450569 
>>2450536
Так щас клиент запустить нельзя уже. Там вход через авторизацию на серваке, который много лет назад закрыли и всю инфу потерли. Новый клиент старые учетки не поддерживает.
Аноним 31/08/22 Срд 01:50:43 #187 №2450614 
Кто нибудь пользуется тарантулом?
Аноним 31/08/22 Срд 10:13:20 #188 №2450718 
111.png
Это база.
Аноним 31/08/22 Срд 10:29:21 #189 №2450733 
>>2450718
Есть какое-то странное соглашение, что М - 1, а Ж - 0. Но это для пола, гендер должен быть строкой, VARCHAR2, а лучше BLOB.
Аноним 31/08/22 Срд 11:06:52 #190 №2450744 
>>2450733
Так о чем и речь, что сразу видно, что курс (и эту пдфку на скрине) писала женщина из универа возрастом в 40-45 лет. Современный поридж в своем курсе про М и Ж в bool уже вряд ли напишет.
Куда дальше развиваться? Аноним 31/08/22 Срд 11:47:26 #191 №2450766 
Здравия /
Сейчас работаю на заводу со стеком Delphi + SQL. Создаю автоматические отчёты. Это моя первая работа.
Практически дочитал Книгу "Изучаем SQL. 2021. Алан Болье." одна глава осталась.
Собственно вопрос. Какие есть ветки прокачки? Куда дальше можно развиваться? Посмотрел объявление с своем городе есть позиции SQL разработчика и Разработчика БД. В основном нужны знания PostgreSQL. В книге упоминалась Big Data, тоже интересно. Есть ещё Аналитика данных, что вроде про SQL и нейронки. В общем, что думаешь анон?
Аноним 31/08/22 Срд 15:16:33 #192 №2450952 
>>2450766
бежать.
Аноним 31/08/22 Срд 17:28:53 #193 №2451047 
>>2445760
Ну я например загрузил жсон с пачкой каких-то значений.
Для каждой надо попробовать найти запись по какому-то полю в базе, если нашлось сделать что-то одно, если нет что-то другое. Если по одной долго, если пачкой запрашивать, то непонятно по какому значению что-то нашлось а что-то нет. Конечно можно в коде джоинить или как я в итоге сделал - отправлять батч из n селектов, но интересно можно ли одним запросом как-то так запросить, и еще обязательно без хоронимок.
Аноним 31/08/22 Срд 19:11:07 #194 №2451140 
>>2449807
Благодарю!
Аноним 31/08/22 Срд 23:30:56 #195 №2451458 
Здравствуйте. Помогите пожалуйста с выбором СУБД. Сейчас на начальном этапе обучения, поэтому встал выбор между Oracle и PostgreSQL. Хотелось бы, чтобы в дальнейшем одного знания СУБД хватило для поиска работы. То бишь базовый минимум, без особого требования.
Аноним 31/08/22 Срд 23:38:21 #196 №2451467 
>>2451458
Для базового минимума хватит и mysql, но он нахуй никому не всрался в 2022.
Учи постгрес, это сейчас дефолтная СУБД, к тому же достаточно навороченная хоть для энтерпрайза. При необходимости пересесть на оракл легко переучишься.
Аноним 01/09/22 Чтв 07:25:30 #197 №2451588 
>>2450744
знаешь различие между sex и gender?
Аноним 01/09/22 Чтв 10:20:30 #198 №2451672 
>>2451467
Большое спасибо.
Аноним 01/09/22 Чтв 17:48:32 #199 №2452102 
Как в постгресе обновить большое количество строк в таблице если у каждой строки свое значение?

Вот обычный запрос на UPDATE:
UPDATE employee
SET occupation = %value%
WHERE age < 18

Обновляем все столбцы где age < 18 указанные значением. Но что если у нас куча разных строк в каждой из которых свое уникальное значение name которым надо обновить строку с конкретным айдишником? Шо делать?
Аноним 01/09/22 Чтв 17:52:10 #200 №2452107 
>>2452102
Если через питон и алхимия например то решается обычным итеративным подходом:

data = [{'id': 108, name='Peter'}, {'id': 213, name='Mary}]
for row in data:
----await session.execute(f`UPDATE employee SET name = {row['name']} WHERE id = {row['id']}'`)

Но если высирать по 1 UPDATE на каждую строку это пиздец, что если таких строк 100к? А миллион? Они ж никогда не выполнятся.
Аноним 01/09/22 Чтв 18:04:08 #201 №2452121 
>>2452102
insert on duplicate update и вставляешь дохуя столбцов за раз как при обычном большом инсерте.
Аноним 01/09/22 Чтв 18:07:30 #202 №2452126 
>>2452121
А, в постгресе по-другому.
https://stackoverflow.com/a/1109198
Аноним 01/09/22 Чтв 18:09:51 #203 №2452131 
IMG20220901180209.jpg
Помогите с задачей
Нужно найти и вывести пропуски ровно в одно число с помощью джоина и фильтрации, решение при помощи оконной функции не подходит
Аноним 01/09/22 Чтв 20:04:34 #204 №2452245 
>>2452121
Ещё из вариантов - создаёшь временную таблицу, инсертишт в нее, а потом:
UPDATE target_table
SET value1 = tmp.Value1, value2 = tmp.value2
FROM temp_table tmp
WHERE target_table.id = tmp.id;
Аноним 01/09/22 Чтв 20:38:07 #205 №2452280 
>>2452131
select T1.t +1 from T T1 join T T2 on T1.t=T2.t-2 left join T T3 on T1.t=T3.t-1 where T3.t is null
Аноним 01/09/22 Чтв 22:38:55 #206 №2452347 
а в чем проблема PostgreSQL, по факту ведь отличается от объемов проекта, если большой - MySQL, малый-средний - PostgreSQL?
Аноним 01/09/22 Чтв 22:59:41 #207 №2452360 
>>2452347
Так толсто, что аж толсто...
Аноним 01/09/22 Чтв 23:05:11 #208 №2452362 
>>2452347
Похуй, что толсто, но постгрес подходит для любых объёмов проекта, хоть пет с 5 таблицами, хоть энтерпрайзный легаси монолит с 3000 таблицами и миллионами записей.
Аноним 01/09/22 Чтв 23:22:19 #209 №2452367 
Если мне нужно поле votes для модели, правильно ли будет сделать votes_up = int
votes_down = int

И реализовать интерфейс к ним интерфейс, который будет увеличивать их счетчик? Возвращать count по этим полям

{
"votes_up": 325,
"votes_down": 89
}
Аноним 01/09/22 Чтв 23:34:53 #210 №2452371 
>>2452362
>>2452360
мне просто интересно, почему его хейтят.
на сколько известно, он мало чем отличается от MySQL
Аноним 02/09/22 Птн 00:48:44 #211 №2452397 
>>2452371
Кто хейтит? Негатив в сторону постгреса слышно только от NoSQL-шизиков, но они ненавидят одинаково все РСУБД, что постгрес, что мускл, что оракл.
Аноним 02/09/22 Птн 00:51:19 #212 №2452398 
>>2452371
еще толще
Аноним 02/09/22 Птн 02:24:25 #213 №2452424 
>>2452371
Его хейтят только всякие макаки-веб мастера, ибо сложна, вакуум какой непонятный тюнить надо. Да и другие настроечки тоже неплохо бы покрутить, чтоб производительность лучше была.
Аноним 02/09/22 Птн 11:07:51 #214 №2452561 
>>2452367
Это смотря какие у голосовалки требования, но обычно такая логика реализуется дополнительными таблицами с внешними ключами.
Аноним 02/09/22 Птн 14:27:20 #215 №2452683 
>>2452672
План запроса смотрел? Индексы на все столбцы, по которым идёт join есть?
Аноним 02/09/22 Птн 14:33:58 #216 №2452692 
image.png
>>2452683
Это первое что я сделал. Индексы расставлены. Но эксплейн не о чем не сказал кроме 958 rows в связующей таблице. И у меня еще 5.7 мускул а там нет доп. инструментов для анализа как в 8
Аноним 02/09/22 Птн 14:37:36 #217 №2452697 
>>2452245
Не нужны никакие временные таблицы если используешь subquery

UPDATE target_table
SET value1 = subquery.Value1, value2 = subquery.value2
FROM (SELECT id, value1, value2 FROM shitty_table) as subquery
WHERE target_table.id = subquery.id;
Аноним 02/09/22 Птн 14:52:24 #218 №2452709 
>>2424142 (OP)

Помощи что-ли попросить?

Чой-та я застрял с Berkeley DB, но это наверное с сишном треде надо интересоваться. Да, точно, не буду вам ебать мозги с вопросами о программировании. Но раз уж зашёл сюда, то вот интересно - есть или нет аналог схемы в базах Berkeley DB? Думаю что нет, но может быть ошибаюсь?
Аноним 02/09/22 Птн 14:57:18 #219 №2452714 
>>2452697
Ну так я писал про вариант, когда у тебя данные для обновления только на клиентской стороне есть. И их много. Вот в такой ситуации мы обычно создаём временную таблицу, заливаем ее через COPY FROM stdin и уже на стороне бд обновляем из нее через UPDATE FROM.
Аноним 02/09/22 Птн 21:44:31 #220 №2453069 
Какие команды и что чаще всего вы используете для работы? Я сейчас видео смотрю и пока только самая база идёт, ну и не хотелось бы тратить время на запоминание вещей, который кроме как в теории не пригодятся.
Аноним 02/09/22 Птн 22:57:35 #221 №2453125 
123.jpg
>>2453069
Чаще всего командую джуну работать за меня
Аноним 02/09/22 Птн 23:45:30 #222 №2453140 
изображение.png
Почему не работает? Должно же работать. Вот тут работает, а у меня нет.
https://youtu.be/8h7JGr9loFo
Аноним 02/09/22 Птн 23:51:20 #223 №2453145 
>>2453140
у тебя не та бд выбрана валенок либо скобки поставь
Аноним 03/09/22 Суб 00:16:16 #224 №2453153 
>>2453140
SELECTЪ надо.
Я хуею.
Аноним 03/09/22 Суб 00:19:10 #225 №2453156 
image.png
Что с sql-ex не так? Почему это incorrect? Почему большая часть решений которые возвращают тот результат, который должен быть - неправильные?
Аноним 03/09/22 Суб 00:24:07 #226 №2453158 
>>2453140
Вроде кириллические названия таблиц надо в "кавычках" указывать.
>>2453156
Скорее всего ему уникальные значения нужны, добавь distinct.
Аноним 06/09/22 Втр 00:06:33 #227 №2456342 
Возможно ли как-то динамически обновлять БД на основе входящих данных?
Сейчас я получаю данные из гугл таблиц, читаю и записываю в базу. Строки могут удаляться и добавлять.
Я пока додумался только до того, чтобы дропать таблицу каждый раз, когда приходят новые данные
Аноним 06/09/22 Втр 00:50:45 #228 №2456376 
>>2456342
merge или его аналоги если ты о данных.
Динамический SQLне лезь дибил если ты о таблицах
Аноним 06/09/22 Втр 18:39:36 #229 №2457088 
Хочу написать галерею с поддержкой тегов, как на бурах вроде yande.re Какую бд для этого дела выбрать?
Аноним 06/09/22 Втр 19:04:42 #230 №2457109 
>>2457088
Любую задачу можно решить через постгрес.
Аноним 06/09/22 Втр 19:11:49 #231 №2457115 
>>2457088
Любую, это схема one-to-many.
Аноним 06/09/22 Втр 22:48:17 #232 №2457280 
Парни, нубский вопрос.

Понял как вычленять строки, в которых title начинается (например) с буквы "П" или заканчивается на букву "а", при помощи LIKE:

title LIKE "П%" OR title LIKE '%а' # Название начинается с буквы "П" или заканчивается на "а"

А как это же самое делать при помощи REGEXP?
Аноним 06/09/22 Втр 23:58:16 #233 №2457321 
>>2456376
Я забил хуй и решил просто перезаписывать каждый раз таблицу
Аноним 07/09/22 Срд 00:33:54 #234 №2457345 
>>2457280
> title LIKE "П%" OR title LIKE '%а'
title LIKE 'П%а'
> REGEXP
Для оракла: SELECT title FROM titles WHERE REGEXP_LIKE(title, '^П.*а$');
Аноним 07/09/22 Срд 00:52:42 #235 №2457353 
>>2457345
Чел, ты неправильно понял, что он хочет. Ему надо "или", а ты сделал "и".
Аноним 07/09/22 Срд 01:06:08 #236 №2457364 
>>2457353
Да, ты прав.
REGEXP_LIKE(title, '^П.⚹|.⚹а$')
Аноним 07/09/22 Срд 15:54:05 #237 №2457773 
>>2457345
А для MySQL как делать REGEXP?
Аноним 08/09/22 Чтв 00:54:32 #238 №2458100 
>>2457773
Гугл говорит, что в мускл есть функция REGEXP_LIKE(), аналогичная оракловой.
Аноним 13/09/22 Втр 01:31:28 #239 №2461616 
Безымянный.png
Подключаюсь к mysql 8 из mysql workbench методом tcp/ip поверх ssh

mysql 8 стоит в контейнере докера что настраивает isp на отдельном порту. После половины дня консоли удалось понять что как работает и настроить воркбенч на синхронизацию и просмотр статистики, но ощущение, что часть функций не работает (скрин + другой порт в характеристиках подключения, 06 вместо 10), пытаться решить проблемы или может лучше подождать чистого сервера, настроенного без Lamp? Ну а может лучше попробовать какие-то другие редакторы, ибо этот крайне ограничен? Успел познакомиться с dbForge, но бюджет не выделят пока, да и модель в воркбенче, и так изучать пришлось. isp просит не удалять поставляемый с собой сервер марьи c устаревшей версией, так как по ней он конфигурирует контейнерный докер Mysql 8
Аноним 13/09/22 Втр 01:32:54 #240 №2461618 
>>2461616
Дополнение: подключаюсь к руту, далее рут базы, иначе начинается канитель. Тестовый сервер
Аноним 13/09/22 Втр 11:18:36 #241 №2461713 
>>2424142 (OP)
Есть очень жирный по памяти select-запрос. Жирный он потому что таблицу на ~ 400к данных мы джойним с самой собой, а затем сверху еще 2 джойна кидаем. При тестах вообще изи улетаем за оперативку, а на проде эта таблица жирнее раз в 8-10, то есть там точно пиздец прям даже если RAM накинуть.

Как быть? Есть идеи разбить 1 запрос на несколько с помощью LIMIT/OFFSET, это вообще поможет? Если нет, то какие варианты?
Аноним 13/09/22 Втр 11:25:48 #242 №2461715 
>>2461713
Можете спросить "а нахуя такие большие таблицы между собой джойнить"? В задаче надо узнать, существует ли в этой таблице (items) другая запись с определенными условиями или же нет.
В зависимости от этого, проставить поле mode. Без self join такое хрен знает как сделать. Я мог бы постараться просто выгрузить эту таблицу целиком в питон и там уже искать есть ли совпадения по условиям, правда хз за сколько это все выполнится, есть подозрения что надо будет ждать несколько часов бля а то и дней.
Аноним 13/09/22 Втр 14:20:21 #243 №2461865 
>>2461713
>Если нет, то какие варианты
400k подзапросов.
Аноним 13/09/22 Втр 14:56:28 #244 №2461886 
Сап двач. Вот скожи, допустим мы ХАЙПОСЕТИКЛИ делаем url shortener.

И допустим мы используем редис для хранения ссылочек.
Это вообще хорошо? Если мы хотем высокую производительность, выдерживание дохуя людей.

Редис же 1поточный. Это ж большой крест, верно?
Получается просто постгрес будет лучше?)
Аноним 13/09/22 Втр 17:38:21 #245 №2462013 
Как из одной таблицы вывести строку соответствующую айди в другой?
Аноним 13/09/22 Втр 17:50:23 #246 №2462020 
>>2461886
>Редис же 1поточный. Это ж большой крест, верно?
Тебе что бы выжрать всю однопоточность редиса в одном инстансе нужно очень постараться, для уберхуйлоайда у них кластер есть
Аноним 13/09/22 Втр 17:57:31 #247 №2462024 
Пожалуйста, помогите. Очень нужно сделать эту хуйню.
Как блядь выделить две таблицы с одной хуйней?
http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
Нужно вывести все города(City) из Customersи Suppliers в алфавитном порядке. Я пробовал через Джойн, но походу на сайте из ссылки нельзя блядь это сделать - пишет ошибку. Помогите! Пожалуйста.
Аноним 13/09/22 Втр 18:16:19 #248 №2462034 
>>2462024
Блядь, стоит только задать вопрос, как сам находишь решение? Что это за хуйня?
Три часа сидел блядь, и только задал вопрос на дваче, как через пять минут нашел решение.
SELECT City, Country FROM Customers
UNION
SELECT City, Country FROM Suppliers
WHERE NOT Country='Germany' AND NOT Country='France' AND NOT Country='UK'
Order by city;
ПИЗДЕЦ
Аноним 13/09/22 Втр 18:57:18 #249 №2462055 
>>2462034
>>NOT Country
лучше сделать Country NOT IN ('Germany', 'France', 'UK')
Аноним 13/09/22 Втр 20:20:16 #250 №2462127 
2022-09-1320-16-30.png
Помогите с решением. Пожалуйста
Аноним 13/09/22 Втр 20:33:52 #251 №2462138 
>>2462127
SELECT MUSICIANS.GITHUN_NICKNAME FROM MUSICIANS, TRACKS WHERE TRACKS.MUSICIAN_ID = MUSICIANS.ID AND TRACKS.TRACK_NAME = 'Calm';
Подставь правильные названия столбцов, их на картинке не видно.
Аноним 13/09/22 Втр 22:00:19 #252 №2462232 
>>2462138
Спасибо. Пусть у тебя все будет хорошо!
Аноним 13/09/22 Втр 22:10:36 #253 №2462241 
>>2461713
Ставлю очко ОПа что это можно решить оконными функциями. Второй вариант вешать индекс, третий вариант писать процедуру и считать частями.
Аноним 13/09/22 Втр 22:54:13 #254 №2462268 
>>2461713
Решение этого вопроса сильно зависит от того, как эта таблица используется. Вангую самоджоин делается исключительно для того, чтобы реализовать вложенные списки для серверного рендера.
Аноним 13/09/22 Втр 23:45:23 #255 №2462292 
Есть три таблицы в постгресе: "коллекции_залуп", "залупы" и "связь_залуп_и_коллекций". Правила инициализации таковы:
1. Коллекция залуп:
- пустая, чтобы пользователь мог создать коллекцию и только потом складывать в неё залупы когда-нибуть потом.
- с рефами на существующие залупы, чтобы пользовать мог создать коллекцию из существующих залуп.
- с иницализаторами залуп, чтобы пользователь мог добавить новые залупы коллекцией.
2. Залупа:
- должна принадлежать как минимум одной коллекции, так что если в инициализаторе нет инфы о существущей коллекции, то нужно создать пустую и в неё сложить новую залупу. Чтобы пользователь мог добавить залупу и сразу же складывать/добавлять другие в схожую коллекцию.
- Если же есть инициализатор коллекции, то создать коллекцию с него по всем правилам инициализации коллекции и сложить в неё новую залупу поверх.

Всё это конечно должно происходить транзакционно. Сначала пробовал реализовать это на уровне приложения, но малость подохуел от бесконечных итераций по хэштаблицам/массивам их их трансформацией туда и обратно. Потом решил написать портянку из CTE на каждый инициализатор и сейчас так и работает. Проблема в том, что если я захочу, например, добавить таблицу с гондонами для залуп с примерно такой же логикой как иницализация залупы без референсов (т.е. новый гондон -> новая залупа -> новая коллекция залуп), то мне нужно повторять всю логику предыдущих запросов в новом, что не айс в плане поддержки кода. Это юзкейс для хранимых процедур?
Аноним 14/09/22 Срд 16:53:19 #256 №2462901 
Пожалуйста, помогите решить задачу.
Я так понимаю тут нужно делать через JOIN?
Если да, то у меня нихуя не получается, если нет, подскажите пожалуйста через что.
Нужно вывести имена всех людейcustomers, которые покупали морепродукты categories
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join
Как блядь это сделать?
Аноним 14/09/22 Срд 21:11:03 #257 №2463091 
>>2462901
можно просто джойнить все подряд, пока не дойдешь до нужной таблицы
SELECT c.CustomerName
from orders o
join customers c on o.CustomerId = o.CustomerID
join OrderDetails od on o.OrderID = od.OrderID
join Products p on od.ProductID = p.ProductID
join Categories cat on p.CategoryID = cat.CategoryID
where cat.CategoryName = 'Seafood'
Аноним 15/09/22 Чтв 09:46:20 #258 №2463315 
>>2463091
Не работает!
Аноним 15/09/22 Чтв 09:53:24 #259 №2463317 
sql2.JPG
>>2463315
а у меня работает
Аноним 15/09/22 Чтв 10:06:17 #260 №2463321 
>>2463317
В хроме заработало
Спасибо большое.
Аноним 15/09/22 Чтв 10:15:27 #261 №2463326 
>>2463317
>>2463091
Ты не мог бы подсказать пожалуйста, почему 'c' и 'o' воспринимаются без оператора синтаксиса? AS?
Аноним 15/09/22 Чтв 11:05:18 #262 №2463361 
Господа, насчет упражнений.
Вижу в шапке sql-ex и codewars.
Но нет ли более годных альтернатив?
sql-ex смущает тем, что древний как кал динозавра, мне кажется, что в sql уже дохуя было фич новых завезено, хотя могу ошибаться конечно.
codewars супер так-то, я там по питону всякое решал, но вот после питона раздел c sql выглядит заброшенным абсолютно.

Или не бухтеть и жрать что дают?

Мне хочется практики задач на относительно продвинутом уровне, в частности там оконные функции и такое прочее.
Аноним 15/09/22 Чтв 11:12:13 #263 №2463366 
>>2463361
иди работать
мне такую шляпу скидывали, не знаю хорошая или нет https://sql-academy.org/ru/trainer?sort=byId
Аноним 15/09/22 Чтв 13:02:50 #264 №2463404 
image.png
>>2463317
>>2463091
И еще один вопрос.
Почему 6000 записей ?
Там же столько нету во всех таблицах?
И как вывести рядом таблицу с морепродуктами, или типом категории?
Аноним 15/09/22 Чтв 18:05:39 #265 №2463663 
>>2463404
Бамп.
Аноним 16/09/22 Птн 19:58:17 #266 №2464569 
>>2457364
Охуеть.
Пытаюсь вкатиться, изучаю питон и понял, что передо мной стена одного питона, проанализировав рынок понял, что надо уметь бд и через них намного проще вкатиться.
Но вот это '^П.*а$'); просто пиздец синтаксис
Аноним 16/09/22 Птн 20:00:55 #267 №2464572 
>>2464569
Регулярки за полчаса учатся, а на питон у меня ушло несколько месяцев.
Аноним 18/09/22 Вск 18:47:53 #268 №2466441 
>>2424142 (OP)
Нах нужно S3 хранилище?
В смысле в чем его преимущество перед рсубд или nosql? У нас все спорят, нужно ли нам s3 для нашей биг даты (таблицы постгреса на проде весят под 90 гигов), а я помалкиваю т.к. не шарю а вопросы задавать ссыкую т.к. позиционировал себя как скилового миддла с 2.5 годами опыта (припиздел)
Аноним 18/09/22 Вск 18:58:40 #269 №2466453 
>>2466441
Нужен только облакодебилам, которые не хотят поддерживать инфраструктуру самостоятельно и отдают всё на откуп вендорам.
Аноним 18/09/22 Вск 19:00:56 #270 №2466455 
>>2466441
Чтобы хранить файлы. Причем тут БД я вообще не ебу.
Аноним 18/09/22 Вск 19:11:25 #271 №2466465 DELETED
>>2466441
возможно, речь о s3 как протоколе. сейчас развелось много софта, который имитирует amazon s3, но не является собственно услугой S3.

Ну надо значит надо. Зависит от того что они дальше собрались с данными делать.
Все надеются что в будущем какие-то очень умные чувачки что-нибудь выудят из этого бесполезного информационного шума.
Аноним 19/09/22 Пнд 10:33:52 #272 №2466970 
Делаю 2 запроса - сначала UPDATE потом INSERT на основании парочки CTE которые написал до этого (смысл в том чтобы CTE выполнились только 1 раз, оказались закешированы и эти запросы получилось выполнить эффективнее), по типу:

WITH pre AS (SELECT FROM shit),
dt AS (SELECT
FROM fuck WHERE dick IS NOT NULL)

UPDATE bitch SET name=sub.nickname FROM (pre JOIN dt ON pre.dest = dt.dest) AS sub

INSERT INTO cunt (name, age, created) SELECT dt.name, dt.age, dt.created FROM dt JOIN network ON dt.loc = network.net

Но блять, постгрес постоянно кидает какие-то ошибки. То он говорит syntax error at or near "INSERT" если я не ставлю ; после UPDATE, а если ставлю то пишет relation "dt" does not exist

Втф? Как правильно выполнять несколько запросов разом через CTE?
Аноним 19/09/22 Пнд 10:50:25 #273 №2466976 
>>2466970
В конце cte должен идти 1 запрос епта. Поэтому update тоже оборачивает в cte нах
Аноним 19/09/22 Пнд 14:12:07 #274 №2467155 
image.png
Сап повелителям РБД. Помогите студентоте, с проектированием базы данных интернет магаза, одно дело писать запросы а другое дело их проектировать. Вот у меня есть такие вопросы

1. В каком виде хранить картинки? Почитал я статьи там пишут что нельзя хранить пикчи в БД, оно и логично, неужто я могу ограничится тем что просто создам папку куда буду все скидывать а в бд буду хранить ссылку на файл?

2. Насколько бд проста в масштабируемости по вашему? Ну то есть, если я захочу продавать кроме материнок с видюхами ещё и цпу, то мне остается просто добавить таблицу с цпу не меняя все отношения

3. Как хранить пароли юзверей? Тупа в таблице захешировав? Или есть более элегантный способ?

4. Насколько сильно нужна дрочилово с внешними ключами? Я вот ещё слабо понял в их концепциях да нихуя не понял если честно

5. Ну и по индексам такой же вопрос как и в 4-ом
Аноним 19/09/22 Пнд 14:24:02 #275 №2467159 
image.png
>>2467155
:)
Что на пикче, твоя лабараторная? Какой курс?
Аноним 19/09/22 Пнд 14:28:15 #276 №2467162 
>>2467159
Пиздец задеанонил себя, ну да похуй, не в /b хотя бы

>Какой курс?
2 курс анон

Ну так поможешь? :)
Аноним 19/09/22 Пнд 16:51:15 #277 №2467255 
>>2467155
1 - просто путь, да.
2 -
Тут надо много больше табличек, чел.
Для начала корзина, там номер заказа и айди юзера, потом табличка с заказами, где номер заказа, номер продукта, количество.
В продуктах номер продукта, название, ску, описание и прочая залупа, которая есть у всех продуктов. Дальше табличка с типами продуктов и вспомогательная для связи продукта с типом. Дальше табличка с опциями типа сокет, объем памяти и т.д. и вспомогательная для связи продукта с этими опциями. Это навскидку.
3 - соленый хеш + рандомная соль отдельно на каждого юзера, это как сейчас делают, тебе для лабы достаточно просто хеша.
4 - Нужно, это несложный концепт, кури.
5 - Нужно, это более сложный концепт, кури.
Аноним 19/09/22 Пнд 16:52:59 #278 №2467258 
>>2467162
Карабах чей?
Аноним 19/09/22 Пнд 17:25:03 #279 №2467285 
>>2467258
>Карабах чей?
Бля чел мы не в /b сидим, дай хоть здесь от этого кала отдохнуть

а так я из казахстана
Аноним 19/09/22 Пнд 17:27:15 #280 №2467288 
>>2467255

Спасибо за такой ценный совет, вот со вторым пунктом я точно проебался, спасибо что заметил, тонны чаю тебе
Аноним 24/09/22 Суб 13:48:49 #281 №2472490 
Сап, я быдло!
В соседнем треде увидел упоминание NoSQL, гуглить лень, объясните в двух словах, нахуя оно нужно и чем оно лучше SQL.
Про реляционные бд знаю, про sql тоже.
Аноним 24/09/22 Суб 14:21:41 #282 №2472525 
>>2472490
Ничем оно не лучше, у него задачи другие. Реляционные для OLTP (много маленьких транзакций, есть почти во всех приложениях), NoSQL для аналитических запросов, отчётов, временного хранения данных, кешей с быстрым доступом и т.д.
NoSQL - это не название какого-то языка запросов, а просто все СУБД, которые нельзя отнести к реляционным. У NoSQL неи стандартного языка запросов, в кажой такой СУБД свои союственные.
В реляционных БД у тебя таблицы с типизированными столбцами, первичные и внешние ключи, нормализация, джойны и всё сопутствующее. В NoSQL может быть что угодно, например, есть key-value (это можно сказать гигантская мапа, где ты под указанным ключём сохраняешь какой-нибудь объект) и есть документные (когда вместо таблиц у тебя коллекции объектов - "документов" произвольной структуры без схемы, можно думать как о хранилище жсонов).
Аноним 24/09/22 Суб 16:24:08 #283 №2472634 
>>2472490
Это вопросы уровня "чем тойота лучше чем фольксваген?" или "чем go лучше чем typescript?". Nosql баз данных мильярды, есть любые прибамбасы, которые только душе угодны. Но я пользуюсь nosql из чисто прагматичных соображений, потому что ставить sql-базу западло, а за облачную nosql платишь 3 копейки в месяц, она не расходует память сервера. Мне не надо её настраивать, не нужно копаться в конфигах - я подключился и мне заебись.

В плане работы - другая идеология, вот и всё. В sql всё задрачивание идёт на построение запроса, а в nosql всё задрачивание идёт на организацию хранения данных. Соответственно, если ты любишь строить хитрожопые запросы - ты берёшь sql. А если ты любишь хитрожопо хранить данные - то берёшь nosql.

Скорость/масштабируемость у nosql замечательная. Ответ где-то в районе 8 миллисекунд. При чём не важно, сколько у тебя данных в базе, хоть 1 террабайт, хоть 1 мегабайт, по барабану вообще. На производительность не влияет никак.
Аноним 24/09/22 Суб 23:42:42 #284 №2473010 
>>2424142 (OP)
Существует ли модель данных, которую невозможно представить в виде реляционной модели данных?
Аноним 24/09/22 Суб 23:59:44 #285 №2473020 
>>2473010
Не существует. Сложности всегда только с эффективностью доступа и представлением в виде реляционной модели, например, иногда приходится строить поверх реляционной модели другую модель, где в конечном итоге всё равно все сводится к таблицам и ключам. Нереляционные СУБД берут не потому, что в реляционных невозможно что-то сделать, а потому что для каких-то моделей данных они работают эффективнее, чем реляционные.
Аноним 25/09/22 Вск 00:37:22 #286 №2473046 
>>2473020
Я просто где-то слышал что некоторые сетевые или там графовые модели с рекурсией не могут быть представлены в виде реляционной модели. Поэтому и переспросил, какбэ.
Аноним 25/09/22 Вск 00:41:17 #287 №2473047 
>>2473046
Да, вот ещё, чё-то вспомнилась мне неполнота по тьюрингу языка SQL: https://neerc.ifmo.ru/wiki/index.php?title=Тьюринг-полнота#SQL
и возможность костыльного дополнения с помощью каких-то неведомых расширений, этого языка до тьюринг-полной системы.
Почему тьюринг-полнота?
А потому что речь о представлении любых моделей данных, какбэ,
и если уж моделировать любую модель, то какбэ должна бы быть тьюринг-полнота.
Почему так? Да потому что сильный тезис Чёрча-Тьюринга-Дойча, вот почему: https://ru.wikipedia.org/wiki/Тезис_Чёрча_—_Тьюринга
Аноним 25/09/22 Вск 00:45:15 #288 №2473048 
>>2473046
Могут, сеть - это тупо таблица свяхок, там никакой рекурсии нет.
>>2473047
Это уже не SQL, да и расширения относятся к логике обработки, а не к самой модели данных. Но отсутствие полноты по Тьюрингу не мешает хранить представление любых моделей данных.
Аноним 25/09/22 Вск 01:36:14 #289 №2473056 
>>2473048
Дык а если в самой модели рекурсия? Скажем, описание программы с рекурсией - это ли не модель её?
Аноним 25/09/22 Вск 01:47:06 #290 №2473060 
>>2473056
Ты относишь логику программы к модели данных?
Если не относишь, то рекурсия в программе отделена от реляционной модели, никакой связи между ними нет, значит, представить можно любую модель.
Если относишь, то в реляционной модели данных вообще невозможно представить никакую модель данных, там тупо нет понятия логики. Хранимые процедуры также не имеют отношения к реляционной модели. Логика относится к программе и может вообще ничего не знать о том, как данные хранятся, ей не важно, постгрес там или монга.

Это ты тот анон, который пытается впилить sqlite в наноборду?
Аноним 25/09/22 Вск 02:41:58 #291 №2473076 
>>2473060
>Ты относишь логику программы к модели данных?
А, ну да, описание рекурсивной программы - это же не сам рекурсивный процесс её исполнения, это просто данные, ну там описание цикла бесконечного, или описание вызова функции из этой же функции...
Сам процесс выполненения программы - это уже работа с этими данными, то есть как-бы процесс обхода данных в базе данных, и если он бесконечен, как бесконечные циклы, то такой процесс невозможно смоделировать даже на машине тьюринга, исходя из того же сильного тезиса, в контексте непрерывности и бесконечности.
А если процесс исполнения конечен, то это тупо конечная последовательность выполнения элементарных операций, и она может быть представлена в виде таблицы в БД, как описание любого другого конечного процесса.

>Это ты тот анон, который пытается впилить sqlite в наноборду?
Да. Ой блядь, насчёт этой идеи. У меня тут, понимаешь ли, пришло время переустанавливать грёбанный шиндошс. Всё слетело нахуй, и я уже забыл чо хотел там.
Уебунту поставил, mono тоже сбилдил вроде, пароль от гитхаба схоронил...
А вот чо дальше со всей этой хуетой делать - хуй знает, нет чёткого плана, да и интереса как такового, в том числе и финансового - тоже нет, вообще.

Огрызки кода, недопиленные, ну вон они - в бранчах на гитхабе висят, в issues тоже есть некая инфа, я там пилил короче пира, раздающего хэш-таблицу, и отдельно - саму хэш-таблицу KeyValue на sqlite, с Mono.Sqlite.dll. Она и в шинде работает, и в уебунте, какбэ. Но всё это собрать вместе, не получилось, хотите сами въебенькайте, а то меня уже заебало.

Хотя постой. Я же вроде впилил уже сиквелайт где-то тут:
https://github.com/username1565/nanoboard/tree/nanodb-sqlite
вроде робит, и робит вроде норм.
Шо ещё надо?

А, да, хотел короче всю эту хуйню замкнуть на хэш-таблицу, вида:
|hash|ReplyToHash+PostMessage|
и короче приебенить handler в DbApiHandler.cs,
чтобы по хэшам отдавать исходники нанопостов, и так синхрить базу, между live-server'aми.
А потом вообще решил заебенить пира:
https://github.com/username1565/CSharpServers/tree/Peer
чтобы он в локалке находил других пиров мультикастом, и коннектился к ним, и чтобы короче децентрализованно синхрить хэш-таблицу эту, ебучую.
Когда полная децентрализация, то нет центров, а значит нихуя нельзя разбомбить ракетами, и поэтому короче наноборда неубиваемая будет.
А то тут, блядь, всякие над головой летают, всякие иранские дроні-камикадзе shaheed-136 и Mohajer-6, калибры, искандеры, сукка, сверхзвуковіе шеститонные советские ракеты X-22, которые напиздело у народа хуйло, спиздив ещё и ЯО СССР, перед тем как хуйло предало народ СССР.
Так что сливайте бекап наноборды и расшарьте короче всеобщее достояние это, няшное, а то так и будете на подмочухном мейлаче подхуйловском, обезьяне-маме пасскоды покупать, пока она вакабу шатает, образом - пиздец каким обратно-несовместимым.
Аноним 25/09/22 Вск 06:10:54 #292 №2473126 
>>2473010
Это как бы на поверхности. Банально произвольную иерархию объектов уже проблематично отобразить в классических реляционных отношениях, если на не наложить определенные ограничения. Гугли object–relational impedance mismatch.
Аноним 25/09/22 Вск 12:13:01 #293 №2473228 
>>2473126
Да ну, а как же бесконечно-ветвящееся дерево, в виде одной лишь таблицы: |id|parentID|object_content| ?
Аноним 25/09/22 Вск 12:14:56 #294 №2473231 
>>2473126
Или ты имеешь в виду ещё и сами взаимосвязи, между свойствами описываемых объектов?
Аноним 25/09/22 Вск 12:18:22 #295 №2473238 
>>2473231
Хотя опять же, описания объектов - это просто данные, а сами взаимосвязи между свойствами этих объектов, могут быть выражены в виде логики работы программы, а не в виде реляционных связей.
Аноним 25/09/22 Вск 13:08:50 #296 №2473289 
>>2473228
Можно, конечно, использовать РСУБД для хранения данных в EAV ( https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model ) Но это уже не реляционная модель. Это просто способ хранения EAV модели. У почти все операции реляционной алгебры сразу нахуй идут. Плюс у тебя все ограничения целостности, которая данная модель предоставляет тоже проёбываются. Причём даже на уровне типов.
Реляционная модель это не про таблички, а про отношения и операции и связи между ними. Причём операции в это модели конкретные.
Ещё раз. В виде набора табличек, да, можно почти любую модель данных представить. Но если ты над ней не можешь выполнять операции реляционной алгебры - то это уже не реляционная модель.
Аноним 26/09/22 Пнд 16:44:52 #297 №2474616 
image.png
Аноны объясните дебичу, как это называется.

У меня есть три таблички A, B, C. Когда я добавляю данные в таблицу A или B, у меня автоматом конкретно выбранные столбцы из этих таблиц попадают на новую строку в таблицу С
Аноним 26/09/22 Пнд 17:09:03 #298 №2474643 
>>2474616
Вы там построчное резервирование изобрели, что ли?..
Аноним 26/09/22 Пнд 17:29:26 #299 №2474666 
>>2474643
Анончик как это делается? И насколько разумно её пользоваться? Подскажи пожалуйста
Аноним 26/09/22 Пнд 18:19:31 #300 №2474729 
>>2474616
Я перефразирую вопрос. Можно сделать так чтобы в один столбец могли писать несколько таблиц. Условно таблица №1 сделала запись, а когда таблица №2 будет делать запись то она запишет в следующую строку
Аноним 27/09/22 Втр 00:24:31 #301 №2475082 
>>2474729
Триггеры там какие-то есть, вроде что-то подобное можно делать, сам не пользовался.
Аноним 27/09/22 Втр 11:17:07 #302 №2475356 
>>2474729
>Я перефразирую вопрос. Можно сделать так чтобы в один столбец могли писать несколько таблиц.
Конечно можно, при инсерте создаёшь создаёшь строку в таблице, получаешь её уникальный идентификатор и передаёшь его в другую.
Аноним 27/09/22 Втр 11:19:04 #303 №2475357 
>>2472634
>Ответ где-то в районе 8 миллисекунд.
А потом секунд 10 проверяешь целостность данных на уровне приложения.
Аноним 27/09/22 Втр 13:33:22 #304 №2475454 
>>2475357
>А потом секунд 10 проверяешь целостность данных на уровне приложения.
Чё так проверять? Модель импортируешь и всё. Mongoose там какой-нибудь или dynamoose/dynamodb-onetable.
Аноним 27/09/22 Втр 15:08:09 #305 №2475553 
Trigger.png
Backup.png
>>2474616 >>2474666 >>2474729
Это называется хранимая процедура или триггер (они могут быть довольно-таки страшненькими, вот посмотри на рисунок). Имеет смысл этим пользоваться в том случае, когда резервная копия базы данных создаётся не ночью раз в сутки, а прямо во время изменения данных в таблицах.

То есть, например, к каждой таблице добавляется таблица "history" с теми же столбиками и ещё несколькими (каким было действие, кто его выполнил и когда) и при каждом добавлении/изменении/удалении в таблицу "history" сбрасывается предыдущая версия строки из основной таблицы.

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

Это называется построчное резервирование, incremental backup и т.д. Подробности:
http://www.r-5.org/files/books/computers/languages/sql/nosql/Eric_Redmond_Jim_R_Wilson-Seven_Databases_in_Seven_Weeks-EN.pdf
Нажать Ctrl+F и поискать фразу:
Finally, we create our trigger to log changes after any row is updated.

А если твой вопрос был в том, чтобы добавить строку в одну таблицу, получить её первичный ключ "id" и затем добавлять строки в другие таблицы вместе с полученным ключом "id" (где он будет уже внешним ключом), то это называется get last insert id и есть в справочном руководстве по любому языку погромирования.

И никак нельзя пройти мимо книги "Изучаем SQL" (Алан Бьюли), это самая скачиваемая книга с сайта и когда-то мне её очень недоставало!

Как же орут в переговорке, пиздец просто
Аноним 27/09/22 Втр 15:13:07 #306 №2475561 
>>2475553
Постгресс сильно отличается от майскл?
Аноним 27/09/22 Втр 15:15:52 #307 №2475567 
>>2475561
На уровне запросов то же самое, а хранимки под неё пишутся на другом диалекте.
Аноним 27/09/22 Втр 16:11:57 #308 №2475645 
>>2475454
Модель и проверяет 10 секунд.
Аноним 27/09/22 Втр 16:23:40 #309 №2475661 
>>2475645
Охуительные истории итт. Одна история охуительней другой...
Аноним 28/09/22 Срд 10:38:50 #310 №2476268 
нуб в треде.

Анончики, как мне сделать count всех таблиц что у меня есть и вывести это всё красивенько?
Аноним 28/09/22 Срд 11:58:35 #311 №2476335 
>>2476268
Словарь данных. В каждой СУБД свои механизмы.
Аноним 28/09/22 Срд 17:57:25 #312 №2476699 
>>2475661
Конечно, свидетели nosql любят заливать про БЕСКОНЕЧНЫЙ ГОРИЗОНТАЛЬНЫЙ РОСТ, ОХУЕННУЮ СКОРОСТЬ, ПРОСТОЙ, УДОБНЫЙ И ПОНЯТНЫЙ АПИ, а как копнёшь, то сразу всплывает анальный вендорлок, самопальный язык запросов и игнорирование ACID.
Аноним 28/09/22 Срд 18:16:10 #313 №2476718 
Чёт я не понял, в постгресе есть способ передавать таблицы/набор строк аргументом к функциям?
Аноним 28/09/22 Срд 19:11:39 #314 №2476753 
>>2476718
Стаковерфлов предлагает костыли ебаные: передавать массив, передавать название таблицы строкой, создавать AGGREGATE FUNCTION и подобное. Пиздец какой-то.
Аноним 29/09/22 Чтв 12:40:01 #315 №2477211 
>>2424142 (OP)
Надо сджойнить таблицу на 200 млн строк саму с собой.
В постгрес мы просто улетаем за память и пиздец. Переработал и теперь хожу в цикле - джойню эту таблицу саму с собой но по чанкам - по 100к строк за раз - теперь это все по памяти терпит но выполняет сцуко долго

Подозреваю для такого лучше просто использовать нечто другое а не постгрес. Что и как юзать?
Аноним 30/09/22 Птн 23:07:12 #316 №2478829 
>>2424142 (OP)
Вопрос от тупово вкатуна

Есть таблица тредов с какой то инфой внутри
Есть таблица с постами, в них хранится дата, ид треда и ещё какая то инфа

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

или такое на чистом sql не пишут, а ручками треды сортируют?
Аноним 01/10/22 Суб 01:17:49 #317 №2478964 
>>2463361
делаешь выборку [тред|дата последнего поста] с помощью группировки и агрегатных функций, добавляешь сортировку
Аноним 01/10/22 Суб 02:45:40 #318 №2478983 
>>2478829
SELECT
thread.id AS thread_id,
thread.name AS thread_name,
last_post.date AS last_post_date
FROM threads as thread
JOIN
(
SELECT
post.thread_id AS thread_id,
MAX(post.created_at) AS date
FROM posts
GROUP BY posts.thread_id
) AS last_post ON last_post.thread_id = thread.id
ORDER BY last_post.date DESC;
Аноним 01/10/22 Суб 07:36:08 #319 №2479003 
image.png
Бля пиздец ебаные деды, кто так запросы-то пишет? Ссаная каша в которой нихуя не поймешь, пока не приведешь к нормальному виду
Аноним 01/10/22 Суб 08:21:33 #320 №2479008 
>>2478983
Спасибо,теперь понял как такое делать
Аноним 01/10/22 Суб 10:22:01 #321 №2479038 
>>2479003
> кто так запросы-то пишет?
Успешные, здоровые люди, которые могут воспринять и распарсить у себя в голове абзац плотного текста. А ты - зумер с клиповым мышлением. Если в тексте больше трёх слов - теряешься, паникуешь.
Аноним 01/10/22 Суб 14:16:49 #322 №2479168 
>>2479038
Дед, спок. Ты же понимаешь, что когда компания наймет несколько зумеров и они переработают твой говнокод, сделав его пригодным для рефакторинга любым человеком, то окажется, что твои знания на уровне нынешнего 2 курса нахуй не нужны и ты пойдешь на досрочную пенсию из компании?
Аноним 01/10/22 Суб 17:00:21 #323 №2479277 
>>2479003
Всё понятно, просто форматирование хуёвое. Я иногда так пишу, когда нужно не забыть мысль и по-быстрому составить запрос, но потом всегда привожу к читаемому виду. Хуйня по сравнению с запросами на 500 строк для всяких отчётов.
Аноним 01/10/22 Суб 19:33:50 #324 №2479386 
>>2479168
Я в той компании директор.
Аноним 01/10/22 Суб 19:40:20 #325 №2479387 
>>2479386
Что за ИП, где директор делает работу за специалистов? Ларёк на рынке?
Аноним 01/10/22 Суб 19:49:08 #326 №2479395 
>>2479387
Работу делаешь ты. А я тебе зарплату плачу. Если хорошо работаешь, офк.
Аноним 03/10/22 Пнд 15:38:44 #327 №2480781 
>>2479386
Дайте премию еще 10к плес, мне на аквариум не хватает
Аноним 06/10/22 Чтв 10:19:03 #328 №2482695 
Куда кидать AdventureWorks2012.bak?
Аноним 07/10/22 Птн 11:53:01 #329 №2483480 
В каком-то из тредов была ссылка на годный курс по SQL на степике.
Есть у кого она?
Аноним 07/10/22 Птн 18:04:26 #330 №2483871 
>>2440122
Отвечаю на этот пуст спустя 2 месяца кажись (?).

>>2450718 этот скрин тоже я оставлял. Он как раз из пдф-ки курса Дальневосточного универа, который мне повезло проходить бесплатно за счет того что я безработный сыч (по бумагам, фриланс наше государство не учитывает).

Короче. Оконные функции у нас как раз одна из последних тем. Табличные выражения и всякие вложенные запросы тоже проходили. Всякие методы для работы с временем, всякие IF и CASE тоже прошли. Все эти лефт, райт, кросс джойны и прочее, групповая выборка, корректировка данных (создание новых таблиц на основе старых, изменение содержимого таблиц, удаление строк, связывание таблиц через внешние ключи и прочее).

Вот блин а где почитать про "изолирование транзакций"? И вообще накидайте редких тем, которые можно/надо подучить на джуна чтобы знать какие примерно каверзные вопросы могут спросить на собесе.

Всем спасибо заранее.
Аноним 07/10/22 Птн 21:28:35 #331 №2484051 
>>2483480
https://stepik.org/course/63054/info

Я как раз его прохожу сейчас, только расширенную версию.
Аноним 08/10/22 Суб 02:02:46 #332 №2484177 
>>2427670
Приведи пример запроса с
>WHERE table1.id = table2.table1_id
без джоинов.
Аноним 08/10/22 Суб 02:28:13 #333 №2484185 
>>2484177
Привожу:
WHERE table1.id = table2.table1_id
Аноним 11/10/22 Втр 09:02:23 #334 №2485996 
Пытаюсь динамические запросы раскурить в mssql, чето разобраться не могу, может кто из ананасов сталкивался. Хочу файл прочитать, но чтобы путь к нему можно было через переменную передавать:

Declare @JSON varchar(max)
Declare @QUERY varchar(max)
Declare @PATH varchar(260) = 'D:\MY_JSON.json';

set @QUERY = 'SELECT @JSON=BulkColumn FROM OPENROWSET(BULK ''' + @PATH + ''', SINGLE_CLOB) AS [Json];'
exec @QUERY

Пишет - Необходимо объявить скалярную переменную "@JSON"
Шо, я же её в самом начале объявил. Что ему ещё надо?
Аноним 11/10/22 Втр 13:27:46 #335 №2486152 
изображение.png
изображение.png
Почему не работает? Это SQL server, если что.
Аноним 12/10/22 Срд 14:10:44 #336 №2486766 
изображение.png
Как вот такое реализовывать? Тут CHECK хватит?
Аноним 12/10/22 Срд 14:19:14 #337 №2486770 
>>2486766
Не надо блядский CHECK использовать. В базе данных никакой логики быть не должно, только данные
Аноним 12/10/22 Срд 15:21:35 #338 №2486792 
>>2486770
Это когда ты в одно рыло пишешь весь код, Анончик...
Аноним 12/10/22 Срд 16:54:29 #339 №2486830 
>>2486792
В одно рыло - это когда знаешь, что за неочевидная логика скрывается в очередном триггере или в констреинте на столбец. И исходник просто так хуй посмотришь, всё хранится в базе. Как только на проекте появляется хотя бы ещё один разраб, поддержка превращается в ад.
Аноним 13/10/22 Чтв 16:37:16 #340 №2487677 
image.png
Первокур вкатун с тупым вопросом:

Предметная область оценки по предметам в университете, у меня получается так, что учебная дисциплина может быть разной, в зависимости от семестра. То есть в бд, матан за 3 семестр и 4 семестр должны отличаться.
Но как это по человечески сделать не знаю. На ум приходят только отдельную таблицу с семестрами хранить, которая будет хранить год + булеан, второй это семестр или первый.
Выглядит как то костыльно, но лучше ничего на ум не приходит
Аноним 13/10/22 Чтв 18:07:45 #341 №2487817 
>>2485996
Так в динамическом запросе ты ее не объявлял, он же выполнять будет только то, что в строку ты вписал
Аноним 13/10/22 Чтв 20:55:07 #342 №2487967 
>>2487677
А семестров сколько? 2? Ну и сделай тоже через INT - 1 и 2, первый и второй семестр. Булеан тут логически не очень подходит.
Аноним 13/10/22 Чтв 21:07:20 #343 №2487975 
>>2487967
ну в каждом году по 2 семестра
годов много то есть 2022, 2021, 2020 и так далее
Аноним 14/10/22 Птн 00:02:28 #344 №2488069 
>>2487975
Тогда можно вообще забить на такую вещь как семестры. Просто в табличку Task добавить строчки Date куда будешь в стандартном формате даты заносить время получения и сдачи-выполнения задачи. И потом уже из этих временных отметок можно будет и год и семестр и прочее извлекать.
Аноним 14/10/22 Птн 06:30:24 #345 №2488114 
>>2424142 (OP)
Где найти норм гайды по OrangoDB? Ни книг, ни ресурсов, ничего... Одни жиденькие доки
Аноним 14/10/22 Птн 15:24:18 #346 №2488558 
>>2488114
Первый раз про эту штуку слышу
Аноним 14/10/22 Птн 17:33:51 #347 №2488792 
Я мб в глаза ебусь, но что-то на sql-ex не нашел упражнения на оконные функции, они там есть вообще?
Аноним 14/10/22 Птн 17:50:02 #348 №2488809 
>>2488792
А все, нашел какие-то
Аноним 15/10/22 Суб 18:21:44 #349 №2489448 
Салам, военнообязанные
Кто-то в курсе чем отличается знак <> от обычного != в postgresql? есть какие-топ подводные при использовании одного и другого?
Аноним 15/10/22 Суб 19:24:33 #350 №2489501 
>>2489448
Одно и то же. Просто <> есть в стандарте SQL, а != нет.
Аноним 16/10/22 Вск 14:48:14 #351 №2489914 
Сенсеи, волей судьбы оказался на проекте в качестве дата инженера. Хотел кежуали писать пайплайны, но стоит задача мигрировать с одной схемы на другую. Входные данные: схема в RDS c MySQL под капотом, в которой 2 таблички, но одна из них содержит текстовое поле с джейсоном, который как водится семистракчеред и от записи к записи содержит разную инфу. Помимо этого есть еще табличка (или что там у них) в DynamoDB, в которой, что интересно бля, все более менее реляционно. Выходные данные - реляционная схема, предположительно на постгресе, но в том же RDS, без NoSQL. Вопрос: Как спланировать и осуществить миграцию, чтобы все прошло гладко? Как именно осуществить выгрузку\загрузку? Мб есть для таких дел тулы в амазоне или можно в лоб скриптом на питоне? Или не в лоб и на всякий случай со сквозной записью в С3? В общем никогда подобным не занимался и не представляю как такие вещи делаются
Аноним 16/10/22 Вск 18:39:15 #352 №2490053 
>>2489914
> Как именно осуществить выгрузку\загрузку?
database migration service погугли. есть большая вероятность, что это ван стоп шоп для твоих нужд
Аноним 16/10/22 Вск 18:45:15 #353 №2490056 
>>2490053
про динаму не скажу, но с RDS MySQL в RDS Postgres должно быть относительно прямолинейно перекатить с помощю DMS
Аноним 17/10/22 Пнд 10:07:25 #354 №2490343 
ZeroDowntime1.gif
>>2489914
>Как спланировать и осуществить миграцию, чтобы все прошло гладко?
Блин, чувак, это есть в доках амазона.
https://aws.amazon.com/ru/blogs/big-data/near-zero-downtime-migration-from-mysql-to-dynamodb/

Там есть инструмент называется database migration service. Он замороченный, поднимает дополнительный инстанс и делает репликацию в реальном времени. Нужно только написать правильный маппинг. Единственный геморрой что там много надо пердолить настройки - vpc поднять, роли создать, source/target создать, migration инстанс поднять, целая история короче.

Либо второй вариант -> делать дамп в S3 и помощью AWS EMR делать конвертацию. Но это на порядок сложнее.

>>2489914
>есть еще табличка (или что там у них) в DynamoDB, в которой, что интересно бля, все более менее реляционно
Как понять "реляционно"? DynamoDB базу надо уметь грамотно проектировать, чтобы выхлоп получить. У неё принципы работы другие совершенно, не такие как у MySQL.
Аноним 17/10/22 Пнд 10:09:42 #355 №2490344 
Какая БД профитна если у нас много операций вставки и обновления?
Аноним 17/10/22 Пнд 19:23:48 #356 №2490721 
Подскажите, пожалуйста, где можно навернуть про индексы, хочется хорошо понять, когда есть их резон юзать, когда нет, как работают.

И может еще что-то такое оптимизаторское.
Аноним 17/10/22 Пнд 19:57:11 #357 №2490752 DELETED
>>2490344
mysql> create table .. engine = blackhole;
очень профитна
Аноним 17/10/22 Пнд 19:58:09 #358 №2490753 DELETED
>>2490721
просто исходники своей субд читаешь и пытаешься в уме понять ситуации когда это работает.

иначе так и будешь задавать вопросы на манер тиктока.
Аноним 17/10/22 Пнд 20:07:21 #359 №2490761 
>>2490752
> engine = blackhole
Ахахах, а в постгресе есть подобное?
Аноним 17/10/22 Пнд 20:41:44 #360 №2490806 
>>2424142 (OP)
Что будет с редисом если в него запихать больше данных чем оперативка?
Будет ли он их складывать на диск?
Аноним 17/10/22 Пнд 20:43:23 #361 №2490810 
>>2424142 (OP)
У меня есть 200ТБ данных KV которые мне надо чтобы пользователи оперативно получали. Я бы хотел их кое как шардировать какую базу выбрать для того чтобы было это поудобнее делать, монго имхо оверкил слишком сложна.
Можно попробовать потсгрес с хэш индекасами и\или каойнибудь динамодб или левел дб есть у кого опыт?
Аноним 17/10/22 Пнд 21:13:56 #362 №2490830 
>>2490806
Гугли про виртуальную память.
Будет то же, что при попытке юзануть в своей программе больше ОЗУ, чем имеется: начнёт юзаться своп на диске (если он настроен), а вместе с этим начнутся дикие тормоза. Ну а потом свалится из-за нехватки памяти.
Аноним 17/10/22 Пнд 22:01:18 #363 №2490854 
>>2490830
Гавняное гавно.
Аноним 17/10/22 Пнд 22:06:15 #364 №2490857 
>>2490854
По задачам. Редис для кешей, очередей или временных данных, а не полноценная key-value СУБД.
Аноним 17/10/22 Пнд 22:13:52 #365 №2490865 
>>2490857
Просто хотелось какой то silverbullet
Аноним 17/10/22 Пнд 22:31:23 #366 №2490884 
>>2490865
Был бы silver bullet, никто бы не юзал другие СУБД.
Аноним 17/10/22 Пнд 23:07:13 #367 №2490911 
>>2490343
Я благодарин
Аноним 17/10/22 Пнд 23:48:10 #368 №2490928 
image.png
Блять нихуя не понял, это перевод на русский такой корявый или я тупой?
Аноним 18/10/22 Втр 00:23:02 #369 №2490936 
>>2490721
https://use-the-index-luke.com/
Аноним 18/10/22 Втр 08:39:24 #370 №2491001 
>>2487817
Точно, какой же я тупой, господи
Аноним 18/10/22 Втр 21:02:49 #371 №2491392 
>>2424142 (OP)
Есть 2 запроса:

SELECT s.id, loc.id
FROM
sourcing AS s JOIN location AS loc
ON s.id = loc.id
WHERE loc.index = 1

И

SELECT s.id, loc.id
FROM
sourcing AS s JOIN (SELECT l.id FROM location AS l WHERE l.index = 1) AS loc
ON s.id = loc.id

Результаты одни и те же, но какой из этих запросов производительнее? Обычный или топ что через subquery? Допустим возьмем postgres как РСУБД
Аноним 18/10/22 Втр 21:12:52 #372 №2491405 
>>2491392
Смотри планы запросов, но подзапросы лучше не юзать.
Аноним 18/10/22 Втр 21:29:01 #373 №2491413 
>>2491405
А если во втором query вынесу этот подзапрос в CTE?
sage[mailto:sage] Аноним 19/10/22 Срд 19:13:59 #374 №2492001 
>>2479168
>наймет зумеров
После которых всегда приходится переписывать код?
>рефакторинг
Нахуя?
>знания на уровне нынешнего 2курса
В голос - современные выпускники вузов слабее птушников 20летней давности
Обезумевший от эффекта свининга-хрюкера поридж совсем ебанулся. Тебя в принципе даже к мс-офис нельзя подпускать.
Аноним 19/10/22 Срд 19:17:12 #375 №2492004 
>зумеродебил не может прочитать две строчки легаси

>РРРЯЯЯ ДЕДЫ ТУПЫЕ

Пынинское образование. 20 лет. Итоги.
sage[mailto:sage] Аноним 19/10/22 Срд 19:30:32 #376 №2492021 
>>2479003
Ты же имбецил нахуй, имбецил клинический, буквальный, а не просто оскорбление, тебя либо твоя пидорашья мать в детстве йодом не кормила, либо что то другое органическое, у тебя же когнитивные способности как у собаки, тебе не то что с данными нельзя работать - ты бы охранником критические когнитивные ошибки выдавал и тебя выпиздовали бы нахуй на пенсию по инвалидности

Ой блядь. Просто пиздец. Мелкий орк ебаный. Поколение пынявого хуесоса - отличается от предыдущих даже биологически. Вас только в цирке уродов показывать.
Надо валить из этой страны нахуй, тут орочий союз скуфов-собяниномишустиных и йододефицитных пердежей нахуевертил уже столько в любой сфере жизни или общественном институте что точка неспасения пройдена. Системный отказ, раковая опухоль, и любое действие не важно с какими намерениями его теперь только ускорит.
Аноним 19/10/22 Срд 19:34:02 #377 №2492025 
>>2492001
>>2492004
>>2492021
Пошёл нахуй.
sage[mailto:sage] Аноним 19/10/22 Срд 19:38:06 #378 №2492033 
Ебаное мракобесие, антиинтеллектуализм, пикирующий профессионализм, деградация по всем фронтам. Господь, жги.
sage[mailto:sage] Аноним 19/10/22 Срд 19:48:05 #379 №2492040 
Failed state. А ведь могли бы быть норвегией, или на худой конец канадой...
Аноним 19/10/22 Срд 19:50:26 #380 №2492041 
Хули ты поджегся, дегенерат.
Съеби из треда лучше, а не сри
Аноним 20/10/22 Чтв 13:49:04 #381 №2492669 
Учу sql и играюсь с тестовой базой, там есть муз. треки, жанры и тд. (база chinook, но не суть). И решил я составить запрос, что бы получить название жанра и кол-во треков для жанра с наибольшим количеством треков (возможность того, что несколько жанров бутут иметь одинаковое кол-во треков игнорируем). Первая попытка в лоб:
SELECT g.Name, count()
FROM tracks t
JOIN genres g ON t.GenreId = g.GenreId
GROUP BY t.GenreId
ORDER BY count(
) DESC
LIMIT 1;
И оно работает, но потом я решил, что сортировка это обычно медленно (~O(nlogn)), а поиск минимума быстро (O(n)), сделал вторую попытку
SELECT g.Name, max(cnt)
FROM (
SELECT count(*) as cnt, t.GenreId as gid
FROM tracks t
GROUP BY t.GenreId
)
JOIN genres g ON g.GenreId = gid;
И возникла пара вопросов:
1.Гарантируется ли то, что вызове max() остальные столбцы будут принадлежать строке с max значением (ну т.е. максимальное cnt будет 100, а gid не возьмется из другой группы)
2.Есть варианты лучше?
Аноним 20/10/22 Чтв 14:01:37 #382 №2492688 
image.png
Сап аноны! Призываю к треду архитекторов и опытнейших людей по РБД. Я сделал базу данных для интернет магазина книг (знаю что по такой теме вас заебали), оцените качество исполнения, чего не хватает, а чего в излишке. Ну и вопросов своих накидаю
1. Нужны ли триггеры в контексте моего проекта? Если да то каких? Если нет то почему?
2. Знаю jmeter и java+jdbc, думаю оценить работу БД под нагрузкой, хочу удостоверится что схема БД обеспечивает целостность данных. Скажите насколько обосновано мое решение?
3. Думаю для каждого товара давать шестизначный артикул в формате 123456. Но я хз как можно это в постгресе сделать, думаю код генерировать на стороне сервиса а в базе по минимуму держать логику. Насколько тоже это решение обосновано?

Так же прошу анончиков накидать советов.

Целую в пупочек за помощь
Аноним 20/10/22 Чтв 14:08:56 #383 №2492701 
>>2492688
eav catalog
/thread
Аноним 20/10/22 Чтв 14:09:36 #384 №2492702 
>>2492701
нихрена не понял чел
Аноним 22/10/22 Суб 23:24:58 #385 №2495902 
Есть две таблицы в постгресе, связанные внешним ключом. Нужно фильтровать выборку из одной по одному полю из другой. Пробовал и через подзапрос и через джоин, и там и там получается по несколько секунд, если заполнить таблички по 100к записей.
Есть способ сделать это быстрее?
Аноним 22/10/22 Суб 23:49:22 #386 №2495914 
>>2495902
Индексы для этого поля есть?
Аноним 23/10/22 Вск 00:17:22 #387 №2495929 
>>2495914
Нет. Да и смысла в нем нету наверно. Там по сути енум с 5 возможными значениями.
Аноним 23/10/22 Вск 00:41:04 #388 №2495941 
>>2495929
А индекс для внешнего ключа? И фильтруешь ты только по этому полю или ещё каким-то? Не запрашиваешь же ты все записи для одного возможного значения, их же десятки тысяч может быть. Если фильтруешь по другим полям, на них должен быть индекс из нескольких столбцов. Надо смотреть план запроса в EXPLAIN, там не должно быть seq scan по большим таблицам.
Аноним 23/10/22 Вск 01:06:05 #389 №2495949 
>>2495941
Ну я делаю выборку через рекурсивный with. Получаю временную таблицу в которой есть айдишник другой таблицы. Из этой временной таблицы мне нужны сущности, которые определяются одним полем в другой таблице.
Даже если я на внешний ключ изначальной таблицы надену индекс, он никак не будет работать(насколько я понимаю) в выборке, выданной cte.
>Надо смотреть план запроса в EXPLAIN, там не должно быть seq scan по большим таблицам
Ну это понятно, не ясно как. Кстати explain analyze execution time вообще выдает мне 300 секунд.
Аноним 23/10/22 Вск 11:13:05 #390 №2496058 
Помогите, пожалуйста.

Смотрите. Есть PostgreSQL

Есть примерно следующего вида таблица:
ID : int
SerialNumber: TEXT
AppID: int
Port: int
Address: int

Так вот. Что нужно
Нужно чтобы при INSERT'е - AppID, Address - брались из "дырок", либо следующий; а Port - так же из дырок, либо из переданного массива. И чтобы при этом - оно было потокобезопасным. Т.е. можно было сделать 100 инсертов из разных потоков, и оно вставилось.

И я не знаю как сделать чтобы это работало потокобезопасно. Сейчас - костыль на уровне приложения, который ебашит очередь и по этой очереди - добавляет. Но это пиздец как медленно. 1000 записей - добавляются почти минуту. Пиздец же.
Аноним 23/10/22 Вск 14:59:33 #391 №2496198 
>>2496058
https://www.postgresql.org/docs/current/sql-createsequence.html
Зачем тебе дырки заполнять?
Аноним 23/10/22 Вск 16:27:36 #392 №2496292 
Есть в постгресе тип вида:
create type entity_init AS (
id bigint,
items json
)
Где джейсон - массив объектов.
Как джейсон массив из этих типов размотать в набор записей этого вида:
(
id bigint
item json
)
То есть условный массив из 5 типов, в котором 5 сущностей должен превратиться в набор из 25 записей с сохранением референсов.
Аноним 23/10/22 Вск 18:35:26 #393 №2496639 
>>2496198
Ну. Портов всего 65535... Нужно экономить...
Ну и Address с AppID - используются сторонними системами, а они не очень хорошо воспринимают дырки.
Аноним 24/10/22 Пнд 10:08:34 #394 №2497034 
>>2496639
Ну так сделай таблицу на 65к строк и селектом выбирай близжайший свободный порт, а при ошибке вызывай реселект.
Аноним 24/10/22 Пнд 21:59:17 #395 №2497451 
>>2492688
хз схема вроде норм выглядит
Аноним 25/10/22 Втр 13:38:30 #396 №2497716 
>>2424142 (OP)
Есть запрос:

DELETE FROM store WHERE id IN (:IDS_STRING)

Вместо IDS_STRING подставляем строку айдишников - перечисление через запятую. В таблице store несколько десятков миллионов записей. Вопрос, дорогие знатоки: какие подводные если там будет 10.000 айдишников? миллион? 10 миллионов? Какова там будет сложность? Условный постгрес не пережрет все ресурсы по памяти и cpu?
Аноним 25/10/22 Втр 15:29:14 #397 №2497811 
>>2497716
В некоторых СУБД максимальное число элементов в таких списках ограничено, тупо будет ошибка.
Аноним 26/10/22 Срд 07:24:25 #398 №2498301 
>>2497716
Разве IN в постгресе не требует набор строк (которые не string, а row)? У тебя скорее приложуха обосрётся интерполировать строку с 10 миллионов записей, вместе с постгресом.
Аноним 26/10/22 Срд 11:01:42 #399 №2498369 
>>2424142 (OP)
Подскажите какое-нибудь мнемоническое правило, которое позволит запомнить уровни изоляции транзакции и когда какой уровень выбирать при запросе к СУБД.
Аноним 26/10/22 Срд 11:07:17 #400 №2498377 
>>2498369
Всегда выбирать READ COMMITTED.
Аноним 26/10/22 Срд 11:10:42 #401 №2498381 
>>2498377
На собеседованиях постоянно спрашивают все уровни изоляции транзакции, различие между ними и когда какое выбирать, чтобы добиться консистентности и скорости выполнения запросов.
Аноним 26/10/22 Срд 13:55:54 #402 №2498467 
>>2498381
Что еще спрашивают?
comments powered by Disqus