Литература: - Томас Кайт. Oracle для профессионалов - https://postgrespro.ru/education/books/dbtech - Алан Бьюли. Изучаем SQL. - про MySQL - К. Дж. Дейт. Введение в системы баз данных
Q: Вопросы с лабами и задачками A: Задавай, ответят, но могут и обоссать.
Здесь мы: - Негодуем, почему шапка - говно, и предлагаем коллективному ОПу идеи, как её улучшить. - Разбираемся, почему PostgreSQL - не Oracle - Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс - Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе - Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование - Анализируем, как работает поиск вконтакте - И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно.
>>2424799 Это нетипичная задачка для скл, надо быть ебать знатком, чтобы через жопу извернуться. Если бы это был какой-то цсв, то решается в десять строчек и можно быстро молотить гигабайты, а тут хуй знает.
Есть такая сущность как Location - она объеденяет в себе коды вот этих 3х таблиц. Как это лучше всего представлять в Базе? Как View? Это не самостоятельная сущность - полностью зависит от этих трех
Пацаны, помогите долбоебу, не вдупляю, как это правильно решить. У меня есть таблица с некими периодами со значениями, они могут накладываться друг на друга. Нужно в итоге посчитать суммы этих значений во времени. Ну типа А-C - 1 B-D - 2 Результат A-B - 1 B-C - 3 C-D - 2
Моё решение такое, я подумал что логично будет сначала просто разбить всё множество периодов на отрезки.
Для этого сначала взял все возможные пары точек (через 4 юниона, для разных случаев), потом для этих пар нашел непересекающиеся отрезки с минимальной длиной (сгруппировал просто по левой точке, с самой ближней правой точкой).
Ну а имея отрезки уже можно было джойнуть их с периодами и уже агрегацией посчитать суммы, изи.
>>2425868 нет, кодом только за деньги ну смотри если у тебя разные отрезки времени, тебе же надо будет порезать по ним. Например первый 14:00-14:30 второй 14:10-14:20, соответственно пересечение 20 минут, а не 30. Делаешь джоин потом при помощи iif считаешь begin/end
>>2425963 С ORM надо в деталях знать механизм его работы вплоть до чтения его исходников, читать книги на тысячи страниц, знать про проблемы типа N+1, очень внимательно и осторожно описывать конфиг ORM и все сущности, очень хорошо знать SQL, чтобы смотреть сгенерированные запросы и мочь при их неоптимальности переписать на нативный SQL (примерно в половине случаев). Вообще, хуй знает, для кого придумали ORM, они не решают проблем, которые на них возложены. Работа с базами данных только усложнилась.
>>2426027 Как тебе ORM с миграциями помогает? Таблицу с айдишниками запросиков, проверяемую на старте, ты можешь и без ORM сделать. А в экранизацию значений можешь даже самый паршивый драйвер/адаптер на %языкнейм%.
>>2426251 А ты в технологиях разбираешься? ORM технологичне, миграции не нужны с ORM, так они на лету генерятся из Entity обычно. ORM не запрещает raw запросы строчить, когда реально нужно.
>>2425943 А, типа прям империативно кодом. Не, эт читерство, так можно вообще всё вытянуть в приложение и уже нормальным ЯПом посчитать мб даже эффективнее всего будет, чтобы базу не нагружать кстати. я хочу прям sql'ем, декларативно.
>>2425963 Значится, это очень холиварный вопрос. Концептуально нам как программистам не хочется писать plain sql в бизнес-логике, потому что во первых эта логика засирается всякой sql-специфичной херней (ну там вместо одного логического upsert иногда приходится делать if !select then insert else update), а во вторых, иногда приходится захуяривать всякие промежуточные рантайм кеши и прочую особую логику и когда у тебя sql уже расползся по всему коду, то как-то задекорировать это дело становистя нереально. Короч, хочется, чтобы бизнес-логика содержала просто действия вида "найди", "укради", "роди", а вся базоспецифичная хуйня тусила отдельно.
Тут в целом нормальный подход просто запилить интерфейс репозитория с соответствующими методами, а в отдельном слое бахнуть реализацию, уже прям с хардкодными запросами. Вот этот прям норм схема, если можешь такое сделать, не стесняйся.
Но некоторые пошли дальше и сказали, что типа а давайте вообще запросы никакие не писать, у нас будет одна универсальная либа, в которой мы будем описывать сущности и связи между ними и что мы хотим найти, а эта либа сама будет нам всё находить, сама за нас понимать, какие запросы сделать и всё такое. И вот это всё звучит хорошо, но довольно быстро превращается в пиздец, потому что эта ORM просто становится ещё одним промежуточным языком и если раньше ты должен был знать только твой ЯП и SQL, то теперь приходится знать ЯП->ORM->SQL. А все базы, заразы такие, очень специфичны, и для эффективной работы требуют кучи всяких рюшечек, да и просто поддерживать все фишки всех бд ни одна орм нормально не может, в итоге поддерживая только какую-то общую базу, в результате чего, какую бы бд ты ни выбрал, тебе всё равно придется писать на generic sql, используя уникальные возможности бд на 20%. Ну и про эффективную работу, тебе придётся досконально знать то, как работает твоя ORM, чтобы заставлять её каждый раз генерировать эффективный код для базы. В итоге ты ебешься со всеми этими сложностями и такой думаешь "нахуй мне вообще этот комбайн, просто напишу плейн запросы и норм будет". Но это тоже не вся правда, потому что в итоге тебе придется велосипедить и колхозить многие вещи, которые в орм уже сделаны и так или иначе продуманы.
В-общем, орм'ки хороши для формошлепства и всяких несложных запросов, CRUD'ов и тому подобного, а все сложные вещи лучше всего всё же писать руками в отдельном слое.
А, и да, Hibernate это какое-то монструозное говно, на которое без ужаса смотреть нельзя, если что, то бывают орм попроще и посимпатичнее.
>>2426308 причём тут приложение? SQL умет в if. Просто после джоина у тебя будут отрезки и надо найти их пересечение в рамках строки, это делается через if если конкретно в постгре нет имплементации можно тоже самое через case сделать
>>2426059 Ну разве орм мне не поможет, если я во время миграции поменяю имя колонки в табличке? Ели рав-скл, то мне придется во всех запросах менять имя колонки. Или удалю колонку.
>>2426532 С raw SQL у тебя есть такое достижение языков программирования, как повторное использование кода. Ты пишешь репозиторий, который знает, как работать с этой таблицей, а во всех остальных местах тупо этот репозиторий используешь, инкапсулировав уровень доступа к базе данных, и если захотел переименовать/удалить столбец, то только в этом репозитории и переименовываешь/удаляешь.
>>2426537 Ну да. Но с орм мне придется поменять только модельку и написать чендж сет, а с рав-скл минимум поменять половину методов в репошке. А если у меня есть методы, делающие селекты из нескольких табличек, то и в других репошках тоже придется менять поля в рав-скл запросах. Мы так то билдером запросов пользуемся(жук) с генерацией модельки, который попроще орм(хибера), но все таки не совсем рав скл. И вместо переписывания скл-скриптов надо перегенерить модельку, а иде уже сама подчеркнет, где нужно поменять репошку. Но есть вопросы о хранениии сгенеренного кода. И еще пару мелочей, уже не помню каких.
>>2426622 - Параметры всех запросов экранировать, т.е. вместо конкатенации строк везде использовать SqlCommand.Prepare(), PreparedStatement и подобное. - Включить шифрование соединения с БД. - Если приложение и логика у тебя в БД, и пользователи подключаются к ней напрямую, то создавать для каждого юзера по схеме, создавать публичные синонимы для хранимых процедур, выдавать гранты, пермишены, настраивать ACL. - На случай, если уж взломали, строить архитектуру так, чтобы ущерб был минимальным. Пароли хешировать, не хранить все данные в одном месте, вынося данные в другие системы и т.д.
>>2426632 Да, это называется двухзвенная архитектура. Было популярно в двеяностых-начале нулевых, когда языки для серверной разработки были в зачаточном состоянии, масштабные энтерпрайзные проекты не тянули, так что удобнее всего было вести разработку бизнес-логики прямо в базе данных. Тогда и клиенты были в основном десктопными. Сейчас в основном легаси.
>>2426585 Что за манеквры ёбана? Задача сводится к нахождению непрерывных временных отрезков, сделать агрегацию по ним дело техники. Эта задача решается через row_number
>>2427621 Как ты блядь не пользуешься джоинами а только вэрэ? Ты не пользуешься ногами, а только ботинками? Как ты соединишь таблицы без джоина? Соединение таблиц это и есть джоин. Даже если пишешь from a, b where a.id = b.a_id
>>2427645 Не использую синтаксис джойнов, значит, не пользуюсь джойнами. Меня не ебёт, что СУБД у себя внутри построит почти одинаковый план запроса, что и с джойном, и будет выполнять его через один и тот же механизм. Я же не говорю, что пользуюсь регистрами и прерываниями, хотя внутри тоже через них всё работает. Потому что важна только семантика языка запросов.
>>2427835 Можешь, но однажды ты наткнёшься на какой-нибудь сломавшийся отчёт, написанный кем-то другим с активным использованием оконных функций, и тогда придётся учить. Да там и учить почти нечего.
Есть целый набор условий (6 штук), в некой таблице A мы заполняем поле mode исходя из выполнения этих условий (от 0 до 5 соответственно). Это как делать? Через CASE? Там каждое условие ппц объемное и включает в себя подзапросы к другим таблицам121734
>>2428187 Не говоря уже о том, что после выполнения первого же условия мы должны забить хуй на остальные и заполнить поле mode нужной цифрой, CASE это обеспечивает? Или он всегда исполняет все ветки условий?
---Или он всегда исполняет все ветки условий?--- Но зачем спрашивать про специфику работы какой-то языковой конструкции на двачах, ищи в документации по СУБД
Пацаны, вытаскиваю из таблица строку - список параметров, надо в следующем query сделать проверку по типу:
SELECT name FROM table WHERE mode NOT IN (alpha, beta, zeta)
Строку "alpha, beta, zeta" я как раз и вытащил, но бля, если я просто вставлю ее через питоновское форматирование строк в мое следующее query то может быть потенциальная инъекция (и тулза bandit не даст гитлаб пайплайну пройти), но если я буду пытаться вставить ее через обычные параметры и ? то постгря неправильно меня поймет - она будет видеть одну строку, но на самом-то деле это не единая строка и 3 разных параметра
>>2424142 (OP) Есть ли способ обновить строчки в таблице по GROUP BY? Вот мы сгруппировали строки по 2м колонкам: GROUP BY item, address - как внутри каждой такой группы обновить поле start_date, установив максимальную среди всей группы? Чет вроде должно быть просто, select запрос и так ясно как писать, но как из него сделать update блэт?
Парни, вопрос. Работаю в open panel server, запускаю локальный сервак При работе с формой поиска бд выдает parse error, смотрю логи апача, а там обычная 408. Вы уже наверное поняли про что идет речь лол. Буквально месяц назад форма работала. В чем блядь проблема? В какую сторону копать?
Уважаемые sql-господа, есть ли какой-то быстрый способ немного изменить все значения в столбце? Например, там лежали значения: qwerty, Asdf, lk; надо получить: [qwerty], [Asdf], [lk].
Часто вижу что говорят "создать выборку Т из джойнов бла-бла" а потом с этой выборкой Т провести какие-то манипуляции, например сджойнить ее с чем-нибудь еще и отсортировать, как это в рамках sql решается?
>>2430018 Может и в базе данных, но там сложно получить непонятные ошибки, СУБД либо работает, либо нет. Скорее что-то не так с конфигурацией твоего open panel server, про это здесь никто не подскажет, это проблемы, специфичные для языков программирования, на которых работает приложение, использующее БД,
>>2430055 Да в том и прикол, что на сайте все работало, а потом раз и все, я просто уже не понимаю, где копать, потому что сайт не мой, движок не определить из за клаудфаер защиты, это точно не настройка open panel, это словно магическим образом вываливающаяся ошибка, я настолько нуб что даже не знаю как прогнать форму на ошибки, тупо как посмотреть где она, есть какие то логи апача, но это не то все, мб это специальная ошибка создателей, как ковырять, в каком месте хз. Ну вот допустим как прогнать конкретно форму сайта на ошибки?
Есть некая "промежуточная" таблица в которой временно храню данные, совершаю над ними манипуляции а потом стираю ее (TRUNCATE). Проблема в том что после стирания последовательность для айдишников продолжает идти, то есть когда пишем в чистую таблицу новые данные, у нас id начинается не с 1 а с того числа, на котором закончилось. Как это фиксить?
Как UNION под капотом работает? Просто склеивает результаты разных запросов вместе? Запросы по-прежнему отдельно отправляются?
В одном месте мы селектили данные из таблицы на основании пар колонок item и type а потом отдельно обрабатывали каждую такую группу данных (штук 30-40 таких групп обычно). Подумал что можно выполнить 1 sql запрос и объединить все с помощью Union. Но на локальных тестах не увидел какого-то подъема в производительности. union бесполезен для таких кейсов что ли?
>>2434714 Ну да, они с одинаковым, ничего не упало. Просто какого-то прироста не заметил. Можно будет еще проверить на тестовой базе 10 миллиона строк но походу результат будет тот же
>>2434697 Вообще мы тут с пацанами пытались оптимизировать питоновский celery pipeline, там внутри селери-тасков дергается постгря. Думали если уж union не помогает ускориться то можно не каждый раз вытягивать данные из таблицы а 1 раз целиком заселектить всю таблицу и передать эти данные в каждый из тасков, чтобы там уже данные отфильтровать. Но случился нежданчик с брокером - Реббитом:
"PRECONDITION_FAILED - message size 2253095235 is larger than configured max size 134217728"
То есть мы попытались 2 Гига засунуть в 1 месседж Реббита. И я вот думаю - даже если разобьем этот месседж на чанки по 100 Мб скажем, тут же все равно больно дохера памяти используется, не? Кто работал с Реббитом глубоко? Это вообще норм идея передавать столько данных по нему или это хуйня ебаная и так никто не делает?
Есть задачка. Три таблицы 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+ тоже, а как отсеять тех, кто сдал не все предметы? В общем помогите плез кто чем может)
Есть ли какая-то IDE для MySQL с урезанным функционалом для новичков чтобы могла наглядно строить таблички или все эти связи между табличками как Воркбенч? Может есть какой-то хидден гем в вашей области для новичков?
Вот у меня есть sqlite3 таблица, я добавляю туда строку через INSERT INTO и закрываю действие через .commit() Но сейчас мне надо добавить строку, и сразу же ее обновить через UPDATE. Нужно ли делать коммит после первого действия?
>>2435682 Сделано это для обеспечения изоляции параллельных транзакций. К примеру, когда ты обновляешь строку в своей транзакции, другие транзакции так же могут работать с ней. И для них как раз и нужно сохранить старую версию. И да, строка во время обновления со страницы физически не удаляется. Это произойдет позже, во время автоочистки.
Есть subquery из которого нужно сделать update. Проблема в том что в этом subquery могут дублировать данные из-за большого количества join-ов а у меня должна быть только 1 строка с выбранной парой ключей item - type
Небось скажете индексы юзать? А вот хрен, у нас в этой таблице много вставок и изменений, строк несколько десятков лямов, так что от индексов решили отказаться.
Поясните по компрессии в монге. Почему в моих тестах включение snappy на стороне клиента локально ухудшает скорость чтения на 7%, а с удаленным сервером никак не влияет на ситуацию. Уменьшение объема передаваемых по сети данных должно ведь ускорять RPS, неужели распаковка съедает весь выигрыш?
Чтобы было меньше нагрузки на insert/update т.к. у нас часто идут эти операции и в таблицах от миллиона до нескольких десятков миллионов строк мы решили избавиться от Foreign Key везде в нашей Постгре. Насколько это здраво? Там будет какое-то значимое улучшение в производительности?
Здароу. Щас понял что на собесах по бекенду много контор дрочит по БДшкам. Как будто блять кто-то до сих пор не хуярит своё говно через ORM. Ну да ладно. В общем, видимо пришло и моё время уже наконец по нормальному изучить эту хуйню. Кто что посоветует почитать? В частности чтобы там было за профилировку запросов, планы выполнения, индексы, нормальные формы - и всю хуйню что чаще всего спрашивают
>>2436986 На своих проектах довольно редко юзаем чистоганом. Только если какаято специфичная хуйня, которую ОРМ осилить не может. Как правило это если он генерит какуюто медленную поеботу, или же какой нибудь долбоеб решил динамические свойства объектов реализовывать через добавление колоночек на лету
>>2436974 ОРМы нужны для простой вещи - загрузить строку в виде объедка. Те кто пытается надрочить там обжект квери языки, это долбоёбы с патерном головного мозга.
Чет не въехал, а как именно DISTINCT определяет уникальные значения? Вот я во всеми известном ресурсе сделал select с distinct на 2 поля - страна и город, но там все равно попадают одинаковые страны и города. как оно работает?
>>2437256 Вся строка - ключ. А иначе подумой, что бы ты получил, если бы остались только уникальные страны и уникальные города? Это были бы записи, не имеющие отношения к исходным данным в бд.
>>2436974 >Как будто блять кто-то до сих пор не хуярит своё говно через ORM. Если шлепаешь CRUDы, то да. Как только логика чуть сложнее, то пиздец ты под эту ебучую орм начинаешь подгонять необходимый sql запрос, в конечном итоге тебе нужно одновременно знать и sql и как при помощи orm накостылить этот запрос. Что в рельсах, что в ларавеле бесило этой хуйней заниматься, а писать чистый запрос не по феншую. Уже давно пишу чистые запросы и это вообще кайф, особенно когда поднимешь локальную базу и настроишь всё в ide там почти все автокомплитом высекается. И можно уже по необходимости для каждого запроса свои структуры накидать, используя только нужные столбцы
Как же неохота работать. Как себя наградить, чтобы часочек сегодня пописать код? Я уже и подрочил и вкусненькое поел. Если не поработаю завтра будет стремно перед пмом отчитываться. Хотя тасочка до пятницы. Но хочется сказать ему, что там немного осталось, когда уже все давно готово.
>>2437924 Грубер это классека, была такая ещё совковая методичка из ранних 90-х, лол. Но там sql89, или это какое-то обновленное издание? Местечковых хуев не знаю.
>>2437924 Новикова читал. Вполне неплохо. Для того, чтобы втянуться самое то. В отличие от других пособий, кроме того как пользоваться, объясняет ещё почему так сделано и как оно работает. Упор в книге идёт на постгрю. Но нужно искать второе издание. В первом только, так сказать, ознакомительная часть. Во втором же, появилась часть с деталями. Единственное, это все же учебное пособие и требует какой-никакой базы. К примеру, главу с формализацией аномалий конкурентного доступа и уровней изоляции транзакций без мат. базы читать и осознавать будет тяженько.
Есть таблицы на постгресе: 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 в моём кейсе это что-то типа индекса массива, а не индекс таблицы.
>>2438026 Посмотри блять на ссылку и скажи, куда ты там собрался устанавливать вот это: > To install the dbms_random package, you need to run 4 scripts when connected as the user SYS or INTERNAL
В постгресе есть бюлтины для этого, вот только все инструкции или на уровне хэлловорлдов с простыми селектами, или вставляют значение в таблицу.
Как в запросе сделать проверку на наличие двух и более записей с идущими подряд датами? Типа 2022-08-15, 2022-08-16, 2022-08-21 - берём все, а 2022-08-15, 2022-08-17, 2022-08-19 - нахуй. Можно ли так вообще или надо в коде проверять это?
Двач, поясни за Consistency. Я читал все эти примеры про согласованность данных, но нахуя эта буква в аббривеатуре ACID, если согласованность прямо вытекает из бизнес логики приложения и атомарности транзакций? Как так получается, что в каждом учебнике пишут, что ACID - набор требований к транзакциям, но согласованность данных это во-первых зависит от бизнес логики, а во-вторых вытекает из Atomicity?
>>2439272 Дать ему пошурудить в твоей дырявой базе данных, проникнуть в его оконную функцию. Пошалить с его табличным выражением. Изолировать свою транзакцию на 3/4 в его сессии.
>>2440127 > Представь что серверов несколько или ты в любой момент выдергиваешь шнур и выдавливаешь стекло компьютера. И транзакция откатится в соответствии с atomicity, придя, как следствие, к consistency.
SELECT * FROM mytable WHERE mycolumn = ANY('{JOPA, HUI, PIZDA}'::text[])
Соответственно он возвращает мне строки где mycolumn какое-то из значений в массиве. Если например нашел только HUI и PIZDA то вернет 2 записи. Вопрос - можно ли сделать так, чтобы если значение не находилось все равно бы возвращалась пустая или определенная запись?
или вместо NULL что-то еще. Причем важно чтобы сохранялся порядок элементов в переданном массиве, то есть в этом случае 'JOPA' вошла первой, и ее ответ был бы первым
Сап аноны, говнокодил на разных диалектах SQL, теперь надо перекатится на постгрес, он местами довольно сильно отличается, как быстро перекатится? Что почиткать\посмотреть, с учётом того, что все конструкции sql я знаю?
>>2443993 Тащемта upsert производится по конфликту constrain t. merge работает по другому, он глядит если строка не сметчилась то тогда ее вставляет. Тут надо отправлять 2 запроса - update from select (с inner join) и insert from select (с left join чтобы спалить строки которые не сджойнились)
>>2445763 Ну алгоритм тот же самый. Вопрос был про мерж, предложена мною конструкция повторяет мехнизм работы мержа, и может быть использована в постгрес. Конкретизирую мы не используем insert ignore или другую подобную конструкцию.
Котаны, подскажите хорошую современную книгу по теории БД. По работе я постоянно работаю с базами данных, и порой коллеги оперируют некоторыми терминали, которые я не понимаю: например такими как "нормальная форма", write-ahead logging и прочими. Приходится это всё гуглить по отдельности. Хочу получить системные знания. Желательно чтобы эта книга или курс лекций были не огромными и не содержали в себе слишком глубокого погружения в практические аспекты использования баз данных, как например изучение языка запросов, но содержали знания о разных типах БД: не только реляционных, но и о колончатых, графовых, time-series, распределенных и прочих.
>>2447211 а хуй знает. пора бы привыкнуть что книг ориентированных точно на тебя нет.
работать продолжайц.
Дейта прочитал? Красную и вторую книги,я про "SQL и реляционная теория" ? "Postgresql 14 изнутри" ?
вот еще что я хочу прочитать в ближайшие годы: Daniel_Nichter_Efficient_MySQL_Performance_Best_Practices_and_Techniques.epub "Database tuning principles 2002 .pdf" (старинная, конечно, но меня привлекают книги где чуваки толкают теорию, а не т.н. бросаенс)
>>2447252 Спасибо за наводку на Дейта, погляжу. Честно говоря, не хочется слишком много внимания уделять реляционной модели. У нас на работе такие БД в меньшинстве.
>>2424142 (OP) Господа, с высоты вашего опыта подскажите литературу по MS Sql для сис админа. Решил слегка апнутся в знаниях, но даже не совсем понимаю, что требуется от админа в плане баз данных, кроме как бэкапить их. В общем нужна книга которая затронет большую часть функционала именно администрирования БД.
Суп, двощ. У меня элементарный вопрос: хочу прочекать архив сообщений от ICQ хранящийся в формате qdb, но есть одна проблема - собственно, колонка, в которой находится непосредственно сообщение, заявлена с какого-то хуя то ли как CHAR то ли VARCHAR и, соответственно, обрезается на 255 сабжей. При этом, я точно помню, что в клиенте такой хуйни не было, т.е. дата в файле не должна быть проебана? Почему так и что можно поделать? Сразу оговорюсь, что я ни разу не кодер и не оператор баз данных, а хуй простой; скл вчера впервые скачал в виде плагина для лисы и только знаю 3.5 команды для вывода и сортировки инфы.
>>2450176 Шо е бiг дата? Какой набор инструментов ты подразумеваешь? База SQL учится за 2 недели если сильно хуй не пинать и не быть дауном, если одно из двух то месяц, если оба то как повезёт.
>>2450235 зная только SQL можно ли найти РАБоту? Какой минимальный габор программ нужно знать? Просто везде пишут прям про вообще дохуя какое кол-во знаний, вплоть до бизнес процессов. Так ли это, действительно ли надо 2 года дрочить, чтоб стать дата сайнтистом (или кем нить там бля хотя б)?
>>2450262 Ну смотри, я так сам устраивался и кореша своего устроил: учишь тупо SQL хотя бы чтобы left/right джоины нормально понимал ну и там группировки, оконные функции даже не обязательно и пиздуешь устраиваться в техподдержку Л2, не на телефон а инциденты разбирать, там платат по хуйне, но с годом опыта там уже можно качать права на аналитика 100к+ рекорд моего кореша за 6 месяцев на 140к, он он на двух разных техподдержках успел поработать перед тем как в аналитику укатиться. Предметная область это конечно плюс как и всякие UML/BPMN, но можно и без них, по сути найти чела который шарит и за финтех и при этом кнопки мыши не путает тяжело.
>>2449955 А как тогда клиент читал эти данные, если они уже были заданы таким образом? Сам-то я ничего не менял. Может ли такое быть, что тип данных поменялся от одного факта открытия базы в сторонней программе?
>>2450536 Так щас клиент запустить нельзя уже. Там вход через авторизацию на серваке, который много лет назад закрыли и всю инфу потерли. Новый клиент старые учетки не поддерживает.
>>2450733 Так о чем и речь, что сразу видно, что курс (и эту пдфку на скрине) писала женщина из универа возрастом в 40-45 лет. Современный поридж в своем курсе про М и Ж в bool уже вряд ли напишет.
Куда дальше развиваться?
Аноним31/08/22 Срд 11:47:26№2450766191
Здравия / Сейчас работаю на заводу со стеком Delphi + SQL. Создаю автоматические отчёты. Это моя первая работа. Практически дочитал Книгу "Изучаем SQL. 2021. Алан Болье." одна глава осталась. Собственно вопрос. Какие есть ветки прокачки? Куда дальше можно развиваться? Посмотрел объявление с своем городе есть позиции SQL разработчика и Разработчика БД. В основном нужны знания PostgreSQL. В книге упоминалась Big Data, тоже интересно. Есть ещё Аналитика данных, что вроде про SQL и нейронки. В общем, что думаешь анон?
>>2445760 Ну я например загрузил жсон с пачкой каких-то значений. Для каждой надо попробовать найти запись по какому-то полю в базе, если нашлось сделать что-то одно, если нет что-то другое. Если по одной долго, если пачкой запрашивать, то непонятно по какому значению что-то нашлось а что-то нет. Конечно можно в коде джоинить или как я в итоге сделал - отправлять батч из n селектов, но интересно можно ли одним запросом как-то так запросить, и еще обязательно без хоронимок.
Здравствуйте. Помогите пожалуйста с выбором СУБД. Сейчас на начальном этапе обучения, поэтому встал выбор между Oracle и PostgreSQL. Хотелось бы, чтобы в дальнейшем одного знания СУБД хватило для поиска работы. То бишь базовый минимум, без особого требования.
>>2451458 Для базового минимума хватит и mysql, но он нахуй никому не всрался в 2022. Учи постгрес, это сейчас дефолтная СУБД, к тому же достаточно навороченная хоть для энтерпрайза. При необходимости пересесть на оракл легко переучишься.
Как в постгресе обновить большое количество строк в таблице если у каждой строки свое значение?
Вот обычный запрос на UPDATE: UPDATE employee SET occupation = %value% WHERE age < 18
Обновляем все столбцы где age < 18 указанные значением. Но что если у нас куча разных строк в каждой из которых свое уникальное значение name которым надо обновить строку с конкретным айдишником? Шо делать?
>>2452102 Если через питон и алхимия например то решается обычным итеративным подходом:
data = [{'id': 108, name='Peter'}, {'id': 213, name='Mary}] for row in data: ----await session.execute(f`UPDATE employee SET name = {row['name']} WHERE id = {row['id']}'`)
Но если высирать по 1 UPDATE на каждую строку это пиздец, что если таких строк 100к? А миллион? Они ж никогда не выполнятся.
>>2452121 Ещё из вариантов - создаёшь временную таблицу, инсертишт в нее, а потом: UPDATE target_table SET value1 = tmp.Value1, value2 = tmp.value2 FROM temp_table tmp WHERE target_table.id = tmp.id;
>>2452347 Похуй, что толсто, но постгрес подходит для любых объёмов проекта, хоть пет с 5 таблицами, хоть энтерпрайзный легаси монолит с 3000 таблицами и миллионами записей.
>>2452371 Кто хейтит? Негатив в сторону постгреса слышно только от NoSQL-шизиков, но они ненавидят одинаково все РСУБД, что постгрес, что мускл, что оракл.
>>2452371 Его хейтят только всякие макаки-веб мастера, ибо сложна, вакуум какой непонятный тюнить надо. Да и другие настроечки тоже неплохо бы покрутить, чтоб производительность лучше была.
>>2452683 Это первое что я сделал. Индексы расставлены. Но эксплейн не о чем не сказал кроме 958 rows в связующей таблице. И у меня еще 5.7 мускул а там нет доп. инструментов для анализа как в 8
>>2452245 Не нужны никакие временные таблицы если используешь subquery
UPDATE target_table SET value1 = subquery.Value1, value2 = subquery.value2 FROM (SELECT id, value1, value2 FROM shitty_table) as subquery WHERE target_table.id = subquery.id;
Чой-та я застрял с Berkeley DB, но это наверное с сишном треде надо интересоваться. Да, точно, не буду вам ебать мозги с вопросами о программировании. Но раз уж зашёл сюда, то вот интересно - есть или нет аналог схемы в базах Berkeley DB? Думаю что нет, но может быть ошибаюсь?
>>2452697 Ну так я писал про вариант, когда у тебя данные для обновления только на клиентской стороне есть. И их много. Вот в такой ситуации мы обычно создаём временную таблицу, заливаем ее через COPY FROM stdin и уже на стороне бд обновляем из нее через UPDATE FROM.
Какие команды и что чаще всего вы используете для работы? Я сейчас видео смотрю и пока только самая база идёт, ну и не хотелось бы тратить время на запоминание вещей, который кроме как в теории не пригодятся.
Возможно ли как-то динамически обновлять БД на основе входящих данных? Сейчас я получаю данные из гугл таблиц, читаю и записываю в базу. Строки могут удаляться и добавлять. Я пока додумался только до того, чтобы дропать таблицу каждый раз, когда приходят новые данные
Подключаюсь к mysql 8 из mysql workbench методом tcp/ip поверх ssh
mysql 8 стоит в контейнере докера что настраивает isp на отдельном порту. После половины дня консоли удалось понять что как работает и настроить воркбенч на синхронизацию и просмотр статистики, но ощущение, что часть функций не работает (скрин + другой порт в характеристиках подключения, 06 вместо 10), пытаться решить проблемы или может лучше подождать чистого сервера, настроенного без Lamp? Ну а может лучше попробовать какие-то другие редакторы, ибо этот крайне ограничен? Успел познакомиться с dbForge, но бюджет не выделят пока, да и модель в воркбенче, и так изучать пришлось. isp просит не удалять поставляемый с собой сервер марьи c устаревшей версией, так как по ней он конфигурирует контейнерный докер Mysql 8
>>2424142 (OP) Есть очень жирный по памяти select-запрос. Жирный он потому что таблицу на ~ 400к данных мы джойним с самой собой, а затем сверху еще 2 джойна кидаем. При тестах вообще изи улетаем за оперативку, а на проде эта таблица жирнее раз в 8-10, то есть там точно пиздец прям даже если RAM накинуть.
Как быть? Есть идеи разбить 1 запрос на несколько с помощью LIMIT/OFFSET, это вообще поможет? Если нет, то какие варианты?
>>2461713 Можете спросить "а нахуя такие большие таблицы между собой джойнить"? В задаче надо узнать, существует ли в этой таблице (items) другая запись с определенными условиями или же нет. В зависимости от этого, проставить поле mode. Без self join такое хрен знает как сделать. Я мог бы постараться просто выгрузить эту таблицу целиком в питон и там уже искать есть ли совпадения по условиям, правда хз за сколько это все выполнится, есть подозрения что надо будет ждать несколько часов бля а то и дней.
>>2461886 >Редис же 1поточный. Это ж большой крест, верно? Тебе что бы выжрать всю однопоточность редиса в одном инстансе нужно очень постараться, для уберхуйлоайда у них кластер есть
Пожалуйста, помогите. Очень нужно сделать эту хуйню. Как блядь выделить две таблицы с одной хуйней? http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all Нужно вывести все города(City) из Customersи Suppliers в алфавитном порядке. Я пробовал через Джойн, но походу на сайте из ссылки нельзя блядь это сделать - пишет ошибку. Помогите! Пожалуйста.
>>2462024 Блядь, стоит только задать вопрос, как сам находишь решение? Что это за хуйня? Три часа сидел блядь, и только задал вопрос на дваче, как через пять минут нашел решение. SELECT City, Country FROM Customers UNION SELECT City, Country FROM Suppliers WHERE NOT Country='Germany' AND NOT Country='France' AND NOT Country='UK' Order by city; ПИЗДЕЦ
>>2462127 SELECT MUSICIANS.GITHUN_NICKNAME FROM MUSICIANS, TRACKS WHERE TRACKS.MUSICIAN_ID = MUSICIANS.ID AND TRACKS.TRACK_NAME = 'Calm'; Подставь правильные названия столбцов, их на картинке не видно.
>>2461713 Решение этого вопроса сильно зависит от того, как эта таблица используется. Вангую самоджоин делается исключительно для того, чтобы реализовать вложенные списки для серверного рендера.
Есть три таблицы в постгресе: "коллекции_залуп", "залупы" и "связь_залуп_и_коллекций". Правила инициализации таковы: 1. Коллекция залуп: - пустая, чтобы пользователь мог создать коллекцию и только потом складывать в неё залупы когда-нибуть потом. - с рефами на существующие залупы, чтобы пользовать мог создать коллекцию из существующих залуп. - с иницализаторами залуп, чтобы пользователь мог добавить новые залупы коллекцией. 2. Залупа: - должна принадлежать как минимум одной коллекции, так что если в инициализаторе нет инфы о существущей коллекции, то нужно создать пустую и в неё сложить новую залупу. Чтобы пользователь мог добавить залупу и сразу же складывать/добавлять другие в схожую коллекцию. - Если же есть инициализатор коллекции, то создать коллекцию с него по всем правилам инициализации коллекции и сложить в неё новую залупу поверх.
Всё это конечно должно происходить транзакционно. Сначала пробовал реализовать это на уровне приложения, но малость подохуел от бесконечных итераций по хэштаблицам/массивам их их трансформацией туда и обратно. Потом решил написать портянку из CTE на каждый инициализатор и сейчас так и работает. Проблема в том, что если я захочу, например, добавить таблицу с гондонами для залуп с примерно такой же логикой как иницализация залупы без референсов (т.е. новый гондон -> новая залупа -> новая коллекция залуп), то мне нужно повторять всю логику предыдущих запросов в новом, что не айс в плане поддержки кода. Это юзкейс для хранимых процедур?
Пожалуйста, помогите решить задачу. Я так понимаю тут нужно делать через JOIN? Если да, то у меня нихуя не получается, если нет, подскажите пожалуйста через что. Нужно вывести имена всех людейcustomers, которые покупали морепродукты categories https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join Как блядь это сделать?
>>2462901 можно просто джойнить все подряд, пока не дойдешь до нужной таблицы SELECT c.CustomerName from orders o join customers c on o.CustomerId = o.CustomerID join OrderDetails od on o.OrderID = od.OrderID join Products p on od.ProductID = p.ProductID join Categories cat on p.CategoryID = cat.CategoryID where cat.CategoryName = 'Seafood'
Господа, насчет упражнений. Вижу в шапке sql-ex и codewars. Но нет ли более годных альтернатив? sql-ex смущает тем, что древний как кал динозавра, мне кажется, что в sql уже дохуя было фич новых завезено, хотя могу ошибаться конечно. codewars супер так-то, я там по питону всякое решал, но вот после питона раздел c sql выглядит заброшенным абсолютно.
Или не бухтеть и жрать что дают?
Мне хочется практики задач на относительно продвинутом уровне, в частности там оконные функции и такое прочее.
>>2463317 >>2463091 И еще один вопрос. Почему 6000 записей ? Там же столько нету во всех таблицах? И как вывести рядом таблицу с морепродуктами, или типом категории?
>>2457364 Охуеть. Пытаюсь вкатиться, изучаю питон и понял, что передо мной стена одного питона, проанализировав рынок понял, что надо уметь бд и через них намного проще вкатиться. Но вот это '^П.*а$'); просто пиздец синтаксис
>>2424142 (OP) Нах нужно S3 хранилище? В смысле в чем его преимущество перед рсубд или nosql? У нас все спорят, нужно ли нам s3 для нашей биг даты (таблицы постгреса на проде весят под 90 гигов), а я помалкиваю т.к. не шарю а вопросы задавать ссыкую т.к. позиционировал себя как скилового миддла с 2.5 годами опыта (припиздел)
Делаю 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?
Сап повелителям РБД. Помогите студентоте, с проектированием базы данных интернет магаза, одно дело писать запросы а другое дело их проектировать. Вот у меня есть такие вопросы
1. В каком виде хранить картинки? Почитал я статьи там пишут что нельзя хранить пикчи в БД, оно и логично, неужто я могу ограничится тем что просто создам папку куда буду все скидывать а в бд буду хранить ссылку на файл?
2. Насколько бд проста в масштабируемости по вашему? Ну то есть, если я захочу продавать кроме материнок с видюхами ещё и цпу, то мне остается просто добавить таблицу с цпу не меняя все отношения
3. Как хранить пароли юзверей? Тупа в таблице захешировав? Или есть более элегантный способ?
4. Насколько сильно нужна дрочилово с внешними ключами? Я вот ещё слабо понял в их концепциях да нихуя не понял если честно
>>2467155 1 - просто путь, да. 2 - Тут надо много больше табличек, чел. Для начала корзина, там номер заказа и айди юзера, потом табличка с заказами, где номер заказа, номер продукта, количество. В продуктах номер продукта, название, ску, описание и прочая залупа, которая есть у всех продуктов. Дальше табличка с типами продуктов и вспомогательная для связи продукта с типом. Дальше табличка с опциями типа сокет, объем памяти и т.д. и вспомогательная для связи продукта с этими опциями. Это навскидку. 3 - соленый хеш + рандомная соль отдельно на каждого юзера, это как сейчас делают, тебе для лабы достаточно просто хеша. 4 - Нужно, это несложный концепт, кури. 5 - Нужно, это более сложный концепт, кури.
Сап, я быдло! В соседнем треде увидел упоминание NoSQL, гуглить лень, объясните в двух словах, нахуя оно нужно и чем оно лучше SQL. Про реляционные бд знаю, про sql тоже.
>>2472490 Ничем оно не лучше, у него задачи другие. Реляционные для OLTP (много маленьких транзакций, есть почти во всех приложениях), NoSQL для аналитических запросов, отчётов, временного хранения данных, кешей с быстрым доступом и т.д. NoSQL - это не название какого-то языка запросов, а просто все СУБД, которые нельзя отнести к реляционным. У NoSQL неи стандартного языка запросов, в кажой такой СУБД свои союственные. В реляционных БД у тебя таблицы с типизированными столбцами, первичные и внешние ключи, нормализация, джойны и всё сопутствующее. В NoSQL может быть что угодно, например, есть key-value (это можно сказать гигантская мапа, где ты под указанным ключём сохраняешь какой-нибудь объект) и есть документные (когда вместо таблиц у тебя коллекции объектов - "документов" произвольной структуры без схемы, можно думать как о хранилище жсонов).
>>2472490 Это вопросы уровня "чем тойота лучше чем фольксваген?" или "чем go лучше чем typescript?". Nosql баз данных мильярды, есть любые прибамбасы, которые только душе угодны. Но я пользуюсь nosql из чисто прагматичных соображений, потому что ставить sql-базу западло, а за облачную nosql платишь 3 копейки в месяц, она не расходует память сервера. Мне не надо её настраивать, не нужно копаться в конфигах - я подключился и мне заебись.
В плане работы - другая идеология, вот и всё. В sql всё задрачивание идёт на построение запроса, а в nosql всё задрачивание идёт на организацию хранения данных. Соответственно, если ты любишь строить хитрожопые запросы - ты берёшь sql. А если ты любишь хитрожопо хранить данные - то берёшь nosql.
Скорость/масштабируемость у nosql замечательная. Ответ где-то в районе 8 миллисекунд. При чём не важно, сколько у тебя данных в базе, хоть 1 террабайт, хоть 1 мегабайт, по барабану вообще. На производительность не влияет никак.
>>2473010 Не существует. Сложности всегда только с эффективностью доступа и представлением в виде реляционной модели, например, иногда приходится строить поверх реляционной модели другую модель, где в конечном итоге всё равно все сводится к таблицам и ключам. Нереляционные СУБД берут не потому, что в реляционных невозможно что-то сделать, а потому что для каких-то моделей данных они работают эффективнее, чем реляционные.
>>2473020 Я просто где-то слышал что некоторые сетевые или там графовые модели с рекурсией не могут быть представлены в виде реляционной модели. Поэтому и переспросил, какбэ.
>>2473046 Да, вот ещё, чё-то вспомнилась мне неполнота по тьюрингу языка SQL: https://neerc.ifmo.ru/wiki/index.php?title=Тьюринг-полнота#SQL и возможность костыльного дополнения с помощью каких-то неведомых расширений, этого языка до тьюринг-полной системы. Почему тьюринг-полнота? А потому что речь о представлении любых моделей данных, какбэ, и если уж моделировать любую модель, то какбэ должна бы быть тьюринг-полнота. Почему так? Да потому что сильный тезис Чёрча-Тьюринга-Дойча, вот почему: https://ru.wikipedia.org/wiki/Тезис_Чёрча_—_Тьюринга
>>2473046 Могут, сеть - это тупо таблица свяхок, там никакой рекурсии нет. >>2473047 Это уже не SQL, да и расширения относятся к логике обработки, а не к самой модели данных. Но отсутствие полноты по Тьюрингу не мешает хранить представление любых моделей данных.
>>2473056 Ты относишь логику программы к модели данных? Если не относишь, то рекурсия в программе отделена от реляционной модели, никакой связи между ними нет, значит, представить можно любую модель. Если относишь, то в реляционной модели данных вообще невозможно представить никакую модель данных, там тупо нет понятия логики. Хранимые процедуры также не имеют отношения к реляционной модели. Логика относится к программе и может вообще ничего не знать о том, как данные хранятся, ей не важно, постгрес там или монга.
Это ты тот анон, который пытается впилить sqlite в наноборду?
>>2473060 >Ты относишь логику программы к модели данных? А, ну да, описание рекурсивной программы - это же не сам рекурсивный процесс её исполнения, это просто данные, ну там описание цикла бесконечного, или описание вызова функции из этой же функции... Сам процесс выполненения программы - это уже работа с этими данными, то есть как-бы процесс обхода данных в базе данных, и если он бесконечен, как бесконечные циклы, то такой процесс невозможно смоделировать даже на машине тьюринга, исходя из того же сильного тезиса, в контексте непрерывности и бесконечности. А если процесс исполнения конечен, то это тупо конечная последовательность выполнения элементарных операций, и она может быть представлена в виде таблицы в БД, как описание любого другого конечного процесса.
>Это ты тот анон, который пытается впилить sqlite в наноборду? Да. Ой блядь, насчёт этой идеи. У меня тут, понимаешь ли, пришло время переустанавливать грёбанный шиндошс. Всё слетело нахуй, и я уже забыл чо хотел там. Уебунту поставил, mono тоже сбилдил вроде, пароль от гитхаба схоронил... А вот чо дальше со всей этой хуетой делать - хуй знает, нет чёткого плана, да и интереса как такового, в том числе и финансового - тоже нет, вообще.
Огрызки кода, недопиленные, ну вон они - в бранчах на гитхабе висят, в issues тоже есть некая инфа, я там пилил короче пира, раздающего хэш-таблицу, и отдельно - саму хэш-таблицу KeyValue на sqlite, с Mono.Sqlite.dll. Она и в шинде работает, и в уебунте, какбэ. Но всё это собрать вместе, не получилось, хотите сами въебенькайте, а то меня уже заебало.
А, да, хотел короче всю эту хуйню замкнуть на хэш-таблицу, вида: |hash|ReplyToHash+PostMessage| и короче приебенить handler в DbApiHandler.cs, чтобы по хэшам отдавать исходники нанопостов, и так синхрить базу, между live-server'aми. А потом вообще решил заебенить пира: https://github.com/username1565/CSharpServers/tree/Peer чтобы он в локалке находил других пиров мультикастом, и коннектился к ним, и чтобы короче децентрализованно синхрить хэш-таблицу эту, ебучую. Когда полная децентрализация, то нет центров, а значит нихуя нельзя разбомбить ракетами, и поэтому короче наноборда неубиваемая будет. А то тут, блядь, всякие над головой летают, всякие иранские дроні-камикадзе shaheed-136 и Mohajer-6, калибры, искандеры, сукка, сверхзвуковіе шеститонные советские ракеты X-22, которые напиздело у народа хуйло, спиздив ещё и ЯО СССР, перед тем как хуйло предало народ СССР. Так что сливайте бекап наноборды и расшарьте короче всеобщее достояние это, няшное, а то так и будете на подмочухном мейлаче подхуйловском, обезьяне-маме пасскоды покупать, пока она вакабу шатает, образом - пиздец каким обратно-несовместимым.
>>2473010 Это как бы на поверхности. Банально произвольную иерархию объектов уже проблематично отобразить в классических реляционных отношениях, если на не наложить определенные ограничения. Гугли object–relational impedance mismatch.
>>2473231 Хотя опять же, описания объектов - это просто данные, а сами взаимосвязи между свойствами этих объектов, могут быть выражены в виде логики работы программы, а не в виде реляционных связей.
>>2473228 Можно, конечно, использовать РСУБД для хранения данных в EAV ( https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model ) Но это уже не реляционная модель. Это просто способ хранения EAV модели. У почти все операции реляционной алгебры сразу нахуй идут. Плюс у тебя все ограничения целостности, которая данная модель предоставляет тоже проёбываются. Причём даже на уровне типов. Реляционная модель это не про таблички, а про отношения и операции и связи между ними. Причём операции в это модели конкретные. Ещё раз. В виде набора табличек, да, можно почти любую модель данных представить. Но если ты над ней не можешь выполнять операции реляционной алгебры - то это уже не реляционная модель.
У меня есть три таблички A, B, C. Когда я добавляю данные в таблицу A или B, у меня автоматом конкретно выбранные столбцы из этих таблиц попадают на новую строку в таблицу С
>>2474616 Я перефразирую вопрос. Можно сделать так чтобы в один столбец могли писать несколько таблиц. Условно таблица №1 сделала запись, а когда таблица №2 будет делать запись то она запишет в следующую строку
>>2474729 >Я перефразирую вопрос. Можно сделать так чтобы в один столбец могли писать несколько таблиц. Конечно можно, при инсерте создаёшь создаёшь строку в таблице, получаешь её уникальный идентификатор и передаёшь его в другую.
>>2475357 >А потом секунд 10 проверяешь целостность данных на уровне приложения. Чё так проверять? Модель импортируешь и всё. Mongoose там какой-нибудь или dynamoose/dynamodb-onetable.
>>2474616>>2474666>>2474729 Это называется хранимая процедура или триггер (они могут быть довольно-таки страшненькими, вот посмотри на рисунок). Имеет смысл этим пользоваться в том случае, когда резервная копия базы данных создаётся не ночью раз в сутки, а прямо во время изменения данных в таблицах.
То есть, например, к каждой таблице добавляется таблица "history" с теми же столбиками и ещё несколькими (каким было действие, кто его выполнил и когда) и при каждом добавлении/изменении/удалении в таблицу "history" сбрасывается предыдущая версия строки из основной таблицы.
Или, например, создаётся вторая точно такая же база данных (на другом сервере) и при каждом добавлении/изменении/удалении строки в таблице в такую же таблицу в другой базе данных отсылается новая версия изменённой строки.
А если твой вопрос был в том, чтобы добавить строку в одну таблицу, получить её первичный ключ "id" и затем добавлять строки в другие таблицы вместе с полученным ключом "id" (где он будет уже внешним ключом), то это называется get last insert id и есть в справочном руководстве по любому языку погромирования.
И никак нельзя пройти мимо книги "Изучаем SQL" (Алан Бьюли), это самая скачиваемая книга с сайта и когда-то мне её очень недоставало!
>>2475661 Конечно, свидетели nosql любят заливать про БЕСКОНЕЧНЫЙ ГОРИЗОНТАЛЬНЫЙ РОСТ, ОХУЕННУЮ СКОРОСТЬ, ПРОСТОЙ, УДОБНЫЙ И ПОНЯТНЫЙ АПИ, а как копнёшь, то сразу всплывает анальный вендорлок, самопальный язык запросов и игнорирование ACID.
>>2476718 Стаковерфлов предлагает костыли ебаные: передавать массив, передавать название таблицы строкой, создавать AGGREGATE FUNCTION и подобное. Пиздец какой-то.
>>2424142 (OP) Надо сджойнить таблицу на 200 млн строк саму с собой. В постгрес мы просто улетаем за память и пиздец. Переработал и теперь хожу в цикле - джойню эту таблицу саму с собой но по чанкам - по 100к строк за раз - теперь это все по памяти терпит но выполняет сцуко долго
Подозреваю для такого лучше просто использовать нечто другое а не постгрес. Что и как юзать?
>>2478829 SELECT thread.id AS thread_id, thread.name AS thread_name, last_post.date AS last_post_date FROM threads as thread JOIN ( SELECT post.thread_id AS thread_id, MAX(post.created_at) AS date FROM posts GROUP BY posts.thread_id ) AS last_post ON last_post.thread_id = thread.id ORDER BY last_post.date DESC;
>>2479003 > кто так запросы-то пишет? Успешные, здоровые люди, которые могут воспринять и распарсить у себя в голове абзац плотного текста. А ты - зумер с клиповым мышлением. Если в тексте больше трёх слов - теряешься, паникуешь.
>>2479038 Дед, спок. Ты же понимаешь, что когда компания наймет несколько зумеров и они переработают твой говнокод, сделав его пригодным для рефакторинга любым человеком, то окажется, что твои знания на уровне нынешнего 2 курса нахуй не нужны и ты пойдешь на досрочную пенсию из компании?
>>2479003 Всё понятно, просто форматирование хуёвое. Я иногда так пишу, когда нужно не забыть мысль и по-быстрому составить запрос, но потом всегда привожу к читаемому виду. Хуйня по сравнению с запросами на 500 строк для всяких отчётов.
>>2440122 Отвечаю на этот пуст спустя 2 месяца кажись (?).
>>2450718 этот скрин тоже я оставлял. Он как раз из пдф-ки курса Дальневосточного универа, который мне повезло проходить бесплатно за счет того что я безработный сыч (по бумагам, фриланс наше государство не учитывает).
Короче. Оконные функции у нас как раз одна из последних тем. Табличные выражения и всякие вложенные запросы тоже проходили. Всякие методы для работы с временем, всякие IF и CASE тоже прошли. Все эти лефт, райт, кросс джойны и прочее, групповая выборка, корректировка данных (создание новых таблиц на основе старых, изменение содержимого таблиц, удаление строк, связывание таблиц через внешние ключи и прочее).
Вот блин а где почитать про "изолирование транзакций"? И вообще накидайте редких тем, которые можно/надо подучить на джуна чтобы знать какие примерно каверзные вопросы могут спросить на собесе.
Пытаюсь динамические запросы раскурить в mssql, чето разобраться не могу, может кто из ананасов сталкивался. Хочу файл прочитать, но чтобы путь к нему можно было через переменную передавать:
>>2486792 В одно рыло - это когда знаешь, что за неочевидная логика скрывается в очередном триггере или в констреинте на столбец. И исходник просто так хуй посмотришь, всё хранится в базе. Как только на проекте появляется хотя бы ещё один разраб, поддержка превращается в ад.
Предметная область оценки по предметам в университете, у меня получается так, что учебная дисциплина может быть разной, в зависимости от семестра. То есть в бд, матан за 3 семестр и 4 семестр должны отличаться. Но как это по человечески сделать не знаю. На ум приходят только отдельную таблицу с семестрами хранить, которая будет хранить год + булеан, второй это семестр или первый. Выглядит как то костыльно, но лучше ничего на ум не приходит
>>2487975 Тогда можно вообще забить на такую вещь как семестры. Просто в табличку Task добавить строчки Date куда будешь в стандартном формате даты заносить время получения и сдачи-выполнения задачи. И потом уже из этих временных отметок можно будет и год и семестр и прочее извлекать.
Сенсеи, волей судьбы оказался на проекте в качестве дата инженера. Хотел кежуали писать пайплайны, но стоит задача мигрировать с одной схемы на другую. Входные данные: схема в RDS c MySQL под капотом, в которой 2 таблички, но одна из них содержит текстовое поле с джейсоном, который как водится семистракчеред и от записи к записи содержит разную инфу. Помимо этого есть еще табличка (или что там у них) в DynamoDB, в которой, что интересно бля, все более менее реляционно. Выходные данные - реляционная схема, предположительно на постгресе, но в том же RDS, без NoSQL. Вопрос: Как спланировать и осуществить миграцию, чтобы все прошло гладко? Как именно осуществить выгрузку\загрузку? Мб есть для таких дел тулы в амазоне или можно в лоб скриптом на питоне? Или не в лоб и на всякий случай со сквозной записью в С3? В общем никогда подобным не занимался и не представляю как такие вещи делаются
>>2489914 > Как именно осуществить выгрузку\загрузку? database migration service погугли. есть большая вероятность, что это ван стоп шоп для твоих нужд
Там есть инструмент называется database migration service. Он замороченный, поднимает дополнительный инстанс и делает репликацию в реальном времени. Нужно только написать правильный маппинг. Единственный геморрой что там много надо пердолить настройки - vpc поднять, роли создать, source/target создать, migration инстанс поднять, целая история короче.
Либо второй вариант -> делать дамп в S3 и помощью AWS EMR делать конвертацию. Но это на порядок сложнее.
>>2489914 >есть еще табличка (или что там у них) в DynamoDB, в которой, что интересно бля, все более менее реляционно Как понять "реляционно"? DynamoDB базу надо уметь грамотно проектировать, чтобы выхлоп получить. У неё принципы работы другие совершенно, не такие как у MySQL.
>>2424142 (OP) У меня есть 200ТБ данных KV которые мне надо чтобы пользователи оперативно получали. Я бы хотел их кое как шардировать какую базу выбрать для того чтобы было это поудобнее делать, монго имхо оверкил слишком сложна. Можно попробовать потсгрес с хэш индекасами и\или каойнибудь динамодб или левел дб есть у кого опыт?
>>2490806 Гугли про виртуальную память. Будет то же, что при попытке юзануть в своей программе больше ОЗУ, чем имеется: начнёт юзаться своп на диске (если он настроен), а вместе с этим начнутся дикие тормоза. Ну а потом свалится из-за нехватки памяти.
>>2479168 >наймет зумеров После которых всегда приходится переписывать код? >рефакторинг Нахуя? >знания на уровне нынешнего 2курса В голос - современные выпускники вузов слабее птушников 20летней давности Обезумевший от эффекта свининга-хрюкера поридж совсем ебанулся. Тебя в принципе даже к мс-офис нельзя подпускать.
>>2479003 Ты же имбецил нахуй, имбецил клинический, буквальный, а не просто оскорбление, тебя либо твоя пидорашья мать в детстве йодом не кормила, либо что то другое органическое, у тебя же когнитивные способности как у собаки, тебе не то что с данными нельзя работать - ты бы охранником критические когнитивные ошибки выдавал и тебя выпиздовали бы нахуй на пенсию по инвалидности
Ой блядь. Просто пиздец. Мелкий орк ебаный. Поколение пынявого хуесоса - отличается от предыдущих даже биологически. Вас только в цирке уродов показывать. Надо валить из этой страны нахуй, тут орочий союз скуфов-собяниномишустиных и йододефицитных пердежей нахуевертил уже столько в любой сфере жизни или общественном институте что точка неспасения пройдена. Системный отказ, раковая опухоль, и любое действие не важно с какими намерениями его теперь только ускорит.
Учу 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.Есть варианты лучше?
Сап аноны! Призываю к треду архитекторов и опытнейших людей по РБД. Я сделал базу данных для интернет магазина книг (знаю что по такой теме вас заебали), оцените качество исполнения, чего не хватает, а чего в излишке. Ну и вопросов своих накидаю 1. Нужны ли триггеры в контексте моего проекта? Если да то каких? Если нет то почему? 2. Знаю jmeter и java+jdbc, думаю оценить работу БД под нагрузкой, хочу удостоверится что схема БД обеспечивает целостность данных. Скажите насколько обосновано мое решение? 3. Думаю для каждого товара давать шестизначный артикул в формате 123456. Но я хз как можно это в постгресе сделать, думаю код генерировать на стороне сервиса а в базе по минимуму держать логику. Насколько тоже это решение обосновано?
Есть две таблицы в постгресе, связанные внешним ключом. Нужно фильтровать выборку из одной по одному полю из другой. Пробовал и через подзапрос и через джоин, и там и там получается по несколько секунд, если заполнить таблички по 100к записей. Есть способ сделать это быстрее?
>>2495929 А индекс для внешнего ключа? И фильтруешь ты только по этому полю или ещё каким-то? Не запрашиваешь же ты все записи для одного возможного значения, их же десятки тысяч может быть. Если фильтруешь по другим полям, на них должен быть индекс из нескольких столбцов. Надо смотреть план запроса в EXPLAIN, там не должно быть seq scan по большим таблицам.
>>2495941 Ну я делаю выборку через рекурсивный with. Получаю временную таблицу в которой есть айдишник другой таблицы. Из этой временной таблицы мне нужны сущности, которые определяются одним полем в другой таблице. Даже если я на внешний ключ изначальной таблицы надену индекс, он никак не будет работать(насколько я понимаю) в выборке, выданной cte. >Надо смотреть план запроса в EXPLAIN, там не должно быть seq scan по большим таблицам Ну это понятно, не ясно как. Кстати explain analyze execution time вообще выдает мне 300 секунд.
Есть примерно следующего вида таблица: ID : int SerialNumber: TEXT AppID: int Port: int Address: int
Так вот. Что нужно Нужно чтобы при INSERT'е - AppID, Address - брались из "дырок", либо следующий; а Port - так же из дырок, либо из переданного массива. И чтобы при этом - оно было потокобезопасным. Т.е. можно было сделать 100 инсертов из разных потоков, и оно вставилось.
И я не знаю как сделать чтобы это работало потокобезопасно. Сейчас - костыль на уровне приложения, который ебашит очередь и по этой очереди - добавляет. Но это пиздец как медленно. 1000 записей - добавляются почти минуту. Пиздец же.
Есть в постгресе тип вида: create type entity_init AS ( id bigint, items json ) Где джейсон - массив объектов. Как джейсон массив из этих типов размотать в набор записей этого вида: ( id bigint item json ) То есть условный массив из 5 типов, в котором 5 сущностей должен превратиться в набор из 25 записей с сохранением референсов.
>>2496198 Ну. Портов всего 65535... Нужно экономить... Ну и Address с AppID - используются сторонними системами, а они не очень хорошо воспринимают дырки.
Вместо IDS_STRING подставляем строку айдишников - перечисление через запятую. В таблице store несколько десятков миллионов записей. Вопрос, дорогие знатоки: какие подводные если там будет 10.000 айдишников? миллион? 10 миллионов? Какова там будет сложность? Условный постгрес не пережрет все ресурсы по памяти и cpu?
>>2497716 Разве IN в постгресе не требует набор строк (которые не string, а row)? У тебя скорее приложуха обосрётся интерполировать строку с 10 миллионов записей, вместе с постгресом.
>>2424142 (OP) Подскажите какое-нибудь мнемоническое правило, которое позволит запомнить уровни изоляции транзакции и когда какой уровень выбирать при запросе к СУБД.
>>2498377 На собеседованиях постоянно спрашивают все уровни изоляции транзакции, различие между ними и когда какое выбирать, чтобы добиться консистентности и скорости выполнения запросов.
Урок Яндекс лицея по основам SQL. Я правильно понимаю, что они обосрались с диаграммой? Тут жанры должны быть родительской сущностью вместо фильмов. Да и вообще, там должна быть неопределённая связь между сущностями, т.к. множество фильмов может включать множество жанров, и наоборот. Тогда надо разрешать эту неопределённую связь третьей сущностью. А сейчас там какой-то бред получается: ID фильма кочует в таблицу жанров, количество жанров очевидно меньше фильмов и когда жанры закончатся, таблица жанров начнёт заполняться NULL.
>>2500756 Нет, всё там нарисовано правильно. Жанры ничего не знают о фильмах, а фильмы знают, к какому жанру они относятся, и ссылаются на запись в таблицу жанров через столбец genre с внешним ключом на genres.id. К слову, название столбца "genre" сбивает с толку, его лучше было назвать genre_id. > Да и вообще, там должна быть неопределённая связь между сущностями, т.к. множество фильмов может включать множество жанров, и наоборот. Тогда надо разрешать эту неопределённую связь третьей сущностью. Наверняка для примера упростили. Не будут же про связь "многие-ко-многим" писать в самом начале основ SQL.
>>2500930 Да, чет я не подумал, что там ссылка идёт на genres.id. Но я бы всё же наверное стрелочку повернул, чтобы фильмы зависели от жанров. Тогда бы не нужно было создавать этот альтернативный ключ films.genre, он бы сразу шёл из внешним ключем из таблицы genre.
>>2500948 Фильмы и так зависят от жанров, стрелка показывает на зависимость. Просто такое обозначение. Если бы в таблице genres был внешний ключ, в ней пришлось бы создавать кучу одинаковых записей с одними и теми же жанрами для разных фильмов, и о нормализации пришлось бы забыть.
>>2500756 Да, чот мне на курсах дальневосточных лучше объясняли. Там сразу рассказывали про всякие внешние ключи и писали сразу genre_id, а не обычный id что немного с толку сбивает.
К нам на проект недавно пришел зумерок, который принялся визжать что мы "работаем неправильно" т.к. на таблицах нет нигде индексов. Довольный засрал все индексами но охуел, когда я показал ему планировщик и записи из каталога pg_stat_all_indexes которые говорили что ни один его индекс так и не был использован
И да, это был не джун. А мидол с заявками на сеньора
>>2503091 Индекс - преждевременная оптимизация. Если у тебя меньше 20К строк в таблице то можно ставить анус что планировщик так и не задействует index scan.
>>2503150 >Если у тебя меньше 20К строк в таблице то можно ставить анус что планировщик так и не задействует index scan. когда как. Ну а ты в свою очередь поставил бы поставить анус, на то, что через год там будет все еще меньше 20k?
>>2424142 (OP) PostgreSQL Хочу такую систему, что инсерт происходит в два этапа: 1. Сначала во временную таблицу, откуда их можно прочитать, показать пользователю, а потом спросить, будет он их коммитить или нет 2. Собственно, в основную таблицу из временной.
Можно ли рассчитывать на какую-то помощь от бд? Удобный импорт из временной таблицы в основную одной командой, если у них схемы совпадают, например? Или создать временную по образу постоянной? Или придётся всё на фронте лепить, читать из временной, записывать в постоянную?
Инфы по этому поводу что-то не особо нашёл. Речь не про two phase commits, если что.
>>2503651 Никто так не делает. Все сначала загружают предзаполненную сущность с сервера, её поля показывают пользователью, а когда пользователь подтвердит, тогда и записывают.
>>2503651 >Сначала во временную таблицу, откуда их можно прочитать, показать пользователю, а потом спросить, будет он их коммитить или нет Умные дяди придумали давно такую вещь как NoSQL
>>2503853 Ты не понял что ле? Сохраняешь в монге/редисе свои ебучие данные, после тог окак юзер нажмет подтверждение, пишешь их в постгрю и чистишь кеш
>>2503651 >. Сначала во временную таблицу, откуда их можно прочитать, показать пользователю Какую-то хуйню придумал. Но если ты все же сможешь в своем ПО изобразить длинную транзакцию, которая держится, пока пользователь просматривает диалог, то можешь использовать CREATE TEMPORABLE TABLE. В чем проблем?
Эти все штуки просто задолго до расцвета веба возникли. Для обычного десктопного софта все, конечно,придумано.
>Следующим предложением литералли описывает, что я хочу сделать. >Все сначала загружают предзаполненную сущность с сервера, её поля показывают пользователью, а когда пользователь подтвердит, тогда и записывают. чё
>>2503856 Да, как раз думаю, что-то маловато в моём проекте софта для баз данных, надо ещё один добавить. Ещё хорошо бы, чтобы у них семантика отличалась, чтобы на предворительной транзакции невозможно было проверить, сожрёт ли постгрес эти данные потом. Всё проверил всё тебе нравится, дорогой пользователь? Ах, погромист не предусмотрел это минимальное различие между постгресом и редисом, вот тебе полный рот ошибок, вместо подтверждения.
Уважаемый анон. Подскажи, пожалуйста, полнейшему нубу. Пишу вот это:
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"
>>2504492 >А чего ты ожидал? В первом посте написал, чего ожидал.
>Временные таблицы за тебя фронт что ли сделают? За меня никто не сделает, просто придётся весь алгоритм на фронте расписывать вместо: - эй постгрес, эхо мне вот эти данные вот в эту табличку, но пока не коммить - ага, всё норм, заливай/не не норм, дропай
>>2504627 Хмм.. Да, тоже нормальная идея. Хотя тогда ко всем существующим запросам придётся добавлять, чтобы только проверенные данные выдавали. И не хотелось бы, таблицу метадатой поллютить, но можно отдельную табличку с этим сделать. Подумаю над этим, спасибо.
Дублирую вопрос из нюфаг треда. Как форсированно удалить строчку в таблице, к которой форенкеем привязана строчка в другой таблице? На стаковерфлоу рассказывают про каскадное удаление, но мне нужно ровно противоположное, чтоб привязанная строчка осталась, для воспроизведения бага.
Вопрос к великим архитекторам от нуба. Будет один бот на java, он каждый день будет чекать цены товара и записывать их в базу sqlite. Список проверяемых товаров может меняться. Нужна возможность делать выборку цен по дням. Как спроектировать таблицы/свойства, что бы было меньше гемора с выборкой? На каждую дату отдельную таблицу? Или для каждого товара сделать свойство "дата". Как организуют такое по уму? Пока в базе есть только общий список возможных товаров.
Как на 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');
Привет всем, у меня вопрос по Elasticsearch. У меня есть большой индекс с кучей документов. У документов есть поле name, где хранится название на английском. Но мне нужно добавить поддержку других языков. У меня уже есть данные по именам документов на других языках, и мне сейчас интересно вот что:
Слышал что в эластике есть анализатор языка, и можно ли как то в доках создать доп. поля на других языках и используя анализатор языка elasticsearch дергать определенное, в зависимости от языка в запросе? Если есть такая возможность, дайте, будьте добры, ссылку. Я вроде бы что-то и ищу, но это походу не то что мне нужно. Спасибо.
>>2510512 эта ебалайка совершенно контркультурна к СУБД. Изначально была просто либа на яве, потом из нее сделали продукт для безопасников, но субд она так и не стала.
Но да, ты можешь в Индексе создавать еще "поля".
Если плохо гуглится (А ты вообще гуглил?) тебе нужно просто потерпеть и адаптироваться к тому, что в гугле много информации о старом способе работы с индексом - через веб апи. Но потом у них появилось что-то типа SQL. Сосредоточься на нем
>>2508944 Вот я сидел изучал, по идее должна работать эта строка, но она не работает 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;
в принципе решил проблему, но как то не элегантно, пришлось добавить дополнительный столбик в который записывается значение для проверки, пытались ли удалить из столбика значение или нет
Аноны,как убрать такого рода дубликаты из правого столбца? Надо что бы если было либо "NOT SELECTED" лмбо то значение что ввел юзер в БД. То есть 113-115 строки заполнены нормально, т.к. там ничего не задано, а вот 83-85 дублируются. БД - PostgreSQL Таблица g-feature относится как O2M к g-value
Сап, помогите плз, не придумал, как попроще описать, но надеюсь поймете. Мне не понятно как правильно сделать одну аггрегацию, которую я выделил на первом скрине.
В общем есть БД, схема на 4 скрине. В центре таблица пробитых чеков в магазинах. Мне нужно сделать выборку как на 3 скрине. То есть выводить показатели типа общая стоимость, наценка, маржа итд по каждой дате в каждом магазине для каждого товара. Это я сделал и вроде бы правильно.
Проблема в последнем столбце. В нем я должен выводить, какой процент от общего числа продаж в этом магазине за эту дату в этой группе товаров занимает каждый товар. То есть например всего за такое-то число в магазине номер 1 было продано БАДов на 10000 руб, а какого-нибудь там фуфломицина на 1000 руб, значит в последней графе будет 10%. Трудность в чем: в процедуру может передаваться список необходимых групп товаров, и мне нужно выводить данные по этим группам. На втором скрине код, который разбивает полученную строку и помещает значения в таблицу-переменную.
И я никак не могу понять, как передать в подзапрос, считающий общее количество продаж, как бы текущую группу продаж, по которой сейчас идет основной запрос. На 3 скрине можете заметить, что у БАДов и у Косметических средств у меня одно и то же значение в последней графе. То есть он не берет в расчет группу товаров. (я знаю, что там должен быть процент, просто для упрощения я пока только сумму вывожу, потому что в ней проблема).
Ну вот. Подкиньте идею плз, если поняли, че я написал. Второй день уже ебусь.
>>2503150 3 иерархические таблицы с one-to-many (самый просто случай) в среднем 1 к 10, и в верхней таблице достаточно 200 записей >>2503651 Ты пытаешься дрочить БД бизнес-логикой, которая должна быть на уровне приложения. Добавь в свою таблицу published_at TIMESTAMPTZ и триггер, который проверяет нуловое значение этой колонки при апдейте, и не еби мозг.
Задача - проверять parquet файлы на валидность. Т.е. я прочитал схему pearquet, мне нужно сравнить ее с эталонным файлом - соответствие колонок и типов данных, одно из предложений - схема xsd. Где можно посмотреть примеры данной схемы и стоит ли использовать xsd, может есть другие варианты проверки?
>>2424142 (OP) Поясните по братски на сколько лучше доступ к таблице по кластерному индексу с низкой селективностью = низкая избирательность = остаётся много строк после наложения условия лучше доступа по обычному индексу?
>>2517178 Администраторы баз данных / DBA. И разработчики на всяких PL/SQL, T-SQL, PL/pgSQL, которые пишут всю логику приложения на хранимых процедурах, в основном это легаси или специфичное типа OLAP.
Решаю домашку, есть задача пикрил. И моё решение. Меня терзают сомнения, а возможно ли сделать это без джойнов, одними селектами? Не вдупляю, как впихнуть селекты вместо полей, ну типа >select pole, select()... from... так что ли?
>>2517338 >Меня терзают сомнения, а возможно ли сделать это без джойнов, одними селектами? Тебе для сравнения данных с нескольких таблиц в любом случае придётся джоины делать, даже неявные. Альтернатива - вложенные селекты по типу SELECT id, name AS department name FROM "Department" WHERE id IN ( SELECT ... ).
Сап двощь. Помоги плес. Вот вводные: Есть две таблицы, для них нужно сгенерировать тестовые данные, только вот проблема для меня в том, что после вставки в таблицу #1 нужно взять его айдишник и вставить в таблицу #2. Для генерации я использую generate series(), для того чтобы брать айдишник и вставлять в следующую таблицу я использую CTE (конструкцию WITH AS). Только вот вариант на пикрил работает только если нужно вставить 1 строку (под определение генерации данных слабо подходит как по мне). И как реализовать такой запрос чтобы решить эту проблему? Помогай двощ, а то я с ума сойду((
>>2519823 или забить хуй и написать функцию в котором будет цикл? если что, нужно нагенерить данных не больше чем на сотню тысяч, о десятках миллионов речи не идет, а то ещё накинете йобаскрипт
Сап базач. Нуб итт. Пикрил 1: простой первичный ключ в таблице Customers, внешний ключ в таблице Orders работает, возвращая в конце обновлённые данные. Пикрил 2: составной первичный ключ в таблице Customers, внешний ключ в таблице Orders не работает, возвращая в конце старые данные.
Почему такое поведение с составными первичными ключами?
Есть вопрос. Кто-нибудь занимается с БД Firebird. Так случилось что мне приходиться тесно работать с ними, и это надолго. Отзовитесь. В каких проектах используете? Очень хочется знать что я не один такой на двощах
Подскажите пожалуйста направление нахуй. В общем сам я околоайти и у меня есть файл.sql весом 42 гига из которого мне нужно вытащить таблицу со столбцами userID, currency, balance, но как на деле они в этой БД названы я не знаю. Есть какой-то простой способ единожды извлечь эти данные?
>>2424142 (OP) Антоны, не могу решить задачу. Гугл не помог разобраться.
Есть джве таблицы. Актуальная дата сегодняшняя. 1. Столбцы предмет, локация продажи, цена и дата, когда эта цена была актуальна. Для комбинации предмет/локация может быть несколько строк с ценами для разных дат. 2. Зона и локация в этой зоне. Необходимо сделать выборку, в которой будут предмет, цена на ближайшую дату к текущей для зоны 1, цена на ближайшую дату для зоны 2, разницу между этими ценами. Всего 4 столбца.
>>Задачи: >>- https://www.codewars.com/?language=sql Боже, какое же говно. Задачки как будто по ЯПу, а не по работе с базами данных. Замени букву в стройке, вычисли фибонначии... Где извлечение хитровебанных наборов данных из БД??? Регался там с надеждой на куче новых задачек, остался сильно разочарованным.
>>2424142 (OP) аноны, тут есть те кто вкатывались к эксель? ищу сейчас работу, но хочу офисобыдлом быть, реально ли выучить за месяц впр гтр чето там сводные таблицы? формулки еще со школы умею делать, а вот sql очень тяжело идет, решил за неделю уже под 30 задач на sqlexe но все еще путаюсь в совсем стандартных вещах ну и заодно может курс по экселю посоветуйте, чтоли
>>2526014 Эксель не имеет никакого отношения к sql, у мс есть аксес, это такой-сякой заменитель скулайта, хотя он очень сдулся в последние годы. Но сам эксель весьма нихуев, 95% его использования это тупые списки, но там можно наворотить дел при умелом использовании.
>>2526018 я про саму идею баз данных, просто даже для постгреса я тупенький, а вот с экселем вроде неплохо на огэ и егэ было но в вуз не поступил, ищу работу сейчас жаль что треда нет для него, спасибо за ответ
>>2526024 Тут суть именно в знании этой бухгалетрской хуйни, всё остальное это лишь инструменты. Надо решить - ты бугхалтер с знанием автоматизации или пограмист с знанием бухгалтерии. Я вот лет десять зарабатываю на датамайнинге спортивных матчей, хотя про эти виды спорта я знаю чуть более чем нихуя. Но клиенты получают профит. Они довольны и я доволен.
нужна помощь с методом решения моей задачи, запрос напишу сам, но объясните, какие именно операторы или методы помогут или могут помочь. т е куда копать, дальше сам.
есть таблица, упрощенно выглядящая так:
стА стБ
123 НЕТ 123 НЕТ 123 НЕТ 456 НЕТ 456 НЕТ 456 ДА 789 ДА 789 НЕТ 789 НЕТ и т д
как мне достать все значения стА у которых стБ всегда НЕТ?
Есть БД постгрес, в ней одна таблица 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). Каким запросом я могу это сделать?
>>2526836 Бля, не очень удачный пример, мне нужно чтобы 2 пары ключ-значение могли стоять где угодно в одной строке, т.е например state идет перед city, но выборка должна быть "state": "NY" и "food": "apple" >>2526844 Спасибо, гений.
Сильно не бейте, я новичок и если в своих рассуждениях не прав - поправьте.
Есть ли реальные преимущества у nosql для oltp баз данных?
Какие преимущества и в каких кейсах? Только инмемори кей-велью для кешей для меня очевидны.
У клепмана читал преимущества графовых. Он там пугал, что обход графа в реляционках можно заменить рекурсивными сте. Но на деле в них ничего особо страшного не оказалось, для простых кейсов вполне норм. Ну конечно если сложные обходы сложных графов или поиск в них, то да. Еще я слышал, что у графовых проблемы с большими объемами. Какие преимущества у монги перед jsonb вообще не ясно.
Для olap вот бд колоночные(аналитика) и временных рядов(метрики) намного лучше, чем реляционки. И вообще анончики, расскажите плиз с какими nosql вы работали и для каких кейсов.
>>2530165 Нет у них преимуществ для OLTP. Большинство предметных областей естественным образом предполагает таблицы, доказано тысячами кабанов, ведущих учёт в стопке экселек. При любых попытках юзануть NoSQL для OLTP очень скоро возникают проблемы из-за отсутствия транзакций, избыточных данных и слабоструктурированной схемы. Разве что могут немного ускорить разработку MVP-продукта, и то спорно. Вот в специфичных задачах типа кешей и OLAP да, без NoSQL сложно обойтись.
Есть таблица в 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: