Двач.hk не отвечает.
Вы видите копию треда, сохраненную 30 января 2023 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Универсальный баз данных тред #6 /sql/ 2424142 В конец треда | Веб
Прошлый >>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 для тех, у кого завтра ПЕРВОЕ собеседование
- Анализируем, как работает поиск вконтакте
- И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно.

Поехали!
3 2424206
>>424142 (OP)
Мигрировался в этот тред.
4 2424689
>>424156
не у всех постгрес где есть generate_series для дат
5 2424731
>>424689
Но в этом playground можно все потестить же
Screenshot 2022-06-26 at 17.51.47.png220 Кб, 452x362
6 2424799
>>424156
Бананы, ну что, даже подсказки не будет?
Ебаанииии рёЁт, с кем я на одной борде...
7 2424805
>>424799
Это нетипичная задачка для скл, надо быть ебать знатком, чтобы через жопу извернуться.
Если бы это был какой-то цсв, то решается в десять строчек и можно быстро молотить гигабайты, а тут хуй знает.
8 2424808
>>424805
Можешь молотить построчно из базы, но это хуевое решение, канеш.
9 2425004
>>424156
Ну допустим
https://pastebin.com/cJdcDvye
а чо в постгресе такие ебнные функции работы со временем? Где datediff?
image.png30 Кб, 598x239
10 2425296
Есть такая сущность как Location - она объеденяет в себе коды вот этих 3х таблиц. Как это лучше всего представлять в Базе? Как View?
Это не самостоятельная сущность - полностью зависит от этих трех
11 2425345
https://dbfiddle.uk/?rdbms=postgres_13&fiddle=7a1ef1ab0a09577874a726743ea6f5cb
Как делать условные селекты? Нужно чтобы колонка name в результате была или null если у профиля нет имён, или первое имя профиля.
12 2425812
>>425345
select case when ... then ... else ... end from yourtable
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 юниона, для разных случаев), потом для этих пар нашел непересекающиеся отрезки с минимальной длиной (сгруппировал просто по левой точке, с самой ближней правой точкой).

Ну а имея отрезки уже можно было джойнуть их с периодами и уже агрегацией посчитать суммы, изи.
14 2425864
>>425821
join по периодам + пропорциональный расчёт занчений на пересечении
15 2425868
>>425864
Не понял. Что значит пропорциональный расчет? Можешь кодом?
16 2425943
>>425868
нет, кодом только за деньги
ну смотри если у тебя разные отрезки времени, тебе же надо будет порезать по ним. Например первый 14:00-14:30 второй 14:10-14:20, соответственно пересечение 20 минут, а не 30. Делаешь джоин потом при помощи iif считаешь begin/end
17 2425963
Насколько оптимальное (и безопасно) предпочесть raw SQL запросы методам ORM интефрейса (django ORM)?
18 2425980
>>425963
С ORM надо в деталях знать механизм его работы вплоть до чтения его исходников, читать книги на тысячи страниц, знать про проблемы типа N+1, очень внимательно и осторожно описывать конфиг ORM и все сущности, очень хорошо знать SQL, чтобы смотреть сгенерированные запросы и мочь при их неоптимальности переписать на нативный SQL (примерно в половине случаев).
Вообще, хуй знает, для кого придумали ORM, они не решают проблем, которые на них возложены. Работа с базами данных только усложнилась.
19 2426027
>>425963
Если нравиться быть обсосанным на кодревью, иметь проблемы с миграцией и фейлить тесты безопасности, смело бери raw sql
20 2426059
>>426027
Как тебе ORM с миграциями помогает? Таблицу с айдишниками запросиков, проверяемую на старте, ты можешь и без ORM сделать. А в экранизацию значений можешь даже самый паршивый драйвер/адаптер на %языкнейм%.
21 2426227
>>426059
Это как вебмакакаи, которые выучили модный фреймворкнейм и не знают, как без него что-то сделать.
22 2426247
>>426227
Кабану интересно только чтобы сделать с или без, а как ты сделал интересно только твоей мамке.
23 2426251
>>426247
Долбоёб, к чему ты это высрал? Тут обсуждение технологий, а с кабанами съеби в МВП-тред.
24 2426273
>>426251
А ты в технологиях разбираешься? ORM технологичне, миграции не нужны с ORM, так они на лету генерятся из Entity обычно. ORM не запрещает raw запросы строчить, когда реально нужно.
25 2426308
>>425943
А, типа прям империативно кодом. Не, эт читерство, так можно вообще всё вытянуть в приложение и уже нормальным ЯПом посчитать мб даже эффективнее всего будет, чтобы базу не нагружать кстати. я хочу прям sql'ем, декларативно.
26 2426324
>>425963
Значится, это очень холиварный вопрос.
Концептуально нам как программистам не хочется писать plain sql в бизнес-логике, потому что во первых эта логика засирается всякой sql-специфичной херней (ну там вместо одного логического upsert иногда приходится делать if !select then insert else update), а во вторых, иногда приходится захуяривать всякие промежуточные рантайм кеши и прочую особую логику и когда у тебя sql уже расползся по всему коду, то как-то задекорировать это дело становистя нереально.
Короч, хочется, чтобы бизнес-логика содержала просто действия вида "найди", "укради", "роди", а вся базоспецифичная хуйня тусила отдельно.

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

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

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

А, и да, Hibernate это какое-то монструозное говно, на которое без ужаса смотреть нельзя, если что, то бывают орм попроще и посимпатичнее.
26 2426324
>>425963
Значится, это очень холиварный вопрос.
Концептуально нам как программистам не хочется писать plain sql в бизнес-логике, потому что во первых эта логика засирается всякой sql-специфичной херней (ну там вместо одного логического upsert иногда приходится делать if !select then insert else update), а во вторых, иногда приходится захуяривать всякие промежуточные рантайм кеши и прочую особую логику и когда у тебя sql уже расползся по всему коду, то как-то задекорировать это дело становистя нереально.
Короч, хочется, чтобы бизнес-логика содержала просто действия вида "найди", "укради", "роди", а вся базоспецифичная хуйня тусила отдельно.

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

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

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

А, и да, Hibernate это какое-то монструозное говно, на которое без ужаса смотреть нельзя, если что, то бывают орм попроще и посимпатичнее.
27 2426353
>>426308
причём тут приложение? SQL умет в if.
Просто после джоина у тебя будут отрезки и надо найти их пересечение в рамках строки, это делается через if
если конкретно в постгре нет имплементации можно тоже самое через case сделать
28 2426440
>>425004
Ну ты и пчел.. Какую-то хуйню сделал))
29 2426441
>>425821
Почти как у меня выше
30 2426448
>>425943

> кодом только за деньги


> предлагает неправильное решение


ммм
31 2426532
>>426059
Ну разве орм мне не поможет, если я во время миграции поменяю имя колонки в табличке? Ели рав-скл, то мне придется во всех запросах менять имя колонки.
Или удалю колонку.
32 2426537
>>426532
С raw SQL у тебя есть такое достижение языков программирования, как повторное использование кода. Ты пишешь репозиторий, который знает, как работать с этой таблицей, а во всех остальных местах тупо этот репозиторий используешь, инкапсулировав уровень доступа к базе данных, и если захотел переименовать/удалить столбец, то только в этом репозитории и переименовываешь/удаляешь.
изображение.png82 Кб, 225x225
33 2426545
>>426448
кабан кабаныч, а никто и не обещал что будет правильно
34 2426553
>>426440
Да, действительно, не учёл что может быть больше 1 отрезка подряд, тогда использовать row_number() вместо lead, и в конец ещё подсчёт суммы.
35 2426560
>>426537
Ну да. Но с орм мне придется поменять только модельку и написать чендж сет, а с рав-скл минимум поменять половину методов в репошке.
А если у меня есть методы, делающие селекты из нескольких табличек, то и в других репошках тоже придется менять поля в рав-скл запросах.
Мы так то билдером запросов пользуемся(жук) с генерацией модельки, который попроще орм(хибера), но все таки не совсем рав скл. И вместо переписывания скл-скриптов надо перегенерить модельку, а иде уже сама подчеркнет, где нужно поменять репошку. Но есть вопросы о хранениии сгенеренного кода. И еще пару мелочей, уже не помню каких.
36 2426585
>>426553
>>426545
Решение уже нашли, постить не буду, но то что вы описываете - не ок
37 2426622
Как защитить Бд от взлома,базовые правила
38 2426625
>>426585
То есть не нашли.
39 2426630
>>426622
- Параметры всех запросов экранировать, т.е. вместо конкатенации строк везде использовать SqlCommand.Prepare(), PreparedStatement и подобное.
- Включить шифрование соединения с БД.
- Если приложение и логика у тебя в БД, и пользователи подключаются к ней напрямую, то создавать для каждого юзера по схеме, создавать публичные синонимы для хранимых процедур, выдавать гранты, пермишены, настраивать ACL.
- На случай, если уж взломали, строить архитектуру так, чтобы ущерб был минимальным. Пароли хешировать, не хранить все данные в одном месте, вынося данные в другие системы и т.д.
40 2426632
>>426630

>пользователи подключаются к ней напрямую,


это как без сервера-прокладки?
41 2426640
>>426632
Да, это называется двухзвенная архитектура. Было популярно в двеяностых-начале нулевых, когда языки для серверной разработки были в зачаточном состоянии, масштабные энтерпрайзные проекты не тянули, так что удобнее всего было вести разработку бизнес-логики прямо в базе данных. Тогда и клиенты были в основном десктопными. Сейчас в основном легаси.
42 2426704
>>426585
Что за манеквры ёбана?
Задача сводится к нахождению непрерывных временных отрезков, сделать агрегацию по ним дело техники. Эта задача решается через row_number

https://stackoverflow.com/questions/20402089/detect-consecutive-dates-ranges-using-sql
20160205100222fb8a394c357a490b08d5fc6b34a4c585.jpg65 Кб, 604x468
43 2426705
>>426622
Пользоваться ORM, а не raw sql
44 2426707
>>426705
Я ждал этого!
45 2426747
46 2426892
>>426705

>raw sql


что это?
47 2427072
>>426892
Это когда пишешь SQL-запросы сам вместо того, чтобы за тебя это делал волшебный зумерский фреймворк.
48 2427452
>>427072
Ты еще расскажи ему про разные типы outer джойнов.
49 2427531
>>427452

> джойнов


Хуйня без задач, есть WHERE table1.id = table2.table1_id.
50 2427534
>>427531
тян_прыскающая_газировкой.jpg
51 2427621
>>427534
Не пользуюсь джойнами, всё через where, код намного понятнее, чем ебля с FULL OUTER RIGHT INNER CROSS JOIN, но брат умер.
52 2427645
>>427621
Как ты блядь не пользуешься джоинами а только вэрэ? Ты не пользуешься ногами, а только ботинками? Как ты соединишь таблицы без джоина? Соединение таблиц это и есть джоин. Даже если пишешь from a, b where a.id = b.a_id
53 2427670
>>427645
Не использую синтаксис джойнов, значит, не пользуюсь джойнами. Меня не ебёт, что СУБД у себя внутри построит почти одинаковый план запроса, что и с джойном, и будет выполнять его через один и тот же механизм. Я же не говорю, что пользуюсь регистрами и прерываниями, хотя внутри тоже через них всё работает. Потому что важна только семантика языка запросов.
54 2427682
>>427645
подзапрос же

мимо
55 2427829
в чём различие между window и подзапросами? Зачем нужны эти окна, если есть подзапросы?
56 2427830
>>427829
Меньше кода писать в некоторых случаях.
57 2427833
>>427682
Дядя Петя, ты дурак?
58 2427835
>>427830
и всё? Значит могу на них забить?
59 2427836
>>427835
Можешь, но однажды ты наткнёшься на какой-нибудь сломавшийся отчёт, написанный кем-то другим с активным использованием оконных функций, и тогда придётся учить. Да там и учить почти нечего.
60 2428187
Есть целый набор условий (6 штук), в некой таблице A мы заполняем поле mode исходя из выполнения этих условий (от 0 до 5 соответственно). Это как делать? Через CASE? Там каждое условие ппц объемное и включает в себя подзапросы к другим таблицам121734
61 2428191
>>428187
Не говоря уже о том, что после выполнения первого же условия мы должны забить хуй на остальные и заполнить поле mode нужной цифрой, CASE это обеспечивает? Или он всегда исполняет все ветки условий?
62 2428284
>>428191
---CASE это обеспечивает?---
Должен.

---Или он всегда исполняет все ветки условий?---
Но зачем спрашивать про специфику работы какой-то языковой конструкции на двачах, ищи в документации по СУБД
63 2428784
Пацаны, вытаскиваю из таблица строку - список параметров, надо в следующем query сделать проверку по типу:

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

Строку "alpha, beta, zeta" я как раз и вытащил, но бля, если я просто вставлю ее через питоновское форматирование строк в мое следующее query то может быть потенциальная инъекция (и тулза bandit не даст гитлаб пайплайну пройти), но если я буду пытаться вставить ее через обычные параметры и ? то постгря неправильно меня поймет - она будет видеть одну строку, но на самом-то деле это не единая строка и 3 разных параметра
64 2428818
>>428784
поищи в документации, можно ли вставлять массивы через твою тулзу и как это делать
65 2429039
>>424142 (OP)
Есть ли способ обновить строчки в таблице по GROUP BY?
Вот мы сгруппировали строки по 2м колонкам: GROUP BY item, address - как внутри каждой такой группы обновить поле start_date, установив максимальную среди всей группы? Чет вроде должно быть просто, select запрос и так ясно как писать, но как из него сделать update блэт?
66 2429068
>>429039
тебе надо найти записи с максимальным start_date и заапдейтить их?
1608621683364.jpg16 Кб, 479x222
67 2429102
>>429039
Думаю как-то так
68 2429522
Парни, вопрос.
Работаю в open panel server, запускаю локальный сервак
При работе с формой поиска бд выдает parse error, смотрю логи апача, а там обычная 408.
Вы уже наверное поняли про что идет речь лол. Буквально месяц назад форма работала. В чем блядь проблема? В какую сторону копать?
69 2429680
Уважаемые sql-господа, есть ли какой-то быстрый способ немного изменить все значения в столбце? Например, там лежали значения: qwerty, Asdf, lk; надо получить: [qwerty], [Asdf], [lk].
70 2429685
>>429680
update table set value='['||value||']'
71 2429690
>>429685
Благодарю
72 2429740
Часто вижу что говорят "создать выборку Т из джойнов бла-бла" а потом с этой выборкой Т провести какие-то манипуляции, например сджойнить ее с чем-нибудь еще и отсортировать, как это в рамках sql решается?
73 2429788
>>429740
Подзапрос? Или ты мудово формулируешь задачу.
74 2429808
>>429788
Вообще подзапрос, но он может несколько раз переиспользоваться.
75 2429822
>>429522
Помогите пожалуйста бляди..
76 2429824
>>429822
Хуй сосешь?
77 2429826
>>429824
И бочку делаю тоже.
78 2429829
>>429808
Так хранимая процедура же?
79 2429838
>>429808
Вроде по русски это называется представление, with гугли.
80 2429850
>>429522
Копать в сторону пхп-треда.
81 2429878
>>429740
табличные выражения
82 2430018
>>429850
Типа дело не в базе данных? Спасибо за ответ в любом случае, братишка.
83 2430055
>>430018
Может и в базе данных, но там сложно получить непонятные ошибки, СУБД либо работает, либо нет. Скорее что-то не так с конфигурацией твоего open panel server, про это здесь никто не подскажет, это проблемы, специфичные для языков программирования, на которых работает приложение, использующее БД,
84 2430151
>>430055
Да в том и прикол, что на сайте все работало, а потом раз и все, я просто уже не понимаю, где копать, потому что сайт не мой, движок не определить из за клаудфаер защиты, это точно не настройка open panel, это словно магическим образом вываливающаяся ошибка, я настолько нуб что даже не знаю как прогнать форму на ошибки, тупо как посмотреть где она, есть какие то логи апача, но это не то все, мб это специальная ошибка создателей, как ковырять, в каком месте хз. Ну вот допустим как прогнать конкретно форму сайта на ошибки?
85 2430592
Есть некая "промежуточная" таблица в которой временно храню данные, совершаю над ними манипуляции а потом стираю ее (TRUNCATE).
Проблема в том что после стирания последовательность для айдишников продолжает идти, то есть когда пишем в чистую таблицу новые данные, у нас id начинается не с 1 а с того числа, на котором закончилось. Как это фиксить?
86 2430618
>>430592
id берутся из sequence? Какая база, какой тип поля, кто заполняет id?
87 2430655
>>430592
делвй drop&create
88 2430702
>>430618
Да из sequence, обыкновенный integer из постгри
89 2430726
>>430702
значит секъюенс тоже апдейть
90 2432171
>>430592

>Как это фиксить?


Прочитать доку к truncate.
91 2432175
>>430592
После транкейта:
ALTER SEQUENCE tvoy_sekjuens RESTART WITH 1;
92 2432176
>>432175
Это можно в самом трункейте указать.
93 2432178
>>432176
Ну допустим.
TRUNCATE promejutochnaya_tablitsa RESTART IDENTITY CASCADE;

Гуглится за 10 секунд блять, хз, зачем он вообще задаёт вопрос и ждёт ответа несколько дней.
16580812830621.jpg38 Кб, 511x367
94 2434069
Посоветуйте, пожалуйста, книгу про MS SQL где подробно объясняются индексы и уровни изоляции.
95 2434169
А есть книга которая объясняет проще чем дейт введение в системы баз данных?
Мимо нуб
1576483302556.jpg26 Кб, 300x400
96 2434188
97 2434697
Как UNION под капотом работает? Просто склеивает результаты разных запросов вместе? Запросы по-прежнему отдельно отправляются?

В одном месте мы селектили данные из таблицы на основании пар колонок item и type а потом отдельно обрабатывали каждую такую группу данных (штук 30-40 таких групп обычно). Подумал что можно выполнить 1 sql запрос и объединить все с помощью Union. Но на локальных тестах не увидел какого-то подъема в производительности. union бесполезен для таких кейсов что ли?
98 2434698
>>434697
База - постгрес
99 2434714
>>434697
он склеивает только результаты с одинаковым типом и количеством колонок.
Т.е. должны быть селекты с одинаковым типом результата
100 2434720
>>434714
Ну да, они с одинаковым, ничего не упало. Просто какого-то прироста не заметил. Можно будет еще проверить на тестовой базе 10 миллиона строк но походу результат будет тот же
101 2434730
>>434697
Вообще мы тут с пацанами пытались оптимизировать питоновский celery pipeline, там внутри селери-тасков дергается постгря. Думали если уж union не помогает ускориться то можно не каждый раз вытягивать данные из таблицы а 1 раз целиком заселектить всю таблицу и передать эти данные в каждый из тасков, чтобы там уже данные отфильтровать. Но случился нежданчик с брокером - Реббитом:

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

То есть мы попытались 2 Гига засунуть в 1 месседж Реббита. И я вот думаю - даже если разобьем этот месседж на чанки по 100 Мб скажем, тут же все равно больно дохера памяти используется, не? Кто работал с Реббитом глубоко? Это вообще норм идея передавать столько данных по нему или это хуйня ебаная и так никто не делает?
102 2434761
>>434730
Оверхед на сериализацию/десериализацию, не?
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+ тоже, а как отсеять тех, кто сдал не все предметы?
В общем помогите плез кто чем может)
104 2434843
>>434802
сколько заплатишь?
105 2434960
>>434843
Сколько стоит твое очко?
106 2435418
>>424142 (OP)

Есть ли какая-то IDE для MySQL с урезанным функционалом для новичков чтобы могла наглядно строить таблички или все эти связи между табличками как Воркбенч? Может есть какой-то хидден гем в вашей области для новичков?
107 2435475
>>434802
Найди студентов которые не завалили ни одного предмета.
108 2435476
>>435418
dbeaver умеет рисовать таблички со связями
109 2435619
Немного не понимаю, а проверить пока никак:

Вот у меня есть sqlite3 таблица, я добавляю туда строку через INSERT INTO и закрываю действие через .commit()
Но сейчас мне надо добавить строку, и сразу же ее обновить через UPDATE. Нужно ли делать коммит после первого действия?
110 2435669
>>435619

> добавить строку, и сразу же ее обновить через UPDATE.


почему сразу нельзя записать то что нужно, шиз
111 2435682
Почему во время UPDATE постгря удалеят строку а потом делает INSERT вне зависимости от обновляемых полей? Они ебанутые што ле?
112 2435714
>>435682
Сделано это для обеспечения изоляции параллельных транзакций. К примеру, когда ты обновляешь строку в своей транзакции, другие транзакции так же могут работать с ней. И для них как раз и нужно сохранить старую версию. И да, строка во время обновления со страницы физически не удаляется. Это произойдет позже, во время автоочистки.
113 2435763
Есть subquery из которого нужно сделать update. Проблема в том что в этом subquery могут дублировать данные из-за большого количества join-ов а у меня должна быть только 1 строка с выбранной парой ключей item - type

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

Как же быть?
114 2435868
>>430592
Тут обоссанцы одни, ничего не шарят. Папка поможет:

TRUNCATE TABLE table_name RESTART IDENTITY
115 2436119
>>435763
юзай ровнумбер ебана, ты чо как хлебушек
116 2436915
Поясните по компрессии в монге. Почему в моих тестах включение snappy на стороне клиента локально ухудшает скорость чтения на 7%, а с удаленным сервером никак
не влияет на ситуацию. Уменьшение объема передаваемых по сети данных должно ведь ускорять RPS, неужели распаковка съедает весь выигрыш?

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

Коллекция пожата в snappy, ~100k записей, клиент pymongo, тесты гонял по десятку итераций с усреднением результата.
117 2436946
Чтобы было меньше нагрузки на insert/update т.к. у нас часто идут эти операции и в таблицах от миллиона до нескольких десятков миллионов строк мы решили избавиться от Foreign Key везде в нашей Постгре. Насколько это здраво? Там будет какое-то значимое улучшение в производительности?
118 2436951
>>436946
в любом случае надо начать с замеров и мониторинга. Сделать копию базы, убрать там форенкеи, и посмотреть на мониторинг, что изменится
119 2436974
Здароу. Щас понял что на собесах по бекенду много контор дрочит по БДшкам. Как будто блять кто-то до сих пор не хуярит своё говно через ORM. Ну да ладно. В общем, видимо пришло и моё время уже наконец по нормальному изучить эту хуйню. Кто что посоветует почитать? В частности чтобы там было за профилировку запросов, планы выполнения, индексы, нормальные формы - и всю хуйню что чаще всего спрашивают
120 2436986
>>436974

> Как будто блять кто-то до сих пор не хуярит своё говно через ORM.


Толсто.
121 2436989
>>436986
На своих проектах довольно редко юзаем чистоганом. Только если какаято специфичная хуйня, которую ОРМ осилить не может. Как правило это если он генерит какуюто медленную поеботу, или же какой нибудь долбоеб решил динамические свойства объектов реализовывать через добавление колоночек на лету
image.png214 Кб, 1561x1071
122 2437009
>>436974

>Как будто блять кто-то до сих пор не хуярит своё говно через ORM


Посмотрел бы на тебя как ты бы вот это по маняОРМке писал

да, вверху еще кондишны в форматировании, строк на 40
124 2437026
>>437020
О, спасибо!
image.png182 Кб, 1801x832
125 2437032
>>437009
Еще мякота
126 2437037
>>437009
>>437032
Можно переписать с SQL на обычный язык, чтобы всё тормозило, и делать за СУБД её работу.
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;

вижу в этом проявление глубокой несправедливости
128 2437202
>>436974
ОРМы нужны для простой вещи - загрузить строку в виде объедка.
Те кто пытается надрочить там обжект квери языки, это долбоёбы с патерном головного мозга.
129 2437216
>>436989
ОРМ генерит говно процентов в 50% случаев. Чтобы сдать работу заказчику - хватает. А вот что начинается потом - это другой разговор
distinctus.png163 Кб, 2675x1838
130 2437256
Чет не въехал, а как именно DISTINCT определяет уникальные значения? Вот я во всеми известном ресурсе сделал select с distinct на 2 поля - страна и город, но там все равно попадают одинаковые страны и города. как оно работает?

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_no_distinct
dist.png139 Кб, 2045x1589
131 2437260
>>437256
Бля, скрин проебался
132 2437268
>>437256
Вся строка - ключ.
А иначе подумой, что бы ты получил, если бы остались только уникальные страны и уникальные города? Это были бы записи, не имеющие отношения к исходным данным в бд.
133 2437287
>>436974

>Как будто блять кто-то до сих пор не хуярит своё говно через ORM.


Если шлепаешь CRUDы, то да. Как только логика чуть сложнее, то пиздец ты под эту ебучую орм начинаешь подгонять необходимый sql запрос, в конечном итоге тебе нужно одновременно знать и sql и как при помощи orm накостылить этот запрос. Что в рельсах, что в ларавеле бесило этой хуйней заниматься, а писать чистый запрос не по феншую.
Уже давно пишу чистые запросы и это вообще кайф, особенно когда поднимешь локальную базу и настроишь всё в ide там почти все автокомплитом высекается. И можно уже по необходимости для каждого запроса свои структуры накидать, используя только нужные столбцы
134 2437289
Как же неохота работать. Как себя наградить, чтобы часочек сегодня пописать код? Я уже и подрочил и вкусненькое поел.
Если не поработаю завтра будет стремно перед пмом отчитываться. Хотя тасочка до пятницы. Но хочется сказать ему, что там немного осталось, когда уже все давно готово.
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

Кто-нибудь читал что-то из этого?
136 2437930
>>437924
Грубер это классека, была такая ещё совковая методичка из ранних 90-х, лол. Но там sql89, или это какое-то обновленное издание?
Местечковых хуев не знаю.
137 2437945
>>437930
Понял-принял.
138 2437959
>>437924
Новикова читал. Вполне неплохо. Для того, чтобы втянуться самое то. В отличие от других пособий, кроме того как пользоваться, объясняет ещё почему так сделано и как оно работает. Упор в книге идёт на постгрю. Но нужно искать второе издание. В первом только, так сказать, ознакомительная часть. Во втором же, появилась часть с деталями. Единственное, это все же учебное пособие и требует какой-никакой базы. К примеру, главу с формализацией аномалий конкурентного доступа и уровней изоляции транзакций без мат. базы читать и осознавать будет тяженько.
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 в моём кейсе это что-то типа индекса массива, а не индекс таблицы.
140 2438013
>>438009
1. Используешь питон
2. Генерируешь строку с рандомным числом VALUES
3. Вставляешь
141 2438025
>>438013
Мне нужна SQL-онли генерация, для примера на фидле.
142 2438026
143 2438079
>>438026
Посмотри блять на ссылку и скажи, куда ты там собрался устанавливать вот это:

> To install the dbms_random package, you need to run 4 scripts when connected as the user SYS or INTERNAL



В постгресе есть бюлтины для этого, вот только все инструкции или на уровне хэлловорлдов с простыми селектами, или вставляют значение в таблицу.
144 2439073
>>434188
>>437959

Я правильно понял, что одной этой книги хватит чтобы стать крепким джуном?
145 2439093
>>439073
Вялым джуном.
146 2439272
>>439093
А как вялого джуна довести до эрегированного состояния?
147 2439705
Как в запросе сделать проверку на наличие двух и более записей с идущими подряд датами?
Типа 2022-08-15, 2022-08-16, 2022-08-21 - берём все, а 2022-08-15, 2022-08-17, 2022-08-19 - нахуй.
Можно ли так вообще или надо в коде проверять это?
148 2439739
>>439705
Я бы сделал lead, datediff и посмотрел есть ли где отличные от 1
149 2440107
Двач, поясни за Consistency. Я читал все эти примеры про согласованность данных, но нахуя эта буква в аббривеатуре ACID, если согласованность прямо вытекает из бизнес логики приложения и атомарности транзакций? Как так получается, что в каждом учебнике пишут, что ACID - набор требований к транзакциям, но согласованность данных это во-первых зависит от бизнес логики, а во-вторых вытекает из Atomicity?
150 2440122
>>439272
Дать ему пошурудить в твоей дырявой базе данных, проникнуть в его оконную функцию. Пошалить с его табличным выражением. Изолировать свою транзакцию на 3/4 в его сессии.
151 2440127
>>440107
не вытекает.
Представь что серверов несколько или ты в любой момент выдергиваешь шнур и выдавливаешь стекло компьютера.
152 2440132
>>440127

> Представь что серверов несколько или ты в любой момент выдергиваешь шнур и выдавливаешь стекло компьютера.


И транзакция откатится в соответствии с atomicity, придя, как следствие, к consistency.
153 2442741
Блэ, в ТЗ которое читаю указано:
"Выполнить поиск по соответствию полей (merge): S.item = P.item; S.start = P.start"

Только вот это постгрес и никакого merge (в версии 13) тут нет. Что блэт такое "поиск по соответствию полей"? Нихрена не гуглится
154 2443993
>>442741
upsert
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' вошла первой, и ее ответ был бы первым
223.png83 Кб, 554x355
156 2444766
Сап аноны, говнокодил на разных диалектах SQL, теперь надо перекатится на постгрес, он местами довольно сильно отличается, как быстро перекатится? Что почиткать\посмотреть, с учётом того, что все конструкции sql я знаю?
157 2444768
>>444766
Какими местами? DDL/DML учится за день, а если у тебя там хранимки, быстро никак не перекатишься.
158 2444781
>>444768
Да хоронимки
159 2445091
>>443993
Тащемта upsert производится по конфликту constrain t. merge работает по другому, он глядит если строка не сметчилась то тогда ее вставляет. Тут надо отправлять 2 запроса - update from select (с inner join) и insert from select (с left join чтобы спалить строки которые не сджойнились)
изображение.png104 Кб, 1368x945
160 2445356
>>445091
Нет, сначала делается матч апдейта, если не прошёл инсерт.
161 2445360
>>445356
Это что за диалект?
162 2445446
>>445360
mssql, там нет insert ignore

а ваш этот мерж говно багованое
163 2445760
>>444706
Ты типа хочешь чтобы если в mycolum было что-то не из твоего массива поиска, то показывалась пустая строка? Захера?
164 2445762
>>439705
"2022-08-15, 2022-08-16, 2022-08-21 - берём все"
Имелось в виду "2022-08-15, 2022-08-16, 2022-08-17 - берём все"?
Иначе смысла не имеет.
165 2445763
>>445446
Ну а вверху постгрес так что твое решение интересно только с академической точки зрения
166 2446523
>>445763
Ну алгоритм тот же самый. Вопрос был про мерж, предложена мною конструкция повторяет мехнизм работы мержа, и может быть использована в постгрес. Конкретизирую мы не используем insert ignore или другую подобную конструкцию.
41243220405e76b3834c8o.jpg9,2 Мб, 4641x3481
167 2447211
Котаны, подскажите хорошую современную книгу по теории БД. По работе я постоянно работаю с базами данных, и порой коллеги оперируют некоторыми терминали, которые я не понимаю: например такими как "нормальная форма", write-ahead logging и прочими. Приходится это всё гуглить по отдельности. Хочу получить системные знания. Желательно чтобы эта книга или курс лекций были не огромными и не содержали в себе слишком глубокого погружения в практические аспекты использования баз данных, как например изучение языка запросов, но содержали знания о разных типах БД: не только реляционных, но и о колончатых, графовых, time-series, распределенных и прочих.
168 2447252
>>447211
а хуй знает. пора бы привыкнуть что книг ориентированных точно на тебя нет.

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

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

вот еще что я хочу прочитать в ближайшие годы:
Daniel_Nichter_Efficient_MySQL_Performance_Best_Practices_and_Techniques.epub
"Database tuning principles 2002 .pdf" (старинная, конечно, но меня привлекают книги где чуваки толкают теорию, а не т.н. бросаенс)
169 2447261
>>447252
Спасибо за наводку на Дейта, погляжу. Честно говоря, не хочется слишком много внимания уделять реляционной модели. У нас на работе такие БД в меньшинстве.
170 2447265
>>447261
всмысли, наводку?
ты должен Дейта как просто по-дефолту. первую книгу, красную.
Но у него очень скучный язык.

Во всяком случае, вопросы о нормальных формах она закроет исчерпывающим образом.
171 2448566
>>424142 (OP)
Как научиться правильно выбирать уровень изоляции транзакции? Ну так, чтобы не наломать дров.
172 2448592
>>448566
ВСЕГДА использовать READ COMMITED, при необходимости с блокировками.
173 2448599
>>448592
Какие книги почитать по этой теме?
174 2449122
>>424142 (OP)
Господа, с высоты вашего опыта подскажите литературу по MS Sql для сис админа. Решил слегка апнутся в знаниях, но даже не совсем понимаю, что требуется от админа в плане баз данных, кроме как бэкапить их. В общем нужна книга которая затронет большую часть функционала именно администрирования БД.
175 2449807
>>447211
Silberschatz - Database Systems Concepts
176 2449858
Суп, двощ. У меня элементарный вопрос: хочу прочекать архив сообщений от ICQ хранящийся в формате qdb, но есть одна проблема - собственно, колонка, в которой находится непосредственно сообщение, заявлена с какого-то хуя то ли как CHAR то ли VARCHAR и, соответственно, обрезается на 255 сабжей. При этом, я точно помню, что в клиенте такой хуйни не было, т.е. дата в файле не должна быть проебана? Почему так и что можно поделать?
Сразу оговорюсь, что я ни разу не кодер и не оператор баз данных, а хуй простой; скл вчера впервые скачал в виде плагина для лисы и только знаю 3.5 команды для вывода и сортировки инфы.
177 2449955
>>449858
Потому-что неправильно задан тип данных. Чтоб новые данные не обрезались поставь тип данных text. Что обрезалось, уже проёбано.
178 2450176
Сап. Есть желание вкатиться в биг дату, сколько нужно времени чтобы освоить базу с почти 0? по вашим ощущениям примерно
179 2450235
>>450176
Шо е бiг дата? Какой набор инструментов ты подразумеваешь? База SQL учится за 2 недели если сильно хуй не пинать и не быть дауном, если одно из двух то месяц, если оба то как повезёт.
180 2450258
>>450235
Ему ещё петухон с пандасом учить.
181 2450262
>>450235
зная только SQL можно ли найти РАБоту? Какой минимальный габор программ нужно знать? Просто везде пишут прям про вообще дохуя какое кол-во знаний, вплоть до бизнес процессов. Так ли это, действительно ли надо 2 года дрочить, чтоб стать дата сайнтистом (или кем нить там бля хотя б)?
182 2450268
>>450262
Ну смотри, я так сам устраивался и кореша своего устроил: учишь тупо SQL хотя бы чтобы left/right джоины нормально понимал ну и там группировки, оконные функции даже не обязательно и пиздуешь устраиваться в техподдержку Л2, не на телефон а инциденты разбирать, там платат по хуйне, но с годом опыта там уже можно качать права на аналитика 100к+ рекорд моего кореша за 6 месяцев на 140к, он он на двух разных техподдержках успел поработать перед тем как в аналитику укатиться. Предметная область это конечно плюс как и всякие UML/BPMN, но можно и без них, по сути найти чела который шарит и за финтех и при этом кнопки мыши не путает тяжело.
183 2450279
>>450268
Хммм, спасибо! Полезно было услышать
184 2450406
>>449955
А как тогда клиент читал эти данные, если они уже были заданы таким образом? Сам-то я ничего не менял.
Может ли такое быть, что тип данных поменялся от одного факта открытия базы в сторонней программе?
185 2450536
>>450406
Щас клиент так же может читать?
186 2450569
>>450536
Так щас клиент запустить нельзя уже. Там вход через авторизацию на серваке, который много лет назад закрыли и всю инфу потерли. Новый клиент старые учетки не поддерживает.
187 2450614
Кто нибудь пользуется тарантулом?
111.png87 Кб, 970x685
188 2450718
Это база.
189 2450733
>>450718
Есть какое-то странное соглашение, что М - 1, а Ж - 0. Но это для пола, гендер должен быть строкой, VARCHAR2, а лучше BLOB.
190 2450744
>>450733
Так о чем и речь, что сразу видно, что курс (и эту пдфку на скрине) писала женщина из универа возрастом в 40-45 лет. Современный поридж в своем курсе про М и Ж в bool уже вряд ли напишет.
Куда дальше развиваться? 191 2450766
Здравия /
Сейчас работаю на заводу со стеком Delphi + SQL. Создаю автоматические отчёты. Это моя первая работа.
Практически дочитал Книгу "Изучаем SQL. 2021. Алан Болье." одна глава осталась.
Собственно вопрос. Какие есть ветки прокачки? Куда дальше можно развиваться? Посмотрел объявление с своем городе есть позиции SQL разработчика и Разработчика БД. В основном нужны знания PostgreSQL. В книге упоминалась Big Data, тоже интересно. Есть ещё Аналитика данных, что вроде про SQL и нейронки. В общем, что думаешь анон?
192 2450952
>>450766
бежать.
193 2451047
>>445760
Ну я например загрузил жсон с пачкой каких-то значений.
Для каждой надо попробовать найти запись по какому-то полю в базе, если нашлось сделать что-то одно, если нет что-то другое. Если по одной долго, если пачкой запрашивать, то непонятно по какому значению что-то нашлось а что-то нет. Конечно можно в коде джоинить или как я в итоге сделал - отправлять батч из n селектов, но интересно можно ли одним запросом как-то так запросить, и еще обязательно без хоронимок.
194 2451140
>>449807
Благодарю!
195 2451458
Здравствуйте. Помогите пожалуйста с выбором СУБД. Сейчас на начальном этапе обучения, поэтому встал выбор между Oracle и PostgreSQL. Хотелось бы, чтобы в дальнейшем одного знания СУБД хватило для поиска работы. То бишь базовый минимум, без особого требования.
196 2451467
>>451458
Для базового минимума хватит и mysql, но он нахуй никому не всрался в 2022.
Учи постгрес, это сейчас дефолтная СУБД, к тому же достаточно навороченная хоть для энтерпрайза. При необходимости пересесть на оракл легко переучишься.
197 2451588
>>450744
знаешь различие между sex и gender?
198 2451672
>>451467
Большое спасибо.
199 2452102
Как в постгресе обновить большое количество строк в таблице если у каждой строки свое значение?

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

Обновляем все столбцы где age < 18 указанные значением. Но что если у нас куча разных строк в каждой из которых свое уникальное значение name которым надо обновить строку с конкретным айдишником? Шо делать?
200 2452107
>>452102
Если через питон и алхимия например то решается обычным итеративным подходом:

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к? А миллион? Они ж никогда не выполнятся.
201 2452121
>>452102
insert on duplicate update и вставляешь дохуя столбцов за раз как при обычном большом инсерте.
202 2452126
>>452121
А, в постгресе по-другому.
https://stackoverflow.com/a/1109198
IMG20220901180209.jpg51 Кб, 707x623
203 2452131
Помогите с задачей
Нужно найти и вывести пропуски ровно в одно число с помощью джоина и фильтрации, решение при помощи оконной функции не подходит
204 2452245
>>452121
Ещё из вариантов - создаёшь временную таблицу, инсертишт в нее, а потом:
UPDATE target_table
SET value1 = tmp.Value1, value2 = tmp.value2
FROM temp_table tmp
WHERE target_table.id = tmp.id;
205 2452280
>>452131
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
206 2452347
а в чем проблема PostgreSQL, по факту ведь отличается от объемов проекта, если большой - MySQL, малый-средний - PostgreSQL?
207 2452360
>>452347
Так толсто, что аж толсто...
208 2452362
>>452347
Похуй, что толсто, но постгрес подходит для любых объёмов проекта, хоть пет с 5 таблицами, хоть энтерпрайзный легаси монолит с 3000 таблицами и миллионами записей.
209 2452367
Если мне нужно поле votes для модели, правильно ли будет сделать votes_up = int
votes_down = int

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

{
"votes_up": 325,
"votes_down": 89
}
210 2452371
>>452362
>>452360
мне просто интересно, почему его хейтят.
на сколько известно, он мало чем отличается от MySQL
211 2452397
>>452371
Кто хейтит? Негатив в сторону постгреса слышно только от NoSQL-шизиков, но они ненавидят одинаково все РСУБД, что постгрес, что мускл, что оракл.
212 2452398
>>452371
еще толще
213 2452424
>>452371
Его хейтят только всякие макаки-веб мастера, ибо сложна, вакуум какой непонятный тюнить надо. Да и другие настроечки тоже неплохо бы покрутить, чтоб производительность лучше была.
214 2452561
>>452367
Это смотря какие у голосовалки требования, но обычно такая логика реализуется дополнительными таблицами с внешними ключами.
215 2452683
>>452672 (Del)
План запроса смотрел? Индексы на все столбцы, по которым идёт join есть?
image.png37 Кб, 1519x300
216 2452692
>>452683
Это первое что я сделал. Индексы расставлены. Но эксплейн не о чем не сказал кроме 958 rows в связующей таблице. И у меня еще 5.7 мускул а там нет доп. инструментов для анализа как в 8
217 2452697
>>452245
Не нужны никакие временные таблицы если используешь 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;
218 2452709
>>424142 (OP)

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

Чой-та я застрял с Berkeley DB, но это наверное с сишном треде надо интересоваться. Да, точно, не буду вам ебать мозги с вопросами о программировании. Но раз уж зашёл сюда, то вот интересно - есть или нет аналог схемы в базах Berkeley DB? Думаю что нет, но может быть ошибаюсь?
219 2452714
>>452697
Ну так я писал про вариант, когда у тебя данные для обновления только на клиентской стороне есть. И их много. Вот в такой ситуации мы обычно создаём временную таблицу, заливаем ее через COPY FROM stdin и уже на стороне бд обновляем из нее через UPDATE FROM.
220 2453069
Какие команды и что чаще всего вы используете для работы? Я сейчас видео смотрю и пока только самая база идёт, ну и не хотелось бы тратить время на запоминание вещей, который кроме как в теории не пригодятся.
123.jpg127 Кб, 406x600
221 2453125
>>453069
Чаще всего командую джуну работать за меня
изображение.png11 Кб, 389x226
222 2453140
Почему не работает? Должно же работать. Вот тут работает, а у меня нет.
https://youtu.be/8h7JGr9loFo
223 2453145
>>453140
у тебя не та бд выбрана валенок либо скобки поставь
224 2453153
>>453140
SELECTЪ надо.
Я хуею.
image.png23 Кб, 990x162
225 2453156
Что с sql-ex не так? Почему это incorrect? Почему большая часть решений которые возвращают тот результат, который должен быть - неправильные?
226 2453158
>>453140
Вроде кириллические названия таблиц надо в "кавычках" указывать.
>>453156
Скорее всего ему уникальные значения нужны, добавь distinct.
227 2456342
Возможно ли как-то динамически обновлять БД на основе входящих данных?
Сейчас я получаю данные из гугл таблиц, читаю и записываю в базу. Строки могут удаляться и добавлять.
Я пока додумался только до того, чтобы дропать таблицу каждый раз, когда приходят новые данные
228 2456376
>>456342
merge или его аналоги если ты о данных.
Динамический SQLне лезь дибил если ты о таблицах
229 2457088
Хочу написать галерею с поддержкой тегов, как на бурах вроде yande.re Какую бд для этого дела выбрать?
230 2457109
>>457088
Любую задачу можно решить через постгрес.
231 2457115
>>457088
Любую, это схема one-to-many.
232 2457280
Парни, нубский вопрос.

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

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

А как это же самое делать при помощи REGEXP?
233 2457321
>>456376
Я забил хуй и решил просто перезаписывать каждый раз таблицу
234 2457345
>>457280

> title LIKE "П%" OR title LIKE '%а'


title LIKE 'П%а'

> REGEXP


Для оракла: SELECT title FROM titles WHERE REGEXP_LIKE(title, '^П.*а$');
235 2457353
>>457345
Чел, ты неправильно понял, что он хочет. Ему надо "или", а ты сделал "и".
236 2457364
>>457353
Да, ты прав.
REGEXP_LIKE(title, '^П.⚹|.⚹а$')
237 2457773
>>457345
А для MySQL как делать REGEXP?
238 2458100
>>457773
Гугл говорит, что в мускл есть функция REGEXP_LIKE(), аналогичная оракловой.
Безымянный.png4 Кб, 681x125
239 2461616
Подключаюсь к mysql 8 из mysql workbench методом tcp/ip поверх ssh

mysql 8 стоит в контейнере докера что настраивает isp на отдельном порту. После половины дня консоли удалось понять что как работает и настроить воркбенч на синхронизацию и просмотр статистики, но ощущение, что часть функций не работает (скрин + другой порт в характеристиках подключения, 06 вместо 10), пытаться решить проблемы или может лучше подождать чистого сервера, настроенного без Lamp? Ну а может лучше попробовать какие-то другие редакторы, ибо этот крайне ограничен? Успел познакомиться с dbForge, но бюджет не выделят пока, да и модель в воркбенче, и так изучать пришлось. isp просит не удалять поставляемый с собой сервер марьи c устаревшей версией, так как по ней он конфигурирует контейнерный докер Mysql 8
240 2461618
>>461616
Дополнение: подключаюсь к руту, далее рут базы, иначе начинается канитель. Тестовый сервер
241 2461713
>>424142 (OP)
Есть очень жирный по памяти select-запрос. Жирный он потому что таблицу на ~ 400к данных мы джойним с самой собой, а затем сверху еще 2 джойна кидаем. При тестах вообще изи улетаем за оперативку, а на проде эта таблица жирнее раз в 8-10, то есть там точно пиздец прям даже если RAM накинуть.

Как быть? Есть идеи разбить 1 запрос на несколько с помощью LIMIT/OFFSET, это вообще поможет? Если нет, то какие варианты?
242 2461715
>>461713
Можете спросить "а нахуя такие большие таблицы между собой джойнить"? В задаче надо узнать, существует ли в этой таблице (items) другая запись с определенными условиями или же нет.
В зависимости от этого, проставить поле mode. Без self join такое хрен знает как сделать. Я мог бы постараться просто выгрузить эту таблицу целиком в питон и там уже искать есть ли совпадения по условиям, правда хз за сколько это все выполнится, есть подозрения что надо будет ждать несколько часов бля а то и дней.
243 2461865
>>461713

>Если нет, то какие варианты


400k подзапросов.
244 2462013
Как из одной таблицы вывести строку соответствующую айди в другой?
245 2462020
>>461886 (Del)

>Редис же 1поточный. Это ж большой крест, верно?


Тебе что бы выжрать всю однопоточность редиса в одном инстансе нужно очень постараться, для уберхуйлоайда у них кластер есть
246 2462024
Пожалуйста, помогите. Очень нужно сделать эту хуйню.
Как блядь выделить две таблицы с одной хуйней?
http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
Нужно вывести все города(City) из Customersи Suppliers в алфавитном порядке. Я пробовал через Джойн, но походу на сайте из ссылки нельзя блядь это сделать - пишет ошибку. Помогите! Пожалуйста.
247 2462034
>>462024
Блядь, стоит только задать вопрос, как сам находишь решение? Что это за хуйня?
Три часа сидел блядь, и только задал вопрос на дваче, как через пять минут нашел решение.
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;
ПИЗДЕЦ
248 2462055
>>462034

>>NOT Country


лучше сделать Country NOT IN ('Germany', 'France', 'UK')
2022-09-1320-16-30.png27 Кб, 913x222
249 2462127
Помогите с решением. Пожалуйста
250 2462138
>>462127
SELECT MUSICIANS.GITHUN_NICKNAME FROM MUSICIANS, TRACKS WHERE TRACKS.MUSICIAN_ID = MUSICIANS.ID AND TRACKS.TRACK_NAME = 'Calm';
Подставь правильные названия столбцов, их на картинке не видно.
251 2462232
>>462138
Спасибо. Пусть у тебя все будет хорошо!
252 2462241
>>461713
Ставлю очко ОПа что это можно решить оконными функциями. Второй вариант вешать индекс, третий вариант писать процедуру и считать частями.
253 2462268
>>461713
Решение этого вопроса сильно зависит от того, как эта таблица используется. Вангую самоджоин делается исключительно для того, чтобы реализовать вложенные списки для серверного рендера.
254 2462292
Есть три таблицы в постгресе: "коллекции_залуп", "залупы" и "связь_залуп_и_коллекций". Правила инициализации таковы:
1. Коллекция залуп:
- пустая, чтобы пользователь мог создать коллекцию и только потом складывать в неё залупы когда-нибуть потом.
- с рефами на существующие залупы, чтобы пользовать мог создать коллекцию из существующих залуп.
- с иницализаторами залуп, чтобы пользователь мог добавить новые залупы коллекцией.
2. Залупа:
- должна принадлежать как минимум одной коллекции, так что если в инициализаторе нет инфы о существущей коллекции, то нужно создать пустую и в неё сложить новую залупу. Чтобы пользователь мог добавить залупу и сразу же складывать/добавлять другие в схожую коллекцию.
- Если же есть инициализатор коллекции, то создать коллекцию с него по всем правилам инициализации коллекции и сложить в неё новую залупу поверх.

Всё это конечно должно происходить транзакционно. Сначала пробовал реализовать это на уровне приложения, но малость подохуел от бесконечных итераций по хэштаблицам/массивам их их трансформацией туда и обратно. Потом решил написать портянку из CTE на каждый инициализатор и сейчас так и работает. Проблема в том, что если я захочу, например, добавить таблицу с гондонами для залуп с примерно такой же логикой как иницализация залупы без референсов (т.е. новый гондон -> новая залупа -> новая коллекция залуп), то мне нужно повторять всю логику предыдущих запросов в новом, что не айс в плане поддержки кода. Это юзкейс для хранимых процедур?
255 2462901
Пожалуйста, помогите решить задачу.
Я так понимаю тут нужно делать через JOIN?
Если да, то у меня нихуя не получается, если нет, подскажите пожалуйста через что.
Нужно вывести имена всех людейcustomers, которые покупали морепродукты categories
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join
Как блядь это сделать?
256 2463091
>>462901
можно просто джойнить все подряд, пока не дойдешь до нужной таблицы
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'
257 2463315
>>463091
Не работает!
sql2.JPG102 Кб, 1885x905
258 2463317
>>463315
а у меня работает
259 2463321
>>463317
В хроме заработало
Спасибо большое.
260 2463326
>>463317
>>463091
Ты не мог бы подсказать пожалуйста, почему 'c' и 'o' воспринимаются без оператора синтаксиса? AS?
261 2463361
Господа, насчет упражнений.
Вижу в шапке sql-ex и codewars.
Но нет ли более годных альтернатив?
sql-ex смущает тем, что древний как кал динозавра, мне кажется, что в sql уже дохуя было фич новых завезено, хотя могу ошибаться конечно.
codewars супер так-то, я там по питону всякое решал, но вот после питона раздел c sql выглядит заброшенным абсолютно.

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

Мне хочется практики задач на относительно продвинутом уровне, в частности там оконные функции и такое прочее.
262 2463366
>>463361
иди работать
мне такую шляпу скидывали, не знаю хорошая или нет https://sql-academy.org/ru/trainer?sort=byId
image.png8 Кб, 329x265
263 2463404
>>463317
>>463091
И еще один вопрос.
Почему 6000 записей ?
Там же столько нету во всех таблицах?
И как вывести рядом таблицу с морепродуктами, или типом категории?
264 2463663
>>463404
Бамп.
265 2464569
>>457364
Охуеть.
Пытаюсь вкатиться, изучаю питон и понял, что передо мной стена одного питона, проанализировав рынок понял, что надо уметь бд и через них намного проще вкатиться.
Но вот это '^П.*а$'); просто пиздец синтаксис
266 2464572
>>464569
Регулярки за полчаса учатся, а на питон у меня ушло несколько месяцев.
267 2466441
>>424142 (OP)
Нах нужно S3 хранилище?
В смысле в чем его преимущество перед рсубд или nosql? У нас все спорят, нужно ли нам s3 для нашей биг даты (таблицы постгреса на проде весят под 90 гигов), а я помалкиваю т.к. не шарю а вопросы задавать ссыкую т.к. позиционировал себя как скилового миддла с 2.5 годами опыта (припиздел)
268 2466453
>>466441
Нужен только облакодебилам, которые не хотят поддерживать инфраструктуру самостоятельно и отдают всё на откуп вендорам.
269 2466455
>>466441
Чтобы хранить файлы. Причем тут БД я вообще не ебу.
270 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?
271 2466976
>>466970
В конце cte должен идти 1 запрос епта. Поэтому update тоже оборачивает в cte нах
image.png87 Кб, 1240x832
272 2467155
Сап повелителям РБД. Помогите студентоте, с проектированием базы данных интернет магаза, одно дело писать запросы а другое дело их проектировать. Вот у меня есть такие вопросы

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

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

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

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

5. Ну и по индексам такой же вопрос как и в 4-ом
image.png19 Кб, 747x68
273 2467159
>>467155
:)
Что на пикче, твоя лабараторная? Какой курс?
274 2467162
>>467159
Пиздец задеанонил себя, ну да похуй, не в /b хотя бы

>Какой курс?


2 курс анон

Ну так поможешь? :)
275 2467255
>>467155
1 - просто путь, да.
2 -
Тут надо много больше табличек, чел.
Для начала корзина, там номер заказа и айди юзера, потом табличка с заказами, где номер заказа, номер продукта, количество.
В продуктах номер продукта, название, ску, описание и прочая залупа, которая есть у всех продуктов. Дальше табличка с типами продуктов и вспомогательная для связи продукта с типом. Дальше табличка с опциями типа сокет, объем памяти и т.д. и вспомогательная для связи продукта с этими опциями. Это навскидку.
3 - соленый хеш + рандомная соль отдельно на каждого юзера, это как сейчас делают, тебе для лабы достаточно просто хеша.
4 - Нужно, это несложный концепт, кури.
5 - Нужно, это более сложный концепт, кури.
276 2467258
>>467162
Карабах чей?
277 2467285
>>467258

>Карабах чей?


Бля чел мы не в /b сидим, дай хоть здесь от этого кала отдохнуть

а так я из казахстана
278 2467288
>>467255

Спасибо за такой ценный совет, вот со вторым пунктом я точно проебался, спасибо что заметил, тонны чаю тебе
279 2472490
Сап, я быдло!
В соседнем треде увидел упоминание NoSQL, гуглить лень, объясните в двух словах, нахуя оно нужно и чем оно лучше SQL.
Про реляционные бд знаю, про sql тоже.
280 2472525
>>472490
Ничем оно не лучше, у него задачи другие. Реляционные для OLTP (много маленьких транзакций, есть почти во всех приложениях), NoSQL для аналитических запросов, отчётов, временного хранения данных, кешей с быстрым доступом и т.д.
NoSQL - это не название какого-то языка запросов, а просто все СУБД, которые нельзя отнести к реляционным. У NoSQL неи стандартного языка запросов, в кажой такой СУБД свои союственные.
В реляционных БД у тебя таблицы с типизированными столбцами, первичные и внешние ключи, нормализация, джойны и всё сопутствующее. В NoSQL может быть что угодно, например, есть key-value (это можно сказать гигантская мапа, где ты под указанным ключём сохраняешь какой-нибудь объект) и есть документные (когда вместо таблиц у тебя коллекции объектов - "документов" произвольной структуры без схемы, можно думать как о хранилище жсонов).
281 2472634
>>472490
Это вопросы уровня "чем тойота лучше чем фольксваген?" или "чем go лучше чем typescript?". Nosql баз данных мильярды, есть любые прибамбасы, которые только душе угодны. Но я пользуюсь nosql из чисто прагматичных соображений, потому что ставить sql-базу западло, а за облачную nosql платишь 3 копейки в месяц, она не расходует память сервера. Мне не надо её настраивать, не нужно копаться в конфигах - я подключился и мне заебись.

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

Скорость/масштабируемость у nosql замечательная. Ответ где-то в районе 8 миллисекунд. При чём не важно, сколько у тебя данных в базе, хоть 1 террабайт, хоть 1 мегабайт, по барабану вообще. На производительность не влияет никак.
282 2473010
>>424142 (OP)
Существует ли модель данных, которую невозможно представить в виде реляционной модели данных?
283 2473020
>>473010
Не существует. Сложности всегда только с эффективностью доступа и представлением в виде реляционной модели, например, иногда приходится строить поверх реляционной модели другую модель, где в конечном итоге всё равно все сводится к таблицам и ключам. Нереляционные СУБД берут не потому, что в реляционных невозможно что-то сделать, а потому что для каких-то моделей данных они работают эффективнее, чем реляционные.
284 2473046
>>473020
Я просто где-то слышал что некоторые сетевые или там графовые модели с рекурсией не могут быть представлены в виде реляционной модели. Поэтому и переспросил, какбэ.
285 2473047
>>473046
Да, вот ещё, чё-то вспомнилась мне неполнота по тьюрингу языка SQL: https://neerc.ifmo.ru/wiki/index.php?title=Тьюринг-полнота#SQL
и возможность костыльного дополнения с помощью каких-то неведомых расширений, этого языка до тьюринг-полной системы.
Почему тьюринг-полнота?
А потому что речь о представлении любых моделей данных, какбэ,
и если уж моделировать любую модель, то какбэ должна бы быть тьюринг-полнота.
Почему так? Да потому что сильный тезис Чёрча-Тьюринга-Дойча, вот почему: https://ru.wikipedia.org/wiki/Тезис_Чёрча_—_Тьюринга
286 2473048
>>473046
Могут, сеть - это тупо таблица свяхок, там никакой рекурсии нет.
>>473047
Это уже не SQL, да и расширения относятся к логике обработки, а не к самой модели данных. Но отсутствие полноты по Тьюрингу не мешает хранить представление любых моделей данных.
287 2473056
>>473048
Дык а если в самой модели рекурсия? Скажем, описание программы с рекурсией - это ли не модель её?
288 2473060
>>473056
Ты относишь логику программы к модели данных?
Если не относишь, то рекурсия в программе отделена от реляционной модели, никакой связи между ними нет, значит, представить можно любую модель.
Если относишь, то в реляционной модели данных вообще невозможно представить никакую модель данных, там тупо нет понятия логики. Хранимые процедуры также не имеют отношения к реляционной модели. Логика относится к программе и может вообще ничего не знать о том, как данные хранятся, ей не важно, постгрес там или монга.

Это ты тот анон, который пытается впилить sqlite в наноборду?
289 2473076
>>473060

>Ты относишь логику программы к модели данных?


А, ну да, описание рекурсивной программы - это же не сам рекурсивный процесс её исполнения, это просто данные, ну там описание цикла бесконечного, или описание вызова функции из этой же функции...
Сам процесс выполненения программы - это уже работа с этими данными, то есть как-бы процесс обхода данных в базе данных, и если он бесконечен, как бесконечные циклы, то такой процесс невозможно смоделировать даже на машине тьюринга, исходя из того же сильного тезиса, в контексте непрерывности и бесконечности.
А если процесс исполнения конечен, то это тупо конечная последовательность выполнения элементарных операций, и она может быть представлена в виде таблицы в БД, как описание любого другого конечного процесса.

>Это ты тот анон, который пытается впилить 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, которые напиздело у народа хуйло, спиздив ещё и ЯО СССР, перед тем как хуйло предало народ СССР.
Так что сливайте бекап наноборды и расшарьте короче всеобщее достояние это, няшное, а то так и будете на подмочухном мейлаче подхуйловском, обезьяне-маме пасскоды покупать, пока она вакабу шатает, образом - пиздец каким обратно-несовместимым.
289 2473076
>>473060

>Ты относишь логику программы к модели данных?


А, ну да, описание рекурсивной программы - это же не сам рекурсивный процесс её исполнения, это просто данные, ну там описание цикла бесконечного, или описание вызова функции из этой же функции...
Сам процесс выполненения программы - это уже работа с этими данными, то есть как-бы процесс обхода данных в базе данных, и если он бесконечен, как бесконечные циклы, то такой процесс невозможно смоделировать даже на машине тьюринга, исходя из того же сильного тезиса, в контексте непрерывности и бесконечности.
А если процесс исполнения конечен, то это тупо конечная последовательность выполнения элементарных операций, и она может быть представлена в виде таблицы в БД, как описание любого другого конечного процесса.

>Это ты тот анон, который пытается впилить 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, которые напиздело у народа хуйло, спиздив ещё и ЯО СССР, перед тем как хуйло предало народ СССР.
Так что сливайте бекап наноборды и расшарьте короче всеобщее достояние это, няшное, а то так и будете на подмочухном мейлаче подхуйловском, обезьяне-маме пасскоды покупать, пока она вакабу шатает, образом - пиздец каким обратно-несовместимым.
290 2473126
>>473010
Это как бы на поверхности. Банально произвольную иерархию объектов уже проблематично отобразить в классических реляционных отношениях, если на не наложить определенные ограничения. Гугли object–relational impedance mismatch.
291 2473228
>>473126
Да ну, а как же бесконечно-ветвящееся дерево, в виде одной лишь таблицы: |id|parentID|object_content| ?
292 2473231
>>473126
Или ты имеешь в виду ещё и сами взаимосвязи, между свойствами описываемых объектов?
293 2473238
>>473231
Хотя опять же, описания объектов - это просто данные, а сами взаимосвязи между свойствами этих объектов, могут быть выражены в виде логики работы программы, а не в виде реляционных связей.
294 2473289
>>473228
Можно, конечно, использовать РСУБД для хранения данных в EAV ( https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model ) Но это уже не реляционная модель. Это просто способ хранения EAV модели. У почти все операции реляционной алгебры сразу нахуй идут. Плюс у тебя все ограничения целостности, которая данная модель предоставляет тоже проёбываются. Причём даже на уровне типов.
Реляционная модель это не про таблички, а про отношения и операции и связи между ними. Причём операции в это модели конкретные.
Ещё раз. В виде набора табличек, да, можно почти любую модель данных представить. Но если ты над ней не можешь выполнять операции реляционной алгебры - то это уже не реляционная модель.
image.png45 Кб, 887x528
295 2474616
Аноны объясните дебичу, как это называется.

У меня есть три таблички A, B, C. Когда я добавляю данные в таблицу A или B, у меня автоматом конкретно выбранные столбцы из этих таблиц попадают на новую строку в таблицу С
296 2474643
>>474616
Вы там построчное резервирование изобрели, что ли?..
297 2474666
>>474643
Анончик как это делается? И насколько разумно её пользоваться? Подскажи пожалуйста
298 2474729
>>474616
Я перефразирую вопрос. Можно сделать так чтобы в один столбец могли писать несколько таблиц. Условно таблица №1 сделала запись, а когда таблица №2 будет делать запись то она запишет в следующую строку
299 2475082
>>474729
Триггеры там какие-то есть, вроде что-то подобное можно делать, сам не пользовался.
300 2475356
>>474729

>Я перефразирую вопрос. Можно сделать так чтобы в один столбец могли писать несколько таблиц.


Конечно можно, при инсерте создаёшь создаёшь строку в таблице, получаешь её уникальный идентификатор и передаёшь его в другую.
301 2475357
>>472634

>Ответ где-то в районе 8 миллисекунд.


А потом секунд 10 проверяешь целостность данных на уровне приложения.
302 2475454
>>475357

>А потом секунд 10 проверяешь целостность данных на уровне приложения.


Чё так проверять? Модель импортируешь и всё. Mongoose там какой-нибудь или dynamoose/dynamodb-onetable.
303 2475553
>>474616 >>474666 >>474729
Это называется хранимая процедура или триггер (они могут быть довольно-таки страшненькими, вот посмотри на рисунок). Имеет смысл этим пользоваться в том случае, когда резервная копия базы данных создаётся не ночью раз в сутки, а прямо во время изменения данных в таблицах.

То есть, например, к каждой таблице добавляется таблица "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" (Алан Бьюли), это самая скачиваемая книга с сайта и когда-то мне её очень недоставало!

Как же орут в переговорке, пиздец просто
304 2475561
>>475553
Постгресс сильно отличается от майскл?
305 2475567
>>475561
На уровне запросов то же самое, а хранимки под неё пишутся на другом диалекте.
306 2475645
>>475454
Модель и проверяет 10 секунд.
307 2475661
>>475645
Охуительные истории итт. Одна история охуительней другой...
308 2476268
нуб в треде.

Анончики, как мне сделать count всех таблиц что у меня есть и вывести это всё красивенько?
309 2476335
>>476268
Словарь данных. В каждой СУБД свои механизмы.
310 2476699
>>475661
Конечно, свидетели nosql любят заливать про БЕСКОНЕЧНЫЙ ГОРИЗОНТАЛЬНЫЙ РОСТ, ОХУЕННУЮ СКОРОСТЬ, ПРОСТОЙ, УДОБНЫЙ И ПОНЯТНЫЙ АПИ, а как копнёшь, то сразу всплывает анальный вендорлок, самопальный язык запросов и игнорирование ACID.
311 2476718
Чёт я не понял, в постгресе есть способ передавать таблицы/набор строк аргументом к функциям?
312 2476753
>>476718
Стаковерфлов предлагает костыли ебаные: передавать массив, передавать название таблицы строкой, создавать AGGREGATE FUNCTION и подобное. Пиздец какой-то.
313 2477211
>>424142 (OP)
Надо сджойнить таблицу на 200 млн строк саму с собой.
В постгрес мы просто улетаем за память и пиздец. Переработал и теперь хожу в цикле - джойню эту таблицу саму с собой но по чанкам - по 100к строк за раз - теперь это все по памяти терпит но выполняет сцуко долго

Подозреваю для такого лучше просто использовать нечто другое а не постгрес. Что и как юзать?
314 2478829
>>424142 (OP)
Вопрос от тупово вкатуна

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

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

или такое на чистом sql не пишут, а ручками треды сортируют?
315 2478964
>>463361
делаешь выборку [тред|дата последнего поста] с помощью группировки и агрегатных функций, добавляешь сортировку
316 2478983
>>478829
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;
image.png749 Кб, 1117x261
317 2479003
Бля пиздец ебаные деды, кто так запросы-то пишет? Ссаная каша в которой нихуя не поймешь, пока не приведешь к нормальному виду
318 2479008
>>478983
Спасибо,теперь понял как такое делать
319 2479038
>>479003

> кто так запросы-то пишет?


Успешные, здоровые люди, которые могут воспринять и распарсить у себя в голове абзац плотного текста. А ты - зумер с клиповым мышлением. Если в тексте больше трёх слов - теряешься, паникуешь.
320 2479168
>>479038
Дед, спок. Ты же понимаешь, что когда компания наймет несколько зумеров и они переработают твой говнокод, сделав его пригодным для рефакторинга любым человеком, то окажется, что твои знания на уровне нынешнего 2 курса нахуй не нужны и ты пойдешь на досрочную пенсию из компании?
321 2479277
>>479003
Всё понятно, просто форматирование хуёвое. Я иногда так пишу, когда нужно не забыть мысль и по-быстрому составить запрос, но потом всегда привожу к читаемому виду. Хуйня по сравнению с запросами на 500 строк для всяких отчётов.
322 2479386
>>479168
Я в той компании директор.
323 2479387
>>479386
Что за ИП, где директор делает работу за специалистов? Ларёк на рынке?
324 2479395
>>479387
Работу делаешь ты. А я тебе зарплату плачу. Если хорошо работаешь, офк.
325 2480781
>>479386
Дайте премию еще 10к плес, мне на аквариум не хватает
326 2482695
Куда кидать AdventureWorks2012.bak?
327 2483480
В каком-то из тредов была ссылка на годный курс по SQL на степике.
Есть у кого она?
328 2483871
>>440122
Отвечаю на этот пуст спустя 2 месяца кажись (?).

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

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

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

Всем спасибо заранее.
329 2484051
>>483480
https://stepik.org/course/63054/info

Я как раз его прохожу сейчас, только расширенную версию.
330 2484177
>>427670
Приведи пример запроса с

>WHERE table1.id = table2.table1_id


без джоинов.
331 2484185
>>484177
Привожу:
WHERE table1.id = table2.table1_id
332 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"
Шо, я же её в самом начале объявил. Что ему ещё надо?
333 2486152
Почему не работает? Это SQL server, если что.
изображение.png29 Кб, 604x166
334 2486766
Как вот такое реализовывать? Тут CHECK хватит?
335 2486770
>>486766
Не надо блядский CHECK использовать. В базе данных никакой логики быть не должно, только данные
336 2486792
>>486770
Это когда ты в одно рыло пишешь весь код, Анончик...
337 2486830
>>486792
В одно рыло - это когда знаешь, что за неочевидная логика скрывается в очередном триггере или в констреинте на столбец. И исходник просто так хуй посмотришь, всё хранится в базе. Как только на проекте появляется хотя бы ещё один разраб, поддержка превращается в ад.
image.png33 Кб, 1012x620
338 2487677
Первокур вкатун с тупым вопросом:

Предметная область оценки по предметам в университете, у меня получается так, что учебная дисциплина может быть разной, в зависимости от семестра. То есть в бд, матан за 3 семестр и 4 семестр должны отличаться.
Но как это по человечески сделать не знаю. На ум приходят только отдельную таблицу с семестрами хранить, которая будет хранить год + булеан, второй это семестр или первый.
Выглядит как то костыльно, но лучше ничего на ум не приходит
339 2487817
>>485996
Так в динамическом запросе ты ее не объявлял, он же выполнять будет только то, что в строку ты вписал
340 2487967
>>487677
А семестров сколько? 2? Ну и сделай тоже через INT - 1 и 2, первый и второй семестр. Булеан тут логически не очень подходит.
341 2487975
>>487967
ну в каждом году по 2 семестра
годов много то есть 2022, 2021, 2020 и так далее
342 2488069
>>487975
Тогда можно вообще забить на такую вещь как семестры. Просто в табличку Task добавить строчки Date куда будешь в стандартном формате даты заносить время получения и сдачи-выполнения задачи. И потом уже из этих временных отметок можно будет и год и семестр и прочее извлекать.
343 2488114
>>424142 (OP)
Где найти норм гайды по OrangoDB? Ни книг, ни ресурсов, ничего... Одни жиденькие доки
344 2488558
>>488114
Первый раз про эту штуку слышу
345 2488792
Я мб в глаза ебусь, но что-то на sql-ex не нашел упражнения на оконные функции, они там есть вообще?
346 2488809
>>488792
А все, нашел какие-то
347 2489448
Салам, военнообязанные
Кто-то в курсе чем отличается знак <> от обычного != в postgresql? есть какие-топ подводные при использовании одного и другого?
348 2489501
>>489448
Одно и то же. Просто <> есть в стандарте SQL, а != нет.
349 2489914
Сенсеи, волей судьбы оказался на проекте в качестве дата инженера. Хотел кежуали писать пайплайны, но стоит задача мигрировать с одной схемы на другую. Входные данные: схема в RDS c MySQL под капотом, в которой 2 таблички, но одна из них содержит текстовое поле с джейсоном, который как водится семистракчеред и от записи к записи содержит разную инфу. Помимо этого есть еще табличка (или что там у них) в DynamoDB, в которой, что интересно бля, все более менее реляционно. Выходные данные - реляционная схема, предположительно на постгресе, но в том же RDS, без NoSQL. Вопрос: Как спланировать и осуществить миграцию, чтобы все прошло гладко? Как именно осуществить выгрузку\загрузку? Мб есть для таких дел тулы в амазоне или можно в лоб скриптом на питоне? Или не в лоб и на всякий случай со сквозной записью в С3? В общем никогда подобным не занимался и не представляю как такие вещи делаются
350 2490053
>>489914

> Как именно осуществить выгрузку\загрузку?


database migration service погугли. есть большая вероятность, что это ван стоп шоп для твоих нужд
351 2490056
>>490053
про динаму не скажу, но с RDS MySQL в RDS Postgres должно быть относительно прямолинейно перекатить с помощю DMS
ZeroDowntime1.gif67 Кб, 1000x479
352 2490343
>>489914

>Как спланировать и осуществить миграцию, чтобы все прошло гладко?


Блин, чувак, это есть в доках амазона.
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 делать конвертацию. Но это на порядок сложнее.

>>489914

>есть еще табличка (или что там у них) в DynamoDB, в которой, что интересно бля, все более менее реляционно


Как понять "реляционно"? DynamoDB базу надо уметь грамотно проектировать, чтобы выхлоп получить. У неё принципы работы другие совершенно, не такие как у MySQL.
353 2490344
Какая БД профитна если у нас много операций вставки и обновления?
354 2490721
Подскажите, пожалуйста, где можно навернуть про индексы, хочется хорошо понять, когда есть их резон юзать, когда нет, как работают.

И может еще что-то такое оптимизаторское.
355 2490761
>>490752 (Del)

> engine = blackhole


Ахахах, а в постгресе есть подобное?
356 2490806
>>424142 (OP)
Что будет с редисом если в него запихать больше данных чем оперативка?
Будет ли он их складывать на диск?
357 2490810
>>424142 (OP)
У меня есть 200ТБ данных KV которые мне надо чтобы пользователи оперативно получали. Я бы хотел их кое как шардировать какую базу выбрать для того чтобы было это поудобнее делать, монго имхо оверкил слишком сложна.
Можно попробовать потсгрес с хэш индекасами и\или каойнибудь динамодб или левел дб есть у кого опыт?
358 2490830
>>490806
Гугли про виртуальную память.
Будет то же, что при попытке юзануть в своей программе больше ОЗУ, чем имеется: начнёт юзаться своп на диске (если он настроен), а вместе с этим начнутся дикие тормоза. Ну а потом свалится из-за нехватки памяти.
359 2490854
>>490830
Гавняное гавно.
360 2490857
>>490854
По задачам. Редис для кешей, очередей или временных данных, а не полноценная key-value СУБД.
361 2490865
>>490857
Просто хотелось какой то silverbullet
362 2490884
>>490865
Был бы silver bullet, никто бы не юзал другие СУБД.
363 2490911
>>490343
Я благодарин
image.png171 Кб, 1030x789
364 2490928
Блять нихуя не понял, это перевод на русский такой корявый или я тупой?
366 2491001
>>487817
Точно, какой же я тупой, господи
367 2491392
>>424142 (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 как РСУБД
368 2491405
>>491392
Смотри планы запросов, но подзапросы лучше не юзать.
369 2491413
>>491405
А если во втором query вынесу этот подзапрос в CTE?
sage 370 2492001
>>479168

>наймет зумеров


После которых всегда приходится переписывать код?

>рефакторинг


Нахуя?

>знания на уровне нынешнего 2курса


В голос - современные выпускники вузов слабее птушников 20летней давности
Обезумевший от эффекта свининга-хрюкера поридж совсем ебанулся. Тебя в принципе даже к мс-офис нельзя подпускать.
371 2492004

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



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



Пынинское образование. 20 лет. Итоги.
sage 372 2492021
>>479003
Ты же имбецил нахуй, имбецил клинический, буквальный, а не просто оскорбление, тебя либо твоя пидорашья мать в детстве йодом не кормила, либо что то другое органическое, у тебя же когнитивные способности как у собаки, тебе не то что с данными нельзя работать - ты бы охранником критические когнитивные ошибки выдавал и тебя выпиздовали бы нахуй на пенсию по инвалидности

Ой блядь. Просто пиздец. Мелкий орк ебаный. Поколение пынявого хуесоса - отличается от предыдущих даже биологически. Вас только в цирке уродов показывать.
Надо валить из этой страны нахуй, тут орочий союз скуфов-собяниномишустиных и йододефицитных пердежей нахуевертил уже столько в любой сфере жизни или общественном институте что точка неспасения пройдена. Системный отказ, раковая опухоль, и любое действие не важно с какими намерениями его теперь только ускорит.
373 2492025
>>492001
>>492004
>>492021
Пошёл нахуй.
sage 374 2492033
Ебаное мракобесие, антиинтеллектуализм, пикирующий профессионализм, деградация по всем фронтам. Господь, жги.
sage 375 2492040
Failed state. А ведь могли бы быть норвегией, или на худой конец канадой...
376 2492041
Хули ты поджегся, дегенерат.
Съеби из треда лучше, а не сри
377 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.Есть варианты лучше?
image.png63 Кб, 1229x671
378 2492688
Сап аноны! Призываю к треду архитекторов и опытнейших людей по РБД. Я сделал базу данных для интернет магазина книг (знаю что по такой теме вас заебали), оцените качество исполнения, чего не хватает, а чего в излишке. Ну и вопросов своих накидаю
1. Нужны ли триггеры в контексте моего проекта? Если да то каких? Если нет то почему?
2. Знаю jmeter и java+jdbc, думаю оценить работу БД под нагрузкой, хочу удостоверится что схема БД обеспечивает целостность данных. Скажите насколько обосновано мое решение?
3. Думаю для каждого товара давать шестизначный артикул в формате 123456. Но я хз как можно это в постгресе сделать, думаю код генерировать на стороне сервиса а в базе по минимуму держать логику. Насколько тоже это решение обосновано?

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

Целую в пупочек за помощь
379 2492701
>>492688
eav catalog
/thread
380 2492702
>>492701
нихрена не понял чел
381 2495902
Есть две таблицы в постгресе, связанные внешним ключом. Нужно фильтровать выборку из одной по одному полю из другой. Пробовал и через подзапрос и через джоин, и там и там получается по несколько секунд, если заполнить таблички по 100к записей.
Есть способ сделать это быстрее?
382 2495914
>>495902
Индексы для этого поля есть?
383 2495929
>>495914
Нет. Да и смысла в нем нету наверно. Там по сути енум с 5 возможными значениями.
384 2495941
>>495929
А индекс для внешнего ключа? И фильтруешь ты только по этому полю или ещё каким-то? Не запрашиваешь же ты все записи для одного возможного значения, их же десятки тысяч может быть. Если фильтруешь по другим полям, на них должен быть индекс из нескольких столбцов. Надо смотреть план запроса в EXPLAIN, там не должно быть seq scan по большим таблицам.
385 2495949
>>495941
Ну я делаю выборку через рекурсивный with. Получаю временную таблицу в которой есть айдишник другой таблицы. Из этой временной таблицы мне нужны сущности, которые определяются одним полем в другой таблице.
Даже если я на внешний ключ изначальной таблицы надену индекс, он никак не будет работать(насколько я понимаю) в выборке, выданной cte.

>Надо смотреть план запроса в EXPLAIN, там не должно быть seq scan по большим таблицам


Ну это понятно, не ясно как. Кстати explain analyze execution time вообще выдает мне 300 секунд.
386 2496058
Помогите, пожалуйста.

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

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

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

И я не знаю как сделать чтобы это работало потокобезопасно. Сейчас - костыль на уровне приложения, который ебашит очередь и по этой очереди - добавляет. Но это пиздец как медленно. 1000 записей - добавляются почти минуту. Пиздец же.
387 2496198
>>496058
https://www.postgresql.org/docs/current/sql-createsequence.html
Зачем тебе дырки заполнять?
388 2496292
Есть в постгресе тип вида:
create type entity_init AS (
id bigint,
items json
)
Где джейсон - массив объектов.
Как джейсон массив из этих типов размотать в набор записей этого вида:
(
id bigint
item json
)
То есть условный массив из 5 типов, в котором 5 сущностей должен превратиться в набор из 25 записей с сохранением референсов.
389 2496639
>>496198
Ну. Портов всего 65535... Нужно экономить...
Ну и Address с AppID - используются сторонними системами, а они не очень хорошо воспринимают дырки.
390 2497034
>>496639
Ну так сделай таблицу на 65к строк и селектом выбирай близжайший свободный порт, а при ошибке вызывай реселект.
391 2497451
>>492688
хз схема вроде норм выглядит
392 2497716
>>424142 (OP)
Есть запрос:

DELETE FROM store WHERE id IN (:IDS_STRING)

Вместо IDS_STRING подставляем строку айдишников - перечисление через запятую. В таблице store несколько десятков миллионов записей. Вопрос, дорогие знатоки: какие подводные если там будет 10.000 айдишников? миллион? 10 миллионов? Какова там будет сложность? Условный постгрес не пережрет все ресурсы по памяти и cpu?
393 2497811
>>497716
В некоторых СУБД максимальное число элементов в таких списках ограничено, тупо будет ошибка.
394 2498301
>>497716
Разве IN в постгресе не требует набор строк (которые не string, а row)? У тебя скорее приложуха обосрётся интерполировать строку с 10 миллионов записей, вместе с постгресом.
395 2498369
>>424142 (OP)
Подскажите какое-нибудь мнемоническое правило, которое позволит запомнить уровни изоляции транзакции и когда какой уровень выбирать при запросе к СУБД.
396 2498377
>>498369
Всегда выбирать READ COMMITTED.
397 2498381
>>498377
На собеседованиях постоянно спрашивают все уровни изоляции транзакции, различие между ними и когда какое выбирать, чтобы добиться консистентности и скорости выполнения запросов.
398 2498467
>>498381
Что еще спрашивают?
399 2500618
Сап БДач. Подскажите аноны, столкнулся с такой проблемой, есть у меня запрос:

INSERT INTO table_name_1(column1, column2, …)
VALUES (value1, value2, …) RETURNING id;

Дальше мне нужно сделать ещё одну вставку, но уже в другую таблицу, взяв id того запроса который выполнил до этого.

BEGIN;

INSERT INTO table_name_1(column1, column2, …)
VALUES (value1, value2, …) RETURNING id;

INSERT INTO table_name_2(column1, column_id, …)
VALUES (value1, id, …);

COMMIT;

И вот как сука взять id с первого запроса чтобы можно было его вставлять в другой запрос?
400 2500632
>>500618
RETURNING id INTO переменная;
Переменную перед этим объявляешь.
1656212521223.png141 Кб, 923x821
401 2500756
Урок Яндекс лицея по основам SQL.
Я правильно понимаю, что они обосрались с диаграммой?
Тут жанры должны быть родительской сущностью вместо фильмов. Да и вообще, там должна быть неопределённая связь между сущностями, т.к. множество фильмов может включать множество жанров, и наоборот. Тогда надо разрешать эту неопределённую связь третьей сущностью.
А сейчас там какой-то бред получается: ID фильма кочует в таблицу жанров, количество жанров очевидно меньше фильмов и когда жанры закончатся, таблица жанров начнёт заполняться NULL.
402 2500930
>>500756
Нет, всё там нарисовано правильно. Жанры ничего не знают о фильмах, а фильмы знают, к какому жанру они относятся, и ссылаются на запись в таблицу жанров через столбец genre с внешним ключом на genres.id. К слову, название столбца "genre" сбивает с толку, его лучше было назвать genre_id.

> Да и вообще, там должна быть неопределённая связь между сущностями, т.к. множество фильмов может включать множество жанров, и наоборот. Тогда надо разрешать эту неопределённую связь третьей сущностью.


Наверняка для примера упростили. Не будут же про связь "многие-ко-многим" писать в самом начале основ SQL.
403 2500948
>>500930
Да, чет я не подумал, что там ссылка идёт на genres.id. Но я бы всё же наверное стрелочку повернул, чтобы фильмы зависели от жанров. Тогда бы не нужно было создавать этот альтернативный ключ films.genre, он бы сразу шёл из внешним ключем из таблицы genre.
404 2500963
>>500948
Фильмы и так зависят от жанров, стрелка показывает на зависимость. Просто такое обозначение. Если бы в таблице genres был внешний ключ, в ней пришлось бы создавать кучу одинаковых записей с одними и теми же жанрами для разных фильмов, и о нормализации пришлось бы забыть.
405 2501552
>>500756
Да, чот мне на курсах дальневосточных лучше объясняли. Там сразу рассказывали про всякие внешние ключи и писали сразу genre_id, а не обычный id что немного с толку сбивает.
406 2501656
пацаны, я немного отстал от жизни. А нахуя вообще нужно что либо кроме оракл?
407 2501664
>>501656
Постгрес нужен как оракл для бедных, sqlite как встраиваемое хранилище конфигов для десктопов и мобилок, остальное не нужно.
408 2502869
>>498301
Ты сейчас оухуеешь но строку можно сформировать тем же питоном:
IDS_STRING = ', '.join(ids_list)

а потом при помощи интерполяци строк подставить в итоговый query:
f'DELETE FROM store WHERE id IN ({IDS_STRING})'
409 2502880
>>501656
Напомни, в Oracle СУБД все еще нет никакой проверки лицензий?
Ну тогда ты прав,да.
410 2503000
К нам на проект недавно пришел зумерок, который принялся визжать что мы "работаем неправильно" т.к. на таблицах нет нигде индексов. Довольный засрал все индексами но охуел, когда я показал ему планировщик и записи из каталога pg_stat_all_indexes которые говорили что ни один его индекс так и не был использован

И да, это был не джун. А мидол с заявками на сеньора
411 2503150
>>503091 (Del)
Индекс - преждевременная оптимизация. Если у тебя меньше 20К строк в таблице то можно ставить анус что планировщик так и не задействует index scan.
412 2503527
>>503000
и таки шо, у вас и примари кеев тоже нет?
413 2503552
>>503527
Ещё, небось, и uuid вместо автоинкремента.
414 2503555
>>503150

>Если у тебя меньше 20К строк в таблице то можно ставить анус что планировщик так и не задействует index scan.


когда как.
Ну а ты в свою очередь поставил бы поставить анус, на то, что через год там будет все еще меньше 20k?
415 2503651
>>424142 (OP)
PostgreSQL
Хочу такую систему, что инсерт происходит в два этапа:
1. Сначала во временную таблицу, откуда их можно прочитать, показать пользователю, а потом спросить, будет он их коммитить или нет
2. Собственно, в основную таблицу из временной.

Можно ли рассчитывать на какую-то помощь от бд? Удобный импорт из временной таблицы в основную одной командой, если у них схемы совпадают, например? Или создать временную по образу постоянной?
Или придётся всё на фронте лепить, читать из временной, записывать в постоянную?

Инфы по этому поводу что-то не особо нашёл.
Речь не про two phase commits, если что.
416 2503764
>>503651
Никто так не делает. Все сначала загружают предзаполненную сущность с сервера, её поля показывают пользователью, а когда пользователь подтвердит, тогда и записывают.
417 2503816
>>503527
Причем тут pk?
418 2503818
>>503651

>Сначала во временную таблицу, откуда их можно прочитать, показать пользователю, а потом спросить, будет он их коммитить или нет


Умные дяди придумали давно такую вещь как NoSQL
419 2503846
>>503818
При чём тут вообще тип базы данных?
420 2503849
>>503846
При том что ты хочешь возложить на постгрю те функции, для которых она не предназначена
421 2503853
>>503849
Ни одна СУБД для этого не предназначена.
422 2503856
>>503853
Ты не понял что ле? Сохраняешь в монге/редисе свои ебучие данные, после тог окак юзер нажмет подтверждение, пишешь их в постгрю и чистишь кеш
423 2503857
>>503816
это внутренний рофл для опытных программистов, листай дальше.
Стикер536 Кб, 250x250
424 2503859
>>503857

>для опытных программистов

425 2503861
>>503651

>. Сначала во временную таблицу, откуда их можно прочитать, показать пользователю


Какую-то хуйню придумал.
Но если ты все же сможешь в своем ПО изобразить длинную транзакцию, которая держится, пока пользователь просматривает диалог, то можешь использовать CREATE TEMPORABLE TABLE.
В чем проблем?

Эти все штуки просто задолго до расцвета веба возникли. Для обычного десктопного софта все, конечно,придумано.
426 2504085
>>503764

>Никто так не делает.



>Следующим предложением литералли описывает, что я хочу сделать.


>Все сначала загружают предзаполненную сущность с сервера, её поля показывают пользователью, а когда пользователь подтвердит, тогда и записывают.


чё
427 2504106
>>503856
Да, как раз думаю, что-то маловато в моём проекте софта для баз данных, надо ещё один добавить.
Ещё хорошо бы, чтобы у них семантика отличалась, чтобы на предворительной транзакции невозможно было проверить, сожрёт ли постгрес эти данные потом. Всё проверил всё тебе нравится, дорогой пользователь? Ах, погромист не предусмотрел это минимальное различие между постгресом и редисом, вот тебе полный рот ошибок, вместо подтверждения.
428 2504109
>>504106
Это делается на application layer, чел
или все твое "приложение" это хранимки в постгре?
429 2504185
Уважаемый анон. Подскажи, пожалуйста, полнейшему нубу.
Пишу вот это:

CREATE TABLE delivery (
delivery_id serial PRIMARY KEY,
address_id int references address(address_id) not null,
time_range text[] NOT NULL,
staff_id int REFERENCES staff(staff_id) NOT null,
status del_status NOT NULL DEFAULT 'в обработке',
LAST_UPDATE timestamp,
CREATE_date timestamp DEFAULT now(),
deleted boolean NOT NULL DEFAULT FALSE
)

А в ответ получаю:
SQL Error [42830]: ERROR: there is no unique constraint matching given keys for referenced table "address"

Что не так?
430 2504404
>>504185
address.address_id должен быть первичным ключом или иметь уникальный констреинт. Судя по ошибке, у тебя нет ни того, ни другого.
431 2504490
>>503861 >>504109
Короче, понятно. Помощи от бд я в этом не дождусь, так что придётся лепить на фронте. Жаль.
432 2504492
>>504490
А чего ты ожидал? Временные таблицы за тебя фронт что ли сделают?
433 2504517
>>504492

>А чего ты ожидал?


В первом посте написал, чего ожидал.

>Временные таблицы за тебя фронт что ли сделают?


За меня никто не сделает, просто придётся весь алгоритм на фронте расписывать вместо:
- эй постгрес, эхо мне вот эти данные вот в эту табличку, но пока не коммить
- ага, всё норм, заливай/не не норм, дропай
434 2504627
>>504517
Так прихуярь к ним флаг "записи не проверены", если всё ок - апдейтишь на "проверены", если не ок - делитом ебашь по этому полю.
435 2504709
>>504492
Есть LocalStorage. Все прекрасно хранится в нем
436 2504873
>>504627
Хмм.. Да, тоже нормальная идея. Хотя тогда ко всем существующим запросам придётся добавлять, чтобы только проверенные данные выдавали. И не хотелось бы, таблицу метадатой поллютить, но можно отдельную табличку с этим сделать. Подумаю над этим, спасибо.
437 2505918
Дублирую вопрос из нюфаг треда. Как форсированно удалить строчку в таблице, к которой форенкеем привязана строчка в другой таблице? На стаковерфлоу рассказывают про каскадное удаление, но мне нужно ровно противоположное, чтоб привязанная строчка осталась, для воспроизведения бага.
438 2507672
>>505918
попробуй SET DEFAULT или SET NULL
i (2).jpeg44 Кб, 960x720
439 2508410
Вопрос к великим архитекторам от нуба.
Будет один бот на java, он каждый день будет чекать цены товара и записывать их в базу sqlite. Список проверяемых товаров может меняться. Нужна возможность делать выборку цен по дням.
Как спроектировать таблицы/свойства, что бы было меньше гемора с выборкой? На каждую дату отдельную таблицу? Или для каждого товара сделать свойство "дата". Как организуют такое по уму?
Пока в базе есть только общий список возможных товаров.
440 2508428
>>508410
Одна табличка с товарами, вторая товар-дата-прайс.
441 2508944
Как на SQLite сделать так, что если нужный текстовый столбик, в нужной записи не равен '' - пустой строке, то значит мы удаляем из этой строки один символ. Если все таки равен пустой строке, то мы берем текстовый столбик из другой записи.

IIF('' <> SELECT value FROM settingsValueTable WHERE nameValue = 'newFrequency', UPDATE settingsValueTable SET value = SUBSTR(value, 1, LENGTH(value) - 1) WHERE nameValue = 'newFrequency' RETURNING , SELECT FROM settingsValueTable WHERE nameValue = 'frequency');

Чето не выходит
442 2510512
Привет всем, у меня вопрос по Elasticsearch. У меня есть большой индекс с кучей документов. У документов есть поле name, где хранится название на английском. Но мне нужно добавить поддержку других языков. У меня уже есть данные по именам документов на других языках, и мне сейчас интересно вот что:

Слышал что в эластике есть анализатор языка, и можно ли как то в доках создать доп. поля на других языках и используя анализатор языка elasticsearch дергать определенное, в зависимости от языка в запросе? Если есть такая возможность, дайте, будьте добры, ссылку. Я вроде бы что-то и ищу, но это походу не то что мне нужно. Спасибо.
443 2510738
>>510512
эта ебалайка совершенно контркультурна к СУБД.
Изначально была просто либа на яве, потом из нее сделали продукт для безопасников, но субд она так и не стала.

Но да, ты можешь в Индексе создавать еще "поля".

Если плохо гуглится (А ты вообще гуглил?) тебе нужно просто потерпеть и адаптироваться к тому, что в гугле много информации о старом способе работы с индексом - через веб апи.
Но потом у них появилось что-то типа SQL. Сосредоточься на нем
444 2510773
>>508944
Вот я сидел изучал, по идее должна работать эта строка, но она не работает
SELECT * FROM students WHERE id = CASE WHEN '' <> (SELECT name FROM students WHERE id = 1) THEN (UPDATE students SET name = SUBSTR(name, 1, LENGTH(name) - 1) WHERE id = 1 RETURNING id) ELSE 2 END;
445 2510774
>>510773
На пиках результат работы
446 2510830
в принципе решил проблему, но как то не элегантно, пришлось добавить дополнительный столбик в который записывается значение для проверки, пытались ли удалить из столбика значение или нет
447 2510888
Аноны,как убрать такого рода дубликаты из правого столбца?
Надо что бы если было либо "NOT SELECTED" лмбо то значение что ввел юзер в БД.
То есть 113-115 строки заполнены нормально, т.к. там ничего не задано, а вот 83-85 дублируются.
БД - PostgreSQL
Таблица g-feature относится как O2M к g-value
448 2511131
Сап, помогите плз, не придумал, как попроще описать, но надеюсь поймете. Мне не понятно как правильно сделать одну аггрегацию, которую я выделил на первом скрине.

В общем есть БД, схема на 4 скрине. В центре таблица пробитых чеков в магазинах. Мне нужно сделать выборку как на 3 скрине. То есть выводить показатели типа общая стоимость, наценка, маржа итд по каждой дате в каждом магазине для каждого товара. Это я сделал и вроде бы правильно.

Проблема в последнем столбце. В нем я должен выводить, какой процент от общего числа продаж в этом магазине за эту дату в этой группе товаров занимает каждый товар. То есть например всего за такое-то число в магазине номер 1 было продано БАДов на 10000 руб, а какого-нибудь там фуфломицина на 1000 руб, значит в последней графе будет 10%.
Трудность в чем: в процедуру может передаваться список необходимых групп товаров, и мне нужно выводить данные по этим группам. На втором скрине код, который разбивает полученную строку и помещает значения в таблицу-переменную.

И я никак не могу понять, как передать в подзапрос, считающий общее количество продаж, как бы текущую группу продаж, по которой сейчас идет основной запрос. На 3 скрине можете заметить, что у БАДов и у Косметических средств у меня одно и то же значение в последней графе. То есть он не берет в расчет группу товаров. (я знаю, что там должен быть процент, просто для упрощения я пока только сумму вывожу, потому что в ней проблема).

Ну вот. Подкиньте идею плз, если поняли, че я написал. Второй день уже ебусь.
449 2513307
>>503150
3 иерархические таблицы с one-to-many (самый просто случай) в среднем 1 к 10, и в верхней таблице достаточно 200 записей
>>503651
Ты пытаешься дрочить БД бизнес-логикой, которая должна быть на уровне приложения. Добавь в свою таблицу published_at TIMESTAMPTZ и триггер, который проверяет нуловое значение этой колонки при апдейте, и не еби мозг.
450 2513586
Задача - проверять parquet файлы на валидность. Т.е. я прочитал схему pearquet, мне нужно сравнить ее с эталонным файлом - соответствие колонок и типов данных, одно из предложений - схема xsd. Где можно посмотреть примеры данной схемы и стоит ли использовать xsd, может есть другие варианты проверки?
451 2513641
>>513586
Убедил коллег в удобстве yaml. Вопрос неактуален
452 2514475
Привет, есть кто работал в Qliq Sense
453 2515323
>>424142 (OP)
Поясните по братски на сколько лучше доступ к таблице по кластерному индексу с низкой селективностью = низкая избирательность = остаётся много строк после наложения условия лучше доступа по обычному индексу?
454 2515446
Почему Repeatable read переводят как повторяющееся чтение, а не воспроизводимое?
455 2515497
>>515446
Потому что один долбоёб когда-то так перевёл, не зная слова "повторимый", а остальные повторяют за ним как попугаи.
ogog1519332267276941582.jpg83 Кб, 1200x464
456 2516105
457 2516540
>>515323
Бамп вопросу
458 2516551
>>515323
Я не мега-омега эксперт в оптимизации, но по мне так тут больше партиции помогут.
459 2516634
>>516551
Где, тут?
460 2516891
>>515323
вмысли "насколько" ?
ну сгенери похожие на твои данные и померяй.

Тебе никто не отвечает потому что вопрос тупой.
461 2517178
а че, есть прям вакансии БАЗАТОРОВ ДАННАТОРОВ? типа специальные должности для людей, чтоб они сидели и писали селектики целыми днями?
462 2517191
>>517178
Администраторы баз данных / DBA.
И разработчики на всяких PL/SQL, T-SQL, PL/pgSQL, которые пишут всю логику приложения на хранимых процедурах, в основном это легаси или специфичное типа OLAP.
463 2517338
Решаю домашку, есть задача пикрил. И моё решение.
Меня терзают сомнения, а возможно ли сделать это без джойнов, одними селектами? Не вдупляю, как впихнуть селекты вместо полей, ну типа

>select pole, select()... from...


так что ли?
464 2517362
>>517338

>Меня терзают сомнения, а возможно ли сделать это без джойнов, одними селектами?


Тебе для сравнения данных с нескольких таблиц в любом случае придётся джоины делать, даже неявные.
Альтернатива - вложенные селекты по типу SELECT id, name AS department name FROM "Department" WHERE id IN ( SELECT ... ).
465 2517374
>>517338
Нормализация и джойны именно для такого и придуманы.
sage 466 2518217
>>517178
ETL Developer
DWH Developer
Data Engineering
sage 467 2518219
>>517178
Аналитик данных
BI Developer
image.png12 Кб, 423x219
468 2519823
Сап двощь. Помоги плес.
Вот вводные:
Есть две таблицы, для них нужно сгенерировать тестовые данные, только вот проблема для меня в том, что после вставки в таблицу #1 нужно взять его айдишник и вставить в таблицу #2. Для генерации я использую generate series(), для того чтобы брать айдишник и вставлять в следующую таблицу я использую CTE (конструкцию WITH AS). Только вот вариант на пикрил работает только если нужно вставить 1 строку (под определение генерации данных слабо подходит как по мне). И как реализовать такой запрос чтобы решить эту проблему? Помогай двощ, а то я с ума сойду((
469 2519840
>>519823
или забить хуй и написать функцию в котором будет цикл? если что, нужно нагенерить данных не больше чем на сотню тысяч, о десятках миллионов речи не идет, а то ещё накинете йобаскрипт
470 2520078
>>519823
Какую блять строку, чё ты вообще несёшь?
471 2520085
>>520078
Column - столбец
Row - строка
Что тебя не устраивает дебич?
472 2520666
Сап, назрел такой вопрос.
У меня есть ТАБЛЦА со списком ТАБЛИЦ. Как в подзапрос подставить имя таблицы в поле фром? Что-то вроде этого:

slect
TABENAME
,(
select count(GOVNO) as GO
from ZA.TABENAME
)

from ZALUPA as ZA
473 2520678
Сап базач. Нуб итт.
Пикрил 1: простой первичный ключ в таблице Customers, внешний ключ в таблице Orders работает, возвращая в конце обновлённые данные.
Пикрил 2: составной первичный ключ в таблице Customers, внешний ключ в таблице Orders не работает, возвращая в конце старые данные.

Почему такое поведение с составными первичными ключами?
474 2520699
>>520666
Напрямую никак, надо какие-то переменные вводить и подобную хуйню.
475 2520775
>>520699
хуйня-с, придётся обратится к лунной призме
476 2522326
Есть вопрос. Кто-нибудь занимается с БД Firebird. Так случилось что мне приходиться тесно работать с ними, и это надолго. Отзовитесь. В каких проектах используете? Очень хочется знать что я не один такой на двощах

крик отчаяния
477 2522329
>>522326
Ну хотя бы http://www.3rs.de/
478 2522348
>>522326
Делал на нём лабы в вузе много лет назад. Большое вообще ни от кого про него не слышал.
479 2523040
Подскажите пожалуйста направление нахуй.
В общем сам я околоайти и у меня есть файл.sql весом 42 гига из которого мне нужно вытащить таблицу со столбцами userID, currency, balance, но как на деле они в этой БД названы я не знаю. Есть какой-то простой способ единожды извлечь эти данные?
480 2523043
>>523040
select userID, currency, balance
481 2523166
>>424142 (OP)
Антоны, не могу решить задачу. Гугл не помог разобраться.

Есть джве таблицы. Актуальная дата сегодняшняя.
1. Столбцы предмет, локация продажи, цена и дата, когда эта цена была актуальна. Для комбинации предмет/локация может быть несколько строк с ценами для разных дат.
2. Зона и локация в этой зоне.
Необходимо сделать выборку, в которой будут предмет, цена на ближайшую дату к текущей для зоны 1, цена на ближайшую дату для зоны 2, разницу между этими ценами. Всего 4 столбца.

Хз, как это сделать.
482 2523233
>>523043
Добра анонче. Действительно помогло
483 2523317
>>523166
находим цены из первого региона
находим из второго
джойним
в селекте цены вычитаем и обзываем разница
484 2523380
>>523040
должны быть справочники типа all_tab_columns
485 2525822

>>Задачи:


>>- https://www.codewars.com/?language=sql


Боже, какое же говно. Задачки как будто по ЯПу, а не по работе с базами данных. Замени букву в стройке, вычисли фибонначии... Где извлечение хитровебанных наборов данных из БД??? Регался там с надеждой на куче новых задачек, остался сильно разочарованным.
486 2525826
>>525822
Посмотри sql-ex.ru
487 2526014
>>424142 (OP)
аноны, тут есть те кто вкатывались к эксель? ищу сейчас работу, но хочу офисобыдлом быть, реально ли выучить за месяц впр гтр чето там сводные таблицы? формулки еще со школы умею делать, а вот sql очень тяжело идет, решил за неделю уже под 30 задач на sqlexe но все еще путаюсь в совсем стандартных вещах
ну и заодно может курс по экселю посоветуйте, чтоли
488 2526018
>>526014
Эксель не имеет никакого отношения к sql, у мс есть аксес, это такой-сякой заменитель скулайта, хотя он очень сдулся в последние годы. Но сам эксель весьма нихуев, 95% его использования это тупые списки, но там можно наворотить дел при умелом использовании.
489 2526019
>>526018
я про саму идею баз данных, просто даже для постгреса я тупенький, а вот с экселем вроде неплохо на огэ и егэ было
но в вуз не поступил, ищу работу сейчас
жаль что треда нет для него, спасибо за ответ
490 2526020
>>526019
Он никак не связан с рсубд, не знаю, с чего ты это взял.
Твоё неплохо это средняя тётя срака с бухгалтерии.
491 2526024
>>526020
это так( еще везде 1с требуют вместе с экселем, так что даже хз пока, посмотрю что нужно 1сникам знать
492 2526029
>>526024
Тут суть именно в знании этой бухгалетрской хуйни, всё остальное это лишь инструменты. Надо решить - ты бугхалтер с знанием автоматизации или пограмист с знанием бухгалтерии.
Я вот лет десять зарабатываю на датамайнинге спортивных матчей, хотя про эти виды спорта я знаю чуть более чем нихуя. Но клиенты получают профит. Они довольны и я доволен.
493 2526494
аноны, салям.

нужна помощь с методом решения моей задачи, запрос напишу сам, но объясните, какие именно операторы или методы помогут или могут помочь. т е куда копать, дальше сам.

есть таблица, упрощенно выглядящая так:

стА стБ

123 НЕТ
123 НЕТ
123 НЕТ
456 НЕТ
456 НЕТ
456 ДА
789 ДА
789 НЕТ
789 НЕТ
и т д

как мне достать все значения стА у которых стБ всегда НЕТ?

пасиба
494 2526635
>>526494
селфджоин
495 2526774
>>522326
Учился на ней, моя любимая
496 2526836
Есть БД постгрес, в ней одна таблица json_table вида:
id | jsonb
----+---------------------------------------------------------------------
13 | {"Pop": 1, "city": "new york", "food": "apple", "state": "NY"}
14 | {"Pop": 2, "city": "los angeles", "food": "avocado", "state": "CA"}
15 | {"Pop": 3, "city": "buffalo", "food": "apple", "state": "NY"}

Мне надо извлечь из нее все строки, где "food": "apple" и "state": "NY", т.е. 13 и 15 (строки полностью, включая столбец id).
Каким запросом я могу это сделать?
497 2526844
>>526836
селект вхере
498 2526846
>>526836
Бля, не очень удачный пример, мне нужно чтобы 2 пары ключ-значение могли стоять где угодно в одной строке, т.е например state идет перед city, но выборка должна быть "state": "NY" и "food": "apple"
>>526844
Спасибо, гений.
499 2526858
>>526846
ебать ты хуесос
500 2526937
>>526846
select jsonb from json_table.
501 2526945
>>526494
not exists
502 2526946
>>526945
>>526494
Даже проще,having min(length(стБ))=3
503 2526966
>>526946
о нифига как можно. спасибо анон за науку
504 2527448
>>517178
То ли дело набирать макак писать эндпоинты и проверять нулы целыми днями.
505 2530165
Сильно не бейте, я новичок и если в своих рассуждениях не прав - поправьте.

Есть ли реальные преимущества у nosql для oltp баз данных?

Какие преимущества и в каких кейсах?
Только инмемори кей-велью для кешей для меня очевидны.

У клепмана читал преимущества графовых. Он там пугал, что обход графа в реляционках можно заменить рекурсивными сте. Но на деле в них ничего особо страшного не оказалось, для простых кейсов вполне норм. Ну конечно если сложные обходы сложных графов или поиск в них, то да. Еще я слышал, что у графовых проблемы с большими объемами.
Какие преимущества у монги перед jsonb вообще не ясно.

Для olap вот бд колоночные(аналитика) и временных рядов(метрики) намного лучше, чем реляционки.
И вообще анончики, расскажите плиз с какими nosql вы работали и для каких кейсов.
506 2530213
>>530165
Нет у них преимуществ для OLTP. Большинство предметных областей естественным образом предполагает таблицы, доказано тысячами кабанов, ведущих учёт в стопке экселек. При любых попытках юзануть NoSQL для OLTP очень скоро возникают проблемы из-за отсутствия транзакций, избыточных данных и слабоструктурированной схемы. Разве что могут немного ускорить разработку MVP-продукта, и то спорно.
Вот в специфичных задачах типа кешей и OLAP да, без NoSQL сложно обойтись.
sage 507 2530222
ПЕРЕКАТ >>2530219 (OP)
ПЕРЕКАТ >>2530219 (OP)
ПЕРЕКАТ >>2530219 (OP)
ПЕРЕКАТ >>2530219 (OP)
ПЕРЕКАТ >>2530219 (OP)
image.png12 Кб, 424x184
508 2532577
Есть таблица в Postgre, нужно удалить от туда все дубликаты, где одинаковый ticketdocument_id и couponnumber, оставив по одному значению, где object_id - самый максимальный.

Накидал пока что запрос на выборку всех дубликатов:

SELECT
tt1.ticketdocument_id,
tt1.couponnumber,
tt1.object_id
FROM
t_ticketcoupon tt1
WHERE
(
SELECT
COUNT(*)
FROM
t_ticketcoupon tt2
WHERE
tt1.ticketdocument_id = tt2.ticketdocument_id
AND tt1.couponnumber = tt2.couponnumber
)> 1

Результат на скрине. Теперь нужно удалить все дубли, в бд остались записи с максимальным objectId на каждый ticketdocument_id + couponNumber:

714051911281567336217140519112815673367
714051911281567336227140519112815673368
714051911281567336237140519112815673369
714051911281567336247140519112815673370

Подскажите плз, как это сделать?
image.png12 Кб, 424x184
508 2532577
Есть таблица в Postgre, нужно удалить от туда все дубликаты, где одинаковый ticketdocument_id и couponnumber, оставив по одному значению, где object_id - самый максимальный.

Накидал пока что запрос на выборку всех дубликатов:

SELECT
tt1.ticketdocument_id,
tt1.couponnumber,
tt1.object_id
FROM
t_ticketcoupon tt1
WHERE
(
SELECT
COUNT(*)
FROM
t_ticketcoupon tt2
WHERE
tt1.ticketdocument_id = tt2.ticketdocument_id
AND tt1.couponnumber = tt2.couponnumber
)> 1

Результат на скрине. Теперь нужно удалить все дубли, в бд остались записи с максимальным objectId на каждый ticketdocument_id + couponNumber:

714051911281567336217140519112815673367
714051911281567336227140519112815673368
714051911281567336237140519112815673369
714051911281567336247140519112815673370

Подскажите плз, как это сделать?
image.png10 Кб, 498x94
509 2532579
>>532577
Проебался с разметкой, вот нужный результат:
помогите сделать диаграмму развертывания на тему почтовый клиент анжелла 510 2532632
не могу понять как сделать диаграмму развертывания для почтового клиента
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 30 января 2023 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски