Литература: - Прибыл Фейерштейн. Oracle PL/SQL. Для профессионалов - если уметь исказть, можно найти бесплатно без СМС и на русском. - Алан Бьюли. Изучаем SQL. - про MySQL, тоже легко находится. Довольно старая, но базовые вещи не сильно меняются. - К. Дж. Дейт. Введение в системы баз данных - талмуд на овер 1000 страниц. - Томас Кайт. Oracle для профессионалов - тоже талмуд.
Q: Что лучше, SQL или NoSQL? A: Как обычно, зависит от задач. Нужна любой ценой скорость - бери NoSQL, нужна согласованность данных - SQL. У всего свои плюсы и минусы, и в обозримом будущем ни один подход не заменит другой полностью.
Q: Вопросы с лабами и задачками A: Смело спрашивай, с вероятностью больше 50% ответят, но могут и обоссать.
Здесь мы: - Негодуем, почему шапка - говно, и предлагаем коллективному ОПу идеи, как её улучшить. - Разбираемся, почему PostgreSQL - не Oracle - Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс - Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе - Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование - Анализируем, как работает поиск вконтакте - И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно
Подскажите, можно ли как-то при группировке выбирать любое значение в постгресе? Типа SELECT some(title) -- похуй какой, любой существующий сойдет FROM projects GROUP BY department_id
Понятно, что можно взять min/max. Но зачем лишняя сортировка, если похуй.
Сам аноны. В прошлом тхреде говорили что чтобы расти, неплохо бы знать какой-нибудь язык программирования. А где тащемта его применять? Ну вот начал я вкатываться условный питохон, но дальше? Где у них точки пересечения с SQL?
>>2052738 Обычно в бэкенде, есть у тебя некая серверная приложуха на каком-нибудь фреймворке, и надо где-то хранить данные. Иногда там не голый SQL, а всякие ORM или вообще говно-nosql. Бывает и не бэкенд, какие-нибудь скрипты для ETL/OLAP/машинного обучения, либо десктопные/мобильные приложения с небольшой встроенной БД.
>>2052522 Ну там все какое-то извращение. DISTINCT ON действительно берет первый попавшийся. Но если хочешь сортировку результатов, то придется ставить первым полем в сортировке то которое в дистинкт. А это нахуй делает его ненужным.
>>2052786 Точка входа слишком хитрая, потому что все под ДЕ понимают разные вещи. По крайней мере, огромная разница между странами. У нас это дрочево кафок спарков и хуйвов, довольно бессмысленное и адхоковое, вынужден заметить. В Европках и Штатах это продолжение BI, поэтому начинается с Dimensional Modelling, шкуэль, вот это все.
Я бы наверн советовал начинать с обмазывания Кимбалом-Росс, и только потом хардскиллы про конкретные фреймворки. Но мапредьюс наверное стоит в деталях разобрать (вплоть до верхнеуровневых реализаций отдельных частей) параллельно с первым пунктом, потому что по нему тебя будут собеседовать в рашке. Поэтому тут неплохо посмотреть какой-нибудь курс про распределенные вычисления и кишки БД.
Платят кстати ДЕ заебца, и херочки каждый день в линке пишут.
Всем привет, подскажите, пожалуйста, Дейт пишет что в реляционных БД операции производятся над множествами строк, но когда он представляет SQL, то вводит понятие курсора. Это пример не возможности воплотить идею в действительности? То есть, операции в SQL всё-таки выполняются по каждой строчке отдельно?
>>2054592 A join B это операция над множествами. С точки зрения пользователя и конечного результата. При этом в кишочках реляционной базы эта операция происходит построчно, но в этом нет никакого противоречия.
>>2052408 (OP) >- Алан Бьюли. Изучаем SQL. - про MySQL, тоже легко находится. Довольно старая, но базовые вещи не сильно меняются. Третье издание - 2020 год, ничего не старая. С ультимативной HD-лягухой на обложке.
>>2061973 >>2062003 Ну и чтобы тебя окончательно добить, замечу, что ты пытаешься продублировать функционал оконных функций, которые вроде и так должны быть в постгре.
>>2062011 А где не так? Ты прибавляешь к единице "хуй знает что" и очевидно, что и конечный результат будет "хуй знает что". Потому что ты не можешь утверждать, что "хуй знает что" == 0.
>>2062027 У нас в go переменные при инициализации получают значение по-умолчанию, то есть определенное для своего типа нулевое значение. И вот так делать не надо. Спасибо, заработало.
Анонче, пытаюсь вкатиться в SQL, но ппц застопорился на джоинах и селектах внутри селектов. Плюс ко всему, я еще работаю с Clickhouse и поэтому классический sql-синтаксис из гайдов там не работает. Есть у кого на примере хорошие гайды с примерами запросов, которые можно препарировать? Речь идет о запросах вида select from ((select from t1) any left join (select * from t2)) using id
>>2062387 Почему нет? Заебись ложится на реляционность. Поиск есть искаропки или сторонние движки. Тот же скупик в скулайте хранит, другие вполне возможно что тоже.
Если я в монгодб хочу проверять массив на пустоту (массив при этом может быть как пустым, так и null-ом), во-первых, как это лучше всего делать? Сейчас у меня запрос "array.0": { $exists: true }. Во-вторых при таком подходе планировщик запросов игнорирует индекс на array. Можно указать его через хинт, но я не пойму, будет ли какой-то прирост производительности.
>>2062399 Каких нет? Что если исполняемый файл не в path система что ли из сральни его достанет? Зато есть танкер своих вроде того что надо всю систему обновить целиком чтобы последнюю версию чего либо поставить и все равно все будет устаревшее потому что у дауничей все на все завязано через общие библиотеки - а винде таких проблем нет ставишь что хочешь и мозг себе не ебешь. Алсо у прыщедаунов даже . в path нет; и каждый пук надо через sudo делать - прыщебезопасность.
>>2062463 То же самое. Только сигнатуру надо переписать с такой create or replace function sum_price() returns setof products.price%TYPE на такую create or replace function sum_price() returns products.price%TYPE
>>2062483 Работа не связана с БД как таковыми. Я что-то типа техлида в саппорте одной айти-компании, и мои навыки позволяют мне вытягивать отдел из дерьма выполнять всякую черновую работу других отделов в обход обсосных спринтов, которые распланированы на месяц вперед. Наговнокодить какой-нибудь сервис, автоматизировать какую-то поебень - сейчас потихоньку перетягиваю на себя аналитику, потому что сейчас ждать выполнение таска от аналитика - буквально месяц, а сидеть ждать не можем себе позволить. Из БД там мускуль 5.7 в проде, все логи приложений идут в КХ, техническое логирование - сентри, мониторинг - кибаны, елк и еще куча всего, хз что там еще у админов, не разбирался. Так что с КХ просто "повезло", причем судя по слаковым каналам, где админы обсужают инфраструктуру, КХ - пиздец в плане оперирования. Аналитики, неосторожные джоины и прочее постоянно кладут продовый кластер по памяти. Недавно аналитики еще приходили реквестировать апгрейд до новой версии, в которой добавили оконные функции, но техдир их послал нахуй с таким запросом, лал. При этом я ни разу не видел подобных жалоб, пока логи просто лежали в S3 и доставались самописной консольной тулзой из-под ssh.
>>2062548 Формально - потому что я не разработчик, чтобы мне башляли 300к/наносек. А так, руководство устраивает хуй пойми какие махинации, и по документам я прохожу, как менеджер поддержки, и они не хотят моей зарплатой завышать рыночную вилку. Ну и такой вещи, как индексация, у нас нет. Пока босс не отвалит бабок - больше получать не будешь. А чтобы босс отвалил, надо пососать-полизать, либо закрыть какой-нибудь полезный для компании проект.
Подскажите по скулю. Я не специалист, и вообще немного не мой профиль, но пришлось разбираться в чужом скрипте. Скрипт простой, проверка целостности базы.
SET NOCOUNT ON DECLARE @Err INT DECLARE @tDatabaseName VARCHAR(55) DECLARE @CmdStr VARCHAR(300) DECLARE @tResult TABLE (Error INT, Level INT, State INT, MessageText VARCHAR(7000),RepairLevel INT,Status INT,DbId INT,ObjectId INT,IndexId INT,PartitionId INT, AllocUnitId INT, [File] INT,Page INT,Slot INT,RefFile INT,RefPage INT,RefSlot INT, Allocation INT) SET @tDatabaseName = 'Database_Test' PRINT '==========================================================================================================' PRINT 'Шаг №4. Проверка тестовой БД после восстановления. Step_id = 4' PRINT CAST(getdate() AS VARCHAR) + ' Старт процесса проверки тестовой БД.' SET @CmdStr = 'DBCC CHECKDB('''+@tDatabaseName+''') WITH TABLERESULTS' INSERT INTO @tResult EXEC (@CmdStr) SELECT TOP 1 @CmdStr = MessageText FROM (SELECT TOP 2 * FROM @tResult ORDER BY ObjectID Desc) AS t1 ORDER BY ObjectID ASC IF CHARINDEX('CHECKDB обнаружил 0 ошибок размещения и 0 ошибок согласованности',@CmdStr)>0 BEGIN PRINT CAST(getdate() AS VARCHAR) + ' Проверка тестовой БД прошла успешно. Резервную копию можно переносить на внешний носитель.' END ELSE BEGIN
PRINT CAST(getdate() AS VARCHAR) + ' При проверке тестовой БД командой DBCC CHECKDB обнаружены ошибки!' PRINT CAST(getdate() AS VARCHAR) + @CmdStr PRINT CAST(getdate() AS VARCHAR) + ' Резервную копию переносить нельзя!' SET @Err = 1/0 END PRINT CAST(getdate() AS VARCHAR) + ' Завершен процесс проверки тестовой БД.'
Как я понял, скрипт при проверке берет содержимое из последней строки таблицы, если совпало с IF CHARINDEX = успешно, не совпало - не успешно. В таком виде всегда выпадает в Fail Только вот я не понял, что писать в строке IF CHARINDEX, чтобы отрабатывало успешно?
>>2062874 Чесно говоря говно какое-то, просто понапиханы все технологии, это не дата инженер, а осьминог ебанный какой-то. И самое главное, не одна из схем не обьясняет чем он собственно занимается
>>2063617 Могу разве что экстраполировать свой бесконечный опыт с другими базами и сказать, что null значения не учитываются в индексе. Удивлен, что null и пустой массив в этом случае не одно и то же.
>>2063628 Ну на самом деле null в данном случае - отсутствие поля в документе. И отсутствие таких документов в индексе ведь тоже помогает быстрее узнать, что для данного id этот массив отсутствует?
>>2063633 > отсутствие таких документов в индексе ведь тоже помогает быстрее узнать Нет, чел, для того, чтобы узнать, каких документов нет в индексе, тебе сначала нужно считать все документы, которые есть в индексе. И проверить для каждого документа, входит он в этот список или не входит. Гораздо проще считать все значения и проверить их на null.
>>2063726 >чтобы узнать, каких документов нет в индексе, тебе сначала нужно считать все документы, которые есть в индексе Зачем? Наверняка там внизу какая-то структура данных типа хешмапы или сета, в которой значение всегда получается за константное время.
Как идентифицировать себя?
Аноним09/06/21 Срд 23:18:28№206376490
Все чаще замечаю, что мало кто знает про ETL/DWH разработку. То есть область востребованная, но большинство других программистов не рассматривает ETL как разработчиков. Ну то есть, сейчас под разработчиком почему-то понимают по умолчанию фронт на js или java-ынтерпрайз.
Вот лично я работаю последние 5 лет в банках в разных отделах. Был в отделе отчетности, в рисках, в кредитном процессинге. И последний год работаю чисто в ETL. Но в чем я истинно силен? Наверно в SQL конечно, могу запрос любой сложности написать и оптимизировать. Пишу немного в Java код для общения с message broker: kafka, ibm mq, немного в python код для aiflow бихдата прости господи, немного в groovy для etl-средства. Еще на диалектах PL/SQL, на T-SQL, на pgSQL. Про зоопарк баз вообще молчу, так как почти не осталось СУБД с которыми я не работал.
Из всего этого зоопарка технологий уже начинаю забывать зачем я в эту область пришел, если приходится брать отовсюду по чуть-чуть. Куда дальше расти? Как себя идентифицировать? Или я просто начинаю выгорать в этой области?
Реквестирую ETL-братишек рассказать свои истории как боролись с такими ощущениями или у меня развивается СПГС.
>>2063764 Сейм друг. У меня такое же ощущение. Успел поработать с ораклом, террадатой, гринпламом, ETL на airflow писал, hadoop, pyspark сам понимаешь, сейчас ещё и BI отчётность пилю, только всё это я делал не в банках и, с оптимизацией запросов я хромаю, но я думаю, как-нить наверстаю. Как-то не чувствую себя разработчиком, при таком большом количестве js кодеров на дваче. Зп 150к
>>2063833 Да вот Data Engineers это другой департамент, которые ковыряют чисто Data Lake. Зарабатываю 180к на руки + годовая премия в 1 оклад. Не знаю много это или мало по местным меркам, официально я мидол.
>>2063868 Ага, ты тоже уловил суть. Хоть может это и хорошо что откровенное быдло не лезет в нашу область. Хотя быдло-кабанчики-аналитики лезут
>>2063933 >Хоть может это и хорошо что откровенное быдло не лезет в нашу область Мне почему-то кажется, что там порог входа чуть повыше. Ну т.е. довольно сложно заинтересовать быдло заниматься именно этим.
>>2064194 А, лол, я понял. Тоже туда собесился, но не пошел, потому предложили нихуя не выше рыночка, вопреки расхожему мнению, и потому что там был ебучий SAS DI, которым мне заниматься не очень хотелось.
>>2064268 > предложили нихуя не выше рыночка, вопреки расхожему мнению СБЕР вообще достаточно жадный, у него явная политика платить средне по региону, причём это настолько жёстко, что до недавнего времени, если работаешь на удалёнке, нельзя было переехать в другой регион, ибо платить по-московски тому, кто живёт в Барнауле, он не хочет.
>>2064283 Честно говоря никто не хочет. Недавно собесили на удаленку товарищей из Омска и Екб. Однако, процентов на 30% ЗП ниже чем у мидла в ДС.
Но заметил такое, что сеньер в регионах это, как правило, мидл в ДС по скидками. Лид в регионах - сеньер в ДС. Недавно собесил сеньера SQLщика с 9 месяцами опыта, но назвал себя ведущим программистом. Охуеть.
>>2064741 Я начинал с того, что научился ставить винду на свой комп. Потом устроился в комп. клуб админом. Ну а потом приходишь в любую днище-фирму и говоришь - я админил сетку и 30-40 компов с круглосуточным аптаймом и постоянно меняющимися юзерами без навыков. Обычно этого достаточно чтобы взяли на испытательный срок. Там месяц-два учат своему софту, если выучил и справляешься с поддержкой - остаешься. Так я стал сисадмином. Дальше, если не обленишься, учишь язык. Я вот учу, дается легко, так как всё знакомое. Опыт в ИТ есть, язык знаешь - идешь джуном. Получаешь опыт в разработке, а дальше либо по разработке двигаешься, либо в девопс. Если в девопс, то можно получить опыт, обмазаться безопасностью и в спецопс.
>>2065323 Меня сразу заставили нырять в ёба процедуры с головой лул я сразу сломал кое-что и заниматься реверс инженеригом чужих говен честно говоря и по происшествию года кое-что не понимаю, представь как я знатно охуевал в первые месяцы
Как в постгресе сделать EXPLAIN для функции? Везде форсят autoexplain, но или я что-то не понял, или он пишет куда-то в логи, куда я не хочу лезть и вообще мне нах не надо это на каждый запрос. Хочу просто один раз посмотреть и все.
>>2065483 Немного побугуртили, потом дали задачу попроще но один хуй слишком сложную чтоб я её мог сделать. Потом отправили дебыватся до подрядчика чтоб они меня научили это была пиздец подстава и позорище, я полез в скайпе доебыватся до их синьёра, он от такого знатно охуел, и позвал ПМ-а, вобщем до сих пор стыдно. Мне кажется первые месяца три меня всерьез подумывали выпиздить, но потом выяснимлось, что я могу в MDX немного, и жтот навык оказался полезным, а потом я уже и SQL подтянул.
>>2065526 Аналитики разные бывают, в разных департаментах. Но если брать именно анализ данных то: 1) Ищут данные для разных подразделений 2) Правят маппинги, чтобы потом разраб доработал ETL 3) Поясняют за данные - почему таблица Х прогрузилась именно так, а не иначе 4) Ебашут ad hoc 5) Пишут ТЗ разрабам чтобы те разработали новую загрузку
>>2066157 на самом деле в этом списке технически сложных вещей нет, скорее муторно, и надо быть внимательным, и хорошо разбираться в предметной области.
>>2063764 Да, у меня такое-же было, правда через год-два работы ЕТЛ-щиком. Делал все и по немногу. В итоге я погрузился сильнее в техническую часть, освоил С, начал изучать внутрянку баз, как они в ОС работают, алгоритмы поиска, обращения к данным как реализованы и тд и тп. Понимания, кто я в современной градации мне это так и не прибавило, но задачи больше нравятся).С данными уже давно не работал, в основном в ОС что-то допиливаю или настраиваю.Сейчас это похоже на какую-то смесь админа, системного разработчика и архитектора.
И да, плюс о котором выше писали - так как область не хайповая - залетных хипстеров и гуманитариев почти нет. Работаешь так сказать в кругу единомышленников)
>>2066049 6) бесконечные переписки с БА (если сам аналитик СА), или с бизнесом (если сам аналитик БА). Очень много деловой переписки, отвечаю, аналитики половину рабочего времени просто со всякими бизнесами общаются.
>>2066854 Я когда готовился к приему на эту работу, у меня было 2-3 месяца, за это время я организовал вкат в SQL и учил MDX. MDX довольно простой оказался, точно уж проще SQL, по итогу мне даже всё не пригодилось, что я курил по MDX. Конечно в mdx есть скоупы, которые довольно странно иногда работают, но с этим я подьяснился уже на проекте.
Аноны что покурить по моделям данных? Часто в вакансиях мелькает - умение пояснить за аймона\кимбелла. При том судя по орели, аймона уже давно все в рот ебали. А от сранного датаволта, вобще срака рвётся.
>>2066945 Да тупо пару статей читани с хабра. У меня тоже это в требованиях было чуть ли не обязательным требованием. В итоге спросили про снежинку/звёздочку. Про факты/дименшены. По факту ведь мало кто руководствуется именно манярекомендациям этих товарищей. В голове держат, но четко не следуют.
>>2067044 Ну хуй знает кимбал как по мне довольно жизненные байки травит. Отечественным двх-рабработчикам энтерпрайзовым гречневым конечно похую, но тем не менее
>>2067773 Действительно, так работает. Я даже понял, почему он до этого присваивал нулл или пустые строки: выражение "SET sex =" начинает выполняться в любом случае, и если нет подходящих CASE, то оно таким и останется, порождая нуллы и пустоту.
>>2067991 Мне прочитанная в 2012 книга Ицика Бен-Гана T-Sql Querying зашла так, что с тех пор по rdbms ничего не читал (читал про nosql и всякое распределенное), но я дотнетомакакен. Параллельно решал sql-ex, видимо по-этому закрепилось достаточно и для собесов, и для работы.
Анон, есть таблица, где мне надо выбрать все данные после конкретной записи, никаких зацепок в виде уникальных дат нет или айди строк. Есть какой-нибудь простой способ? Пытаюсь гуглить, а там какие-то очень сложные для меня запросы
>>2068972 Нет. Таблица в базе данных это куча, если у тебя нет айди и даты изменения, то тебе сначала нужно их добавить, иначе ничего не выйдет. Конечно, вопрос еще зависит от того, какая у тебя база. В Oracle, например, есть rowid у каждой строчки, в общем случае они упорядочены, но это все равно не гарантируется и завязываться на это не принято.
Приветствую анон Оракл. Есть таблица для временных данных. При нормальной работе больше чем на пару секунд данные там не задержатся, но в случае ошибки останется мусор, который надо автоматически вычищать. Как можно это сделать на уровне дб? Там простейший delete from TABLE. Хочу чтобы это запускалось разок посреди ночи.
>>2069241 А эти данные используются больше чем в одной сессии? У оракла есть прекрасные global temporary tables под такую хуйню. Еще у оракла есть exception, можешь там прописать очистку таблицы, если что-то пошло не так. Если эти изящные варианты решения проблемы тебя не устраивают, то да, ебашь джоб на уровне бд, но это уебанство, потому что так у тебя два разных процесса будут менять одну таблицу и ошибок ты можешь только больше наплодить.
>>2069370 >>2069286 >>2069264 Я не упомянул кое-что и ввел в заблуждение. Ошибка может возникнуть лишь на уровне сетевых запросов. Есть действие, которое выполняется в несколько последовательных запросов, и, если какой-нибудь пост не долетит до сервака, строка в бд так и останется висеть.
SELECT COUNT(1) as value, Status, CASE WHEN Status = 1 THEN 'status_up' WHEN Status =14 THEN 'status_down' WHEN Status =3 THEN 'status_warning' ELSE 'status_unknown' END as icon, CASE WHEN Status = 1 THEN 'green' WHEN Status =14 THEN 'red' WHEN Status = 3 THEN 'yellow' ELSE 'gray' END as color FROM Nodes GROUP BY status ORDER BY value DESC
Что такое COUNT(1) ? Я привык, что в каунт мы забиваем название столбца, чтобы посчитать строки. Но там нет столбца "1". Или это индекс какой-то? На https://www.w3schools.com/sql/sql_count_avg_sum.asp про это нет
>>2069955 Эквивалентно count(*). Обычно так пишут хуесосы, которые ничего не понимают в бд и верят, что count(1) работает быстрее. Распространенное суеверие, можешь ссать на лицо автору запроса. Чтобы понять, как это работает, можешь представить, что сначала ты делаешь select 1 from table (т.е. возвращаешь столбец из единичек по количеству строк в таблице), а потом делаешь count по полученному результату.
Добрый день! Есть 2 таблицы(пикрил) - сотрудники и их начальники. В таблице сотрудников поля - ФИО, Дата приёма на работу, дата увольнения, причина, зарплата и id начальника. Связь один ко многим. Нужно вывести последний нанятый сотрудник у каждого начальника. Этот запрос не работает если есть два человека нанятые в один день. SELECT * FROM otdel_kadrov.employee right JOIN (SELECT max(dateup) as dateup, heads.FIO1 FROM otdel_kadrov.employee LEFT JOIN heads on employee.head = heads.IdHeads GROUP BY FIO1) as t on employee.dateup = t.dateup;
>>2070472 >>2070466 Вы не охуели? SQL немножко не так работает. Фильтра на сотрудника нет. Конкретно на этом запросе вообще будет ошибка группировки, потому что group by по начальнику, а селектится по всей видимости звездочка, которую сожрала макаба.
Сап знатокам. На работе хочу углубится в БД на уровне разработчика - mongodb и ms sql. С монгой будет отдельный разговор, меня больше интерисует sql. Писать Joins, view, sp уже умею, но чувствую, что есть пробелы в знаниях и этого не достаточно. Планирую такую программу роста: 1. Профайлер. Как работать, как оптимизировать запросы; 2. Индексы - Seek, scan, full text index; 3. Масштабирование; 4. EF to ms sql (ORM .net) - AsNoTracking, Querable. Что еще посоветуете?
Подскажите плиз. Я уже не понимаю. Есть у меня одна таблица, хочу ограничение повесить на поле, уникальным сделать.
ALTER TABLE table DROP CONSTRAINT IF EXISTS table_name_key; CREATE UNIQUE INDEX CONCURRENTLY table_name_key ON table (name); ALTER TABLE table ADD CONSTRAINT table_name_key UNIQUE USING INDEX table_name_key;
Так вот проблема при самом удалении ограничения. Его блокирует другая таблица, селект из неё. Они вообще никак не связаны, никаких внешних ключей. Почему? Как мне удалить ограничение, не останавливая работу прода? Вот что лок вешает SELECT u.* FROM users u WHERE u.id = 128592314 ORDER BY CASE WHEN u.type = 'active' THEN 1 ELSE 2 END, u.id DESC
>>2075831 > Вот что лок вешает > SELECT u.* FROM users u WHERE u.id = 128592314 ORDER BY CASE WHEN u.type = 'active' THEN 1 ELSE 2 END, u.id DESC Как оно может лок вешать? Оно же должно отработать и угомониться.
>>2075869 Я же не от делать нечего такое спрашиваю
blocked_statement | current_statement_in_blocking_process -------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------- ALTER TABLE table DROP CONSTRAINT IF EXISTS table_name_key; | SELECT u. FROM users u WHERE u.id = 37640008 ORDER BY CASE WHEN u.type = 'A' THEN 1 ELSE 2 END, u.id DESC ALTER TABLE table DROP CONSTRAINT IF EXISTS table_name_key; | SELECT u. FROM users u WHERE u.id = 34794093 ORDER BY CASE WHEN u.type = 'A' THEN 1 ELSE 2 END, u.id DESC
>>2075831 >>2075888 Привет, обещал тебе из МВП ответить. Нихуя не понятно. Скорее всего, это какая-то ваша ёбка с привилегиями, так что еби своих админов, читай хранимки и триггеры. Ты точно имеешь право делать DDL операции в этой базе?
Сап. Я студент, делаем курсач по базам данных на sql. Пик - физическая схема (Тупо сделано? Наверное да, но препод принял). Что он НЕ принял, так это сложный запрос, который надо было сделать для сдачи курсача. Звучало так: запрос одного оружия со всеми его характеристиками И с учетом влияния модификаций на характеристики. Тут я сломался, посколько как прикрутить сюда влияние модификаций - ноль идей. Даже у тех кто на отлично уже сдал спрашивал, тоже молчат. Прошу помощи как это сделать, плюс какие нибудь общие советы.
>>2076753 В том что в моем (неправильном) решении этого вопроса влияние от прицела происходит вообще на все характеристики, а должно только на точность. Пытаюсь переварить все это, а голова кипятится - SQL для меня тема новая.
>>2076742 select id_weapon,id_stat,stat_value+mod_stat from weapon_stats ws join (select id_weapon,id_stat,sum(stats_effect) mod_stat from mod_stats m join weapon_mod w on m.id_mod=w.id_mod group by id_weapon,id_stat) ms on ms.id_weapon = ws.id_weapon and ms.id_stat=ws.id_stat
Процентов 90 что где-то я с синтаксисом объебался, но логика вроде верная.
>>2076822 Название таблицы у тебя mod_stats, mod_stat - это элиас который я назначил для суммы значений stats_effect для конкретного стата конкретного оружия, можешь любой въебать.
>>2076768 В джойне mod_stat должно быть еще условие на weapon_stats.id_stat = mod_stat.id_stat Дружеский совет: inner join'ы для модификаций перепиши на left join'ы, потому что твой запрос отсеивает оружие, для которого нет модификаций, что неверно, в общем-то. И в части select должно быть coalesce(stat_effect,0) для обработки ситуаций, когда по оружию или по какой-то характеристике нет изменений, потому что на языке sql 1 + null = null И скорее всего нужно делать group by и считать сумму модификаций, если несколько разных модицикаций могут влиять на одну характеристику.
Как вставить значения в таблицу без primary key в mysql? Гуглением нашел что-то такое, но не знаю что делать с ключом. INSERT INTO table (a,b,c) VALUES (1,2,3), (4,5,6),..., (101, 102, 103) ON DUPLICATE KEY ?????
По идее можно создать 4-й столбец = CONCAT(a, b, c) a,b,c - строки и сделать его ключом? Но чет звучит как костыль.
>>2077423 Можно. Я хуево вопрос написал наверное. Мне нужно вставить в table(a, b, c) новые такие значения (a, b, c), чтобы при этом строки, которые уже есть в таблице, не вставлялись т.е. чтобы в table не образовывались дубликаты. С автоинкрементом он будет писать подряд все (id, a, b, c), а мне нужно, чтобы (a, b, c) были уникальными.
Есть задание пикрелейтед и есть схема, которую я набросал. В базах полный ноль. Где я обосрался? Я смогу на основе этого что-то запилить вообще? Это нормально, что у меня primary_key это и foreign_key всегда одновременно?
>>2077867 > Это нормально, что у меня primary_key это и foreign_key всегда одновременно? Конечно, что в одной таблице праймари кей, то в другой форейн кей. А схему твою мне впадлу смотреть.
Как в постре ускорить запрос типа SELECT * FROM DOGS WHERE DATA ->> PAWS = 4? То есть есть таблица, в которой хранятся jsonы, и значения одной из колонок в жсоне одинаковы в 98% случаев. И мы фильтруем именно по этому значению.
Если добавить индекс то он игнорируется, потому что индексы юзаются только для не слишком часто встречаемых значений. Добавлять поля в таблицу не вариант, структура должна остаться такой же.
>>2079949 Знаете что. В моей картине мира json это формат для обмена данными, а не для хранения данных. В реляционной базе данных все должно храниться строчками, а не джейсонами. Архитектура ваша — говно. >>2079954 Двачну анона с партициями. Еще почитайте про битмап индексы, если они есть в вашей бд и если подходят под эту ситуацию, там нюансы
>>2079973 В сервис из сторонней интеграции прилетают json-данные довольно произвольного и часто меняющегося формата, с парой постоянно встречающихся полей и остальными рандомными. Причем эти данные не требуется анализировать, а просто хранить и отдавать по запросу всей котлетой. Твои предложения к такой архитектуре?
Помогите плс, пытаюсь восстановить базу из бекапа. А ОН Б*ЯТЬ с расширением File.backup1c - и это даунское расширение не открывается через pgAdmin 3. Как жить?
>>2080188 Кажется это бекап сформированный через pg_dump. Ресторится база через pg_restore. НО КАК БЛ, читал на стеке ниодин вариант не подошел, хххелп плс!
>>2081381 Посмотри, что такое explain и кури в эту сторону. Т.е. улучшение эффективности получения конкретного результата подбором правильного плана запроса, навешивания индексов для ускорения и т.д.
>>2081383 Я не понимаю, почему постоянно говорят про индексы. В чём проблема? Берёшь проект, сканируешь его запросы, получаешь список таблиц и для каждой таблицы список столбцов, по которым производится поиск, на все эти столбцы навешиваешь индексы. На это можно ответить, что слишком много индексов замедляют запись. Ну и чё делать теперь? Запрос-то исполнять надо. Что делать в ситуации, когда тебе нужно добавить индекс к столбцу, но почему-то нельзя?
>>2081385 Там всё несколько сложне чем просто ололо навешаем индексы везде, где ведутся запросы. Для мелкобаз это не особо актуально и зачастую достаточно такого подхода, да.
>>2081386 Наверное приходится выбирать между двумя запросами, решать, какой из запросов важнее, в каком запросе скорость критичнее, и замедлять один запрос чтобы ускорить второй.
Получается такая история: если бы у нас была идеальная база данных, то мы бы просто выполняли запросы безо всяких индексов и всего такого.
Если бы у нас была идеальная база данных с индексами, то мы просто добавляли бы индексы на все столбцы, по которым ведётся поиск, и всё бы работало без проблем.
Но так как мы имеем дело с не-идеальными базами данных, то приходится думать о трейд-офф-ах, использовать всякие костыли и подпорки в видей кэшей, вью, триггеров и прочего. Чем ещё можно дополнить этот список?
Раз уж речь пошла об оптимизации, пилю свою прохладную. Индексы использую как крайнюю меру, обычно кручу сам запрос, последние два раза когда удалось значительно ускорить, были такие кейсы: 1) Большая выборка с джоином, в итоге поменял запрос чтобы большая таблица была в WITH с фильтром, а не фильтровалось во время джоина. 2) Джоин большой таблицы из подзопроса , чтоб не вешать индексы по полям для джоина, добавил параметризированый фильтр внутрь подзапроса, там индекс по дате был, а по полям по которым идёт джоин нет, чтоб получилось что-то вроде:
select from zalupa join (select from govno where date beetwen {param1} and {param2}) where date beetwen {param1} and {param2}
>>2081394 Это типа создавать поколения данных, и потомков первых данных считать патрициями, а остальных - плебеями? Как это поможет оптимизировать запросы? Ну и из истории мы знаем, что сословия перемешались, а потом патрицианские роды и вовсе вымерли.
>>2081029 Гугли распаковку бекапа от pg_restore. Там через цмд открываешь папку с это утилитой, и потом пишешь чтото типа: /pg_restore -U имя юзера в пг админе -d новая база, в которую хочешь поместить бекап(имя этой базы в пг админе) и имя самого бекапа (у меня сработало только тогда, когда переместил бекап в папку с утилитой, через -f путь файла не работало)
>>2081381 Хз, могу ответить про Оракл, может поможет.
Первое, вообще самое первое в оптимизации - это посидеть и подумать, что и нахуя ты делаешь. Тем более, если от бизнеса задача прилетела. Взять аналитика и по каждой строчке пойти, что он именно хочет.
Но самое важное - это планы запроса, да. Не знаю, как в Пострге, но оракл страдает такой проблемой, что план, который тебе объяснили, и реальный план исполнения - вообще разные вещи. В оракле есть штуки уровня dba_hist_* табличек, в которых логируются состояния сессий/процессов, и просто охуенный тулз sql_monitor, позволяющий риалтайм смотреть, что процесс реально делает. Наверное, в Пострге тоже подобные штуки есть.
Я работаю с большими и тупыми базами данных, где часто проблема не в оптимизации как таковой, а в тупых настройках бд, оптимизатора или кретинских регламентах работы на источниках, которые вечно мне всё локают.
СУБД вроде и так сами по себе достаточно умные, нужно только мониторить, чтобы они совсем херь не делали.
>>2081393 1) если у тебя не идёт замножения при джойне, то никакой разницы по факту. Предикатный фильтр можно и внутри условия джойна сделать, чтобы сразу доступ к таблице только по фильтру был. Вот если оно у тебя в CTEхе материализацию сделало, тогда да, могло помочь.
>>2081505 > В оракле есть штуки уровня dba_hist_* табличек, в которых логируются состояния сессий/процессов, и просто охуенный тулз sql_monitor, позволяющий риалтайм смотреть, что процесс реально делает. Наверное, в Пострге тоже подобные штуки есть. А как тебе это поможет при оптимизации конкретного запроса? Что могло бы помочь - это если бы какая-то штука разбила твой запрос на шаги или подзапросы и для каждого шага показала бы, сколько он исполнялся в целом и в процентах. Так это работает?
>>2081525 >сам вешаю индексы только на PK ты трололо или туттуру? мы же только что только выяснили, что надо навешивать индексы. прикинь если бы ты попросил у человека номер телефона, а он бы тебе сказал: "я никогда не спрашиваю номер, я просто перебираю все номера, и рано или поздно всё равно дозвонишься туда, куда надо".
>>2081393 >а не фильтровалось во время джоина. Разумно, зачем фильтровать много данных когда можно фильтровать мало данных. > индекс по дате был, а по полям по которым идёт джоин нет, чтоб получилось что-то вроде: Те ты заменил join подзапросом?
>>2081525 >внутри условия джойна сделать, чтобы сразу доступ к таблице только по фильтру был. Я так понял было следующее: n строк m строк = nm строк + фильтр = q строк + фильтр = k строк Vs (n строк + фильтр) = p строк m строк = k строк n < q
>>2081753 Монитор как раз по шагам пишет, сколько делал, сколько темпа, сколько I/O. И порядок этих шагов. Запускаешь запрос — смотришь, где проблема при исполнении — думаешь, можно ли пофиксить в коде. В оркале это часто хинты на порядки джойнов или хинт на запрет какой-то тупой хуйни уровня: оракл считает, что после джойна будет 1 строка, а выходит 10лямов, и он хуярит NESTED LOOP, конечно, это будет вечность считаться.
>>2081797 че т теперь я не понимаю. Ты если явно условие фильтра в джойне укажет, то СУБД сперва соберёт (n строк + фильтр), и только потом будет n'm делать, где n' - n после фильтра. Если СУБД так не делает, то ей нужно объяснить, что она не права, лол.
>>2081525 Я тоже думал разницы нет, и оно само на этапе джоина отфильтрует сначала, потом сделает джоин. Оказалось нет, если явно в CTE фильтровать перед тем как джоинить работает быстрее. В первом случае явный WHERE в CTE, во втором and {Условие} в джлине.
>>2081787 Нет, там джоин идёт к подзапросу, я добавил фильтр к подзапросу, по полю дата. Вон я же пример написал.
Поясните за схемы и триггеры. Вообще не понимаю смысла их использований. Ладно там тригеры - выполнить действие при условии (хотя кто таким будет пользоваться на уровне СУБД, я хз), но схемы - инструмент управление правами? И подскажите, как в SQL Server смотреть план выполнения? В MySql есть Explain, в MsSql я что-то такого не нахожу
Сколько занимает json в MS SQL места? Ибо все никак не найду P.s дана была задача хранить перфокарту(с выбранными отверстиями) и решил использовать json или есть варианты по-лучше?
>>2082780 Бинари меньше всего будет занимать, тем более у тебя на дискете уже хранится в двоичном виде по сути. Можно ещё вьебать говна и записать каждую дискету как 40 различных строчек, с ключом - имя перфокарты. Можно вобще ссылку на файл хранить, а перфкарты хранить на диске. Непонятно из-за чего сырбор, эти данные с перфокарт нихуя не весят, по отдельнеости неконститенты, если ты читаешь перфокарту ты хочешь читать её всю, разделители эту условность нужная самой перфокарте для работы. Можно ебануть в longstr с разделителям.
Обычно вопрос не ставят КАК СДЕЛАТЬ, обычно начинают от ЧТО НУЖНО ПОЛУЧИТЬ. Вобщем с ёбой ехидного колобка спрашивай у деда препода А КАКАЯ БИЗНЕС ЗАДАЧА? КАКОЕ БИЗНЕС ВЕЛЬЮ ВЫ ХОТИТЕ ПОЛУЧИТЬ ОТ РЕАЛИЗАЦИИ ЭТОЙ ЗАДАЧИ? Более чем уверен у тебя там затхлый совковый пердун, который говорит СИКВЕЛ.
Програмач, объясни, как вообще база данных должна с sql работать? Вот я написал свою базу данных для работы, но она вся висит в оперативке сервера и её копия в тхтшке. Если идёт запрос данных - то он обрабатывается с оперативке. Если изменения данных - то они меняются в оперативке, а потом вся база целиком сбрасывается в тхтшку. И оперативно и надёжно, как мне кажется. Но весь мир говорит, что базы данных должны хранится в sql. Окей, я его освоил по минимуму, могу создать базу, запрос. Но в целом архитектура мне не ясна. Получается что вся база должна хранится в sql и если идёт запрос данных, то сервер должен формировать соответствующий запрос sql, получать данные из базы и переправлять пользователю? А если запрос сложный? Допустим мне надо целую страницу хтмл сформировать с данными, мне надо раз 20 обратиться к базе?
>>2083685 Есть общее правило: никогда не пиши свою СУБД, далее если кажется, что есть необходимость. > Вот я написал свою базу данных для работы, но она вся висит в оперативке сервера и её копия в тхтшке. Если идёт запрос данных - то он обрабатывается с оперативке. Если изменения данных - то они меняются в оперативке, а потом вся база целиком сбрасывается в тхтшку. И оперативно и надёжно, как мне кажется. Просто пиздец. 1. При росте размеров БД на каждое небольшое изменение целиком перезаписывается файл. И медленно, и всеоре убьёт диск из-за постоянной перезаписи. 2. Если во время записи файла ввключится питание, модет записаться половина файла, вторую не восстановить никак. 3. Большая БД не влезет в ОЗУ. > Но весь мир говорит, что базы данных должны хранится в sql. Окей, я его освоил по минимуму, могу создать базу, запрос. Она не хранится в SQL. SQL - это просто язык запросов, внутри БД может быть реализована как угодно. > Но в целом архитектура мне не ясна. Получается что вся база должна хранится в sql и если идёт запрос данных, то сервер должен формировать соответствующий запрос sql, получать данные из базы и переправлять пользователю? Не обязательно сервер, есть sqlite. Но в целом приложение выступает прослойкой между БД и пользователем. > А если запрос сложный? Допустим мне надо целую страницу хтмл сформировать с данными, мне надо раз 20 обратиться к базе? Обращайся 20 раз. Можешь кешировать чтение. Это лучше, чем возможность ситуации, когда однажды самописная БД сдохнет.
>>2083692 >1. При росте размеров БД на каждое небольшое изменение целиком перезаписывается файл. И медленно, и всеоре убьёт диск из-за постоянной перезаписи. Ну, допустим, у меня нет перспектив что база данных станет мега гигантской. 10-20 мегабайт, это прям капец с каким запасом. Тем более в перспективе можно подумать как оптимизировать место. Ну и разве тот же sqllite не записывает всё равно каждый раз все данные в файл? >2. Если во время записи файла ввключится питание, модет записаться половина файла, вторую не восстановить никак. Это легко фиксится. База пишется не в один а два файла, которые меняются местами. Сначала в один, при следующем сохранении в другой. >3. Большая БД не влезет в ОЗУ. С этим согласен. Но опять же, если нет перспектив что база будет занимать гигабайты места - этим можно пользоваться? >Она не хранится в SQL. SQL - это просто язык запросов, внутри БД может быть реализована как угодно. Ну окей, освоил язык. Сути не меняет, будет она хранится в sqllite или MySql >Обращайся 20 раз. Понятно. Грустно как то. В итоге мой вариант более оптимизирован, но из за стандартов юзанья sql - становится признаком нуба. >Это лучше, чем возможность ситуации, когда однажды самописная БД сдохнет. Это легко предотвратить.
>>2083700 Sqlite делали умные люди и нахуячили туда сотни оптимизаций, а ты хуяришь строчки в простой тхт-файл и думаешь что у тебя то же самое. Чел.....
>>2083700 Можешь посмотреть на всякие in-memory СУБД, там тоже всё держится в ОЗУ и иногда сохраняется на диск, там это делается оптимальнее, чем в самописной. В реальности используется в основном для данных, которые не жалко потерять, всякие кеши, результаты вычислений, очереди сообщений и подобное, что можно легко восстановить.
>>2083704 Я не говорю что то же самое. Но лично пробовал, скинуть целиком базу в тхтшку на порядки быстрее, чем скинуть её в sqlite. В других бд не пробовал. Ну ладно, я сюда не обсирать или отстаивать свою точку зрения пришёл. Думал может я что то не так понимаю. В целом то для моей задумки абсолютно не критично, будет запрос обрабатываться 0,1 секунду или 0,01 секунду. >>2083717 В целом я делаю проект больше для портфолию, мне надо что было как у всех...
>>2084592 Нет, не понял. Signed int32 - длина поля в байтах. Varchar вмещает 2ккк байт == 2ккк символов == char == uint8. Nvarchar вмещает 2ккк байт == 1ккк уникодных символов == wchar == uint16.
Посоветуйте гайдецкий по индексам в монго. Почитал их доку - нихуя не понял, где и какой лучше использовать. У меня документы в коллекции с 10 полями, все они и/или могут быть включены в выборку. Внимание вопрос: 1. Если на каждое из полей вешать compound индекс, будет ли в этом толк? 2. Будет ли в 1 кейсе перекрытие индексов, если оба поля будут участвовать в выборке? 3. Нужны ли partial filter expressions вообще? Выжу в них смысл только в тех кейсах, где одна и та же кверя отрабатывает по нескольку раз. Спасибо
>>2052408 (OP) > https://metanit.com/php/mysql/ Подскажите, я могу делать всё как по этому гайду, но только с postgres? Через PDO всё будет такое же или нет? Mysql никак не хочет устанавливаться.
>>2086174 >ты обосрался ещё на этапе установки бд Лол, установщик не может запустить сервер, а виноват конечно пользователь, а не говнокорпа. Гугл говорит, что это извечная проблемаmysql, но из решений только танцы с бубнами, которые мне не помогли.
>>2086589 Ну в случае тотального отсутствия вариантов решения проблемы, за исключением сноса винды, конечно да, хоть уволюсь, в чём проблема? Мне из жопы высрать нормальный mysql, написанные не криворукими дебилами?
Сап котаны. Хочу ускрить запрос навешиванием индексов,
запрос вида
SELECT * FROM GOVNO WHERE BEGIN>=2020-01-01 and END>=2020-01-02
Достаточно ли будет проиндексировать BEGIN+END или нужен связанный индекс по двум полям, или ещё какое-нибудь колдунство? Что посоветуете при таком сценарии вобще?
>>2087980 Всё очень плохо. Если у тебя будут индексы на обоих полях, для доступа к данным все равно будет использоваться только один индекс. И надо учитывать, что если твои условия выполнены для большинства записей (очень старая дата BEGIN, очень новая дата END), то от индекса будет только хуже. По тем же причинам индекс на одновременно BEGIN + END будет говной. Как вариант, можешь попробовать партиции на одно из полей и индекс на второе.
>>2088276 Конечно, будет, именно для этого они и нужны. Но вы учитывайте, что в колоночных СУБД дорогие апдейты и джойны, так что нужно выбирать СУБД исходя из решаемых задач в целом.
Что, появилась там, наконец, легковесная мастер-мастер бд с eventual consistency? Или, может, постгресс освоил такие технологии? Пару лет назад, вроде, такие подвижки были.
>>2088628 Так перформанс по партициям сильно от объема данных зависит, не? Одно дело по ключу партиции вытащить несколько лямов, а другое дело даты дрочить. Не делайте себе голову, проверяйте на своем железе. Тут запросы пару строчек
>>2089245 Если ты про всякую IDEF0-ER-UML-парашу, ей пользуются только студенты на лабах и то только потому, что заставили преподы. Просто думаешь, какие таблицы тебе нужны, пишешь скрипты для их создания, и всё.
Есть запрос с фильтром по СТАТУС + КОМПАНИЯ: > SELECT * FROM orders > WHERE > status IN ('pending', 'success', 'sended', 'received', 'in_process') > AND > company_id IN (91785) > ORDER BY deadline_at DESC, id DESC > LIMIT 100
И есть индекс на ДАТА + КОМПАНИЯ. > CREATE INDEX orders_created_at_company_id_idx ON public.orders USING btree (created_at, company_id);
И каким-то образом этот индекс работает для этого запроса: > Limit (cost=66625.18..66625.43 rows=101 width=110) (actual time=74.533..74.543 rows=81 loops=1) > -> Sort (cost=66625.18..66625.57 rows=158 width=110) (actual time=74.531..74.536 rows=81 loops=1) > Sort Key: deadline_at DESC, id DESC > Sort Method: quicksort Memory: 36kB > -> Index Scan using orders_created_at_company_id_idx on orders (cost=0.43..66619.41 rows=158 width=110) (actual time=43.235..74.485 rows=81 loops=1) > Index Cond: (company_id = 91785) > Filter: ((status)::text = ANY ('{pending,success,sended,received,in_process}'::text[])) > Planning time: 0.474 ms > Execution time: 74.615 ms
Я не понимаю, а как он вообще может использовать такой индекс? Время же хранится как 8-байтоый инт - то есть это микросекунды и заказы размазаны по суткам абсолютно хаотично. И он идет первым в индексе. А второй идет компания. Это же вообще бессмысленный индекс, но блять, он работает и фильтрует по нему компанию. Как так?
>>2092383 Лол, у тебя может одна и та же компания быть создана несколько раз в разное время? Есть ощущение, что created_at, company_id - 1 уникальная пара для company_id, так что оно по этому индексу как раз находит компанию. А потом уже фильтр на те строки, что по индексу.
>>2092481 А не, я объебос и читать не умею. Хз, хинтани как-то full scan по фильтру и посмотри. Мейби ему рли проще по дереву индексов пройтись, игноря даты.
>>2092489 Постгря >сам пишет, что по 1 кондишену индекс смотрит Но это составной индекс же. Сначала дата, потом в рамках этой даты компания. date1 - с1 - с2 date2 - c1 - c3 Это же так работает вроде?
Дока говорит, что >This index could in principle be used for queries that have constraints on b and/or c with no constraint on a — but the entire index would have to be scanned, so in most cases the planner would prefer a sequential table scan over using the index.
>>2092563 Хмм, да возможно, что-то я не подумал. Это типа получается как фулскан, только по индексу бежать типа быстрее. Да, спасибо анон, видимо так оно и есть.
При Table Full Scan нам всегда нужно 100% строк смотреть.
При Index Full Scan иногда возможен такой кейс. Пример: date1 - с1 - с2 -... -сN date2 - c1 - c3 -... -cM
Нам нужно найти с2, допустим. Пойдем по каждой дате, но будет чекать не 100% записей в индексе, а только до момента записи с2, потом дальше в ветке по дате смотреть нет смысла. И выходит, что вроде как Full Read, но читаем не всё.
А если ещё окажется, что оно как-то алфавитно или по моменту добавления индексы строит, или по частоте запросов (хуй знает, пути СУБД неисповедимы иногда), то мейби там вообще в 1-2 блоке индекса щас лежало и всё так шустренько вывело.
>>2092576 >а только до момента записи с2 Ну да, логично. Правда в моем кейсе это будет безпрофитно, тк почти невероятно то что заказы будут в одну микросекунду. Но так-то да.
Не могу до конца въехать, что нужно добавить в запрос, чтобы данные, хранящиеся в таблице слева, оформить в виде как справа.
Данные: есть номера, типы и даты. Сочетание "номер + тип + дата" уникально, а сочетание "номер + тип" может повторяться. Задача: необходимо отобразить историю изменений типов в рамках номера с течением времени.
Простая группировка вида select cr_client_id, private, min(period) as "amin", max(period) as "amax" from ohldata where cr_client_id in(12662312) group by cr_client_id, private order by 3; подходит только для таких случаев: 123;2;01.04.2021 123;2;01.05.2021 123;2;01.06.2021 123;3;01.07.2021 но не подходит для случаев: 123;2;01.05.2021 123;1;01.06.2021 123;2;01.07.2021 123;3;01.08.2021 т.е. когда с течением времени в поле "тип" начинают повторяться значения.
>>2093511 Это очень интересная задача, но ты все делаешь неправильно, как ты сам заметил, ты не должен просто группировать по типу, потому что это не отрабатывает ситуации, когда значения одного типа были в два разных периода. Эта задача решается через аналитические функции, они есть в бд, в которой происходит действие? >>2093552 Хорошая работа, минусов нет.
>>2093511 Тебе повезло, что я в отпуске и задача крутая. Вот так она должна решаться. Первый запрос: получить признак того, что значение поменялось. Второй запрос: просуммировать единички нарастающим итогом и получить цифру, которая одинаковая у всех в рамках одной группы, айди группы, короче. Последний запрос: сгруппировать по полученному айди и вывести значения.
Аноны, есть загрузчик данных в таблицу из csv-файла. Пишу скрипт, который сравнивает таблицу и csv-файл, и логирует строки которые не занеслись в базу по каким-то причинам. Пока что написал только для загрузки данных в пустую таблицу, но что делать если она непустая? Скрипту на вход подается только файл-источник и таблица. Как узнать, с каких строк начать сверять данные?
>>2094341 Системное поле с моментов вставки/обновления строки добавь. Или хотя бы с номером загрузки. Или ебись костылями через rowid или его эквивалент.
>>2093885 Огромнейшее тебе спасибо! Добра, большой зп и интересных задач!
Аналитических функций в моей БД (Sybase 9.0.2 + ASA 9.0) не оказалось, а написать альтернативу lag я пока не смог (пробовал через добавление ещё одного столбца с порядковым номером строки и последующим селфджойном со смещением на предыдущую строку и проверкой на равенство типов между строк, но что-то нужного результата пока не получил; также поэкспериментировал с rank() и dense_rank(), результата также не получил, но хотя бы наглядно понял их отличие), так что перенес данные в другую БД и воспользовался твоим запросом.
>>2094341 Ебашь мердж, если в таблице нехватает добавит, если нет обновит. Либо делай инсерт с игнором ошибок, чтоб дублей не было. Вобще я чот нихуя не понял в чём проблема то?
Если тебя смущает что данных много, то часто делают мердж только за определенные даты, скажем за сутки.
Анон помоги плез, нужно сделать запрос который выводит коды продавцов salesperson из таблицы purchase_archive, которые не повторяются в таблице purchase. Но у меня выводятся тупо 2 таблицы. Что не так? И заодно сразу спрошу: как вывести только тех продавцов которые содержаться в таблице purchase_archive? Заебался шо пиздец
>>2095842 SELECT DISTINCT salesperson FROM purchase_archive INNER JOIN purchase ON purchase_archive.salesperson = purchase.salesperson; Тоже не срабатывает, хз че не так
>>2095842 SELECT DISTINCT purchase.code FROM purchase JOIN archive ON purchase.code = archive.code WHERE archive.code IS NOT NULL; Это которые есть, которых нет соответственно IS NULL
>>2095888 SELECT DISTINCT salesperson FROM purchase_archive LEFT JOIN purchase ON purchase_archive.salesperson = purchase.salesperson WHERE purchase_archive.salesperson IS NOT NULL; Так что ли?
ERROR 1052 (23000): Column 'salesperson' in field list is ambiguous
>>2095899 SELECT DISTINCT purchase_archive.salesperson FROM purchase_archive LEFT JOIN purchase ON purchase_archive.salesperson = purchase.salesperson WHERE purchase.salesperson IS NOT NULL; Вроде так.
Работаю SQL-макакой, из дома. Работаю с большими реляционными БД. Неплохо знаю SQL, и получается работать по 20-40 минут в день, вместо 9 часов. Зарплата норм. Что учить дальше из смежных областей, чтобы ЗП только повышалась, но при этом чтобы работать не больше часа в день? Есть ли тут такие?
Если у меня будут обращения в базу для чтения гораздо чаще, чем запись в неё и от многих пользователей, то что делать? Писать в ОЗУ, а потом сбрасывать в реляционную? Или типа может сразу какой-то NoSQL есть?
Redis делает snapshots в файл так, что мне будут доступны все эти ключи собственно, но в ОЗУ будет только то, что нужно сейчас? Типа если не найдет ключа в ОЗУ, то лезет в файл, находит и ставит в ОЗУ? Да?
Хотя чет другое поведение и трудно представить или может быть?
>>2097025 Мне надо, чтобы на случай, когда очень много ключей и не влезают в ОЗУ. Тогда старые (незапрашиваемые) идут в файл откуда можно достать если что и поместить уже в ОЗУ. А часто используемые и остаются в ОЗУ, хотя и их тоже желательно иногда в файл. Такое возможно? Если да, то как? Задача ж вроде популярная, наверное.
>>2052408 (OP) Разжуйте, пожалуйста. Ощущение, что понял совершенно не так, как написано. Цитата из Джуба, Волков, "Изучаем PostgreSQL 10", стр. 32 (отсюда: https://postgrespro.ru/education/books): "Но, в отличие от первичного ключа, внешний может принимать значение null. Он также может ссылаться на уникальный атрибут внешнего отношения. Допуская значения null во внешнем ключе, мы получаем возможность моделировать различные ограничения кардинальности, т. е. ограничения на количество элементов по обе стороны связи. Например, если родитель может иметь более одного потомка, то говорят о связи один-ко-многим, поскольку с одним кортежем первичного (ссылающегося) отношения может быть ассоциировано несколько кортежей внешнего."
Определение внешнего ключа: Внешний ключ - это атрибут или группа атрибутов, однозначно идентифицирующих кортеж в отношении, на которое производится ссылка (внешнем отношении).
Зачем внешнему ключу может быть нужно разрешение принимать null? Правильно ли я понимаю, что: 1. Имеем таблицы customer, service и customer_service (кот. содержит ссылки на id клиента и сервиса в соотв. таблицах). 2. У нас есть внешний ключ в customer_service, который, помимо ссылки на атрибут customer_id в таблице customer имеет ссылку на еще какой-нибудь атрибут оттуда же, например, first_name. 3. И вопрос в следующем: правильно ли я понимаю, что этот FK не может иметь null для атрибута customer_id, но может иметь null для атрибута first_name?
>>2097060 Ответ на вопрос: нет, неправильно. Для начала внешний ключ должен ссылаться на потенциальный ключ.
Насчет NULL: он нужен в FK в том случае, если я хочу смоделировать отсутствие соответствия в главном отношении. Например, есть таски, есть разработчики, каждая может быть назначена какому-то одному разработчику. Пока таска никому не назначена - все бухают ее FK будет NULL.
Почитал книжку этого Дзюбы... Ну знаете. На 34-й странице автор утверждает, что для теоретико-множественных операций алгебры необходим строгий порядок атрибутов. Грубое надругательство над Коддом. На 37-й странице Дзюба после декартова произведения получает отношение с двумя атрибутами customer_id. Закрыл книгу. Нахуй такую литературу, малец. Кузнецова читай.
> Допуская значения null во внешнем ключе, мы получаем возможность моделировать различные ограничения кардинальности, т. е. ограничения на количество элементов по обе стороны связи. Например, если родитель может иметь более одного потомка, то говорят о связи один-ко-многим, поскольку с одним кортежем первичного (ссылающегося) отношения может быть ассоциировано несколько кортежей внешнего.
Это тоже звучит как бред и неудивительно что вызывает вопросы.
Аноны, есть csv-файл, и есть таблица, содержащая данные из этого файла (не все). Как быстро сравнить файл и таблицу и найти разницу в данных? Сейчас я делаю так: загружаю таблицу в другой csv-файл, и каждую строку из первого файла ищу во втором. Короче, медленно. Можно ли быстрее? Использую python (можно bash)
так поясните раку, который с нуля хочет вкатится в SQL , реально ли обучиться на аналитика абосанца самого галимого уровня и получать хотя бы 70-100к, если я не знаю ни одного языка программирования и вообще нулевый в этой теме? Я не работал ни сисадмином , вообще в этой сфере не работал. Но мне человек сказал, что в SQL любой может вкатится и получать свои 120к в мск. https://www.youtube.com/watch?v=BYCU3XyKCzA смотрю Кухаря, на 3ем уроке пошли какие то чары варчары, в общем нехуя особо не рассказывается откуда он какие то формулы берет и для чего, нехуя не понятно. Мне что просто повторять за ним как мартышка и я в итоге пойму или как ? а подскажите аноны, а то меня из дома выгонят скоро. В каком направлении двигаться то , может кто расписать что сначала изучать начать, а что потом, чтобы дебил с 0 мог понять смысл вещей.
>>2099114 > Ебать, надо каждое слово с разными регистрами оборачивать в двойные ковычки, уу сука Потому что при создании ты написал идентификатор в двойных кавычках. Пиши всё без кавычек и капсом, и проблем не будет.
>>2099333 Нет, в твоём случае это нереально, ведь в тебе ноль интереса к теме, нет образования и способностей, только жадное желание получать сотыгу всеми правдами и неправдами. Рекомендую вкат в гей-проституцию.
>>2099370 Боимся конкуренции от такого могучего деятеля, да. Просто вопрос максимально идиотский. Хочю стать хуй-нейм, чо делоть? Читай книги, смотри своих цыган, потом приходи и спрашивай по сути.
>>2099377 ну так мне нравится анализ данных и тд, поэтому мне и посоветовали это. Я прошу просто дать мне алгоритм обучения, чтобы я с 0 смог иметь понимания , а не тупо зубрить как учили в школе, вот и всё. Хуле вы все такие негативные то блять
>>2099380 Ты плохо залетел, надо было сразу мимикрировать под джуна с горящими глазами. Ну а мы самый нищий слой айти и к тому же двачеры, так что не удивляйся. советов по существу не дам, всё пока
>>2052408 (OP) Щас вкатываюсь в Spark. Вроде похоже нa SQL, но много всяких погромистких нюансов, создаётся ощущение, что это не SQL макак а дли мидлов бекендеров, ууу сука ъхъ.
Раскуриваю Learning Spark, 2nd Edition с орели там бесконечные триалы можно абузить, не сказать чне понятно, но очень много новой инфы, и как назло топики которые мнен ужны, в самом конце книги. Ёбаный рот это казино, я тока неделю пытался среду разработки приколхозить. Такие дела анончики
>>2099522 Они кстати хорошо получают, времена верстальщиков давно прошли. Всё из-за востребованности их хуйни, при этом знать надо не так много. Думаешь, почему они такие охуевшие? Кто действительно бедный - так пхп-шники и 1с-ники.
>>2099462 Приготовься охуенно соснуть. Спарк это JS бигдаты, финальный босс от которого твоя жопа разлетится на мелкие кусочки так что никакой хирург не соберет обратно. А если нет, то я тебя все равно попущу на собесе. Чел, серьезно, не стоит вскрывать эту тему.
>>2099684 Вроде сделал через FOR. Теперь вопрос, а что я должен вернуть из функции before truncate триггера? Если я верну NULL, то другие триггеры не вызовуться (так же?), new/old тут не имеют смысла, тогда что?
>>2099807 Всё как обычно зависит от задачи. Если у тебя сотни записей и есть индекс, то быстро. Если надо посчитать миллионы записей, то имеет смысл сделать поле count и повесить триггер на delete/insert, но в таком случае ты замедлишь эти операции в несколько десятков раз, плюс поле count не поможет, если надо посчитать используя фильтр.
>>2099807 Зачем отдельное поле? У тебя есть поле с первичным ключём уже. Да и вобще не думаю что на count влияет содержимое поля. COUNT(1) нужно только для того чтобы посчитать без NULL для конкретного столбца. Вобще не выебывайся ,а иди смотреть план запроса.
>>2100187 Чел жиденько обосрался. Count (1) эквивалентно count (*) и считает все строки, а чтобы посчитать без учёта null, нужно делать count(имя_столбца) >>2100105 Извиняйся.
>>2100251 Ничего, бывает. count(1) это как если бы ты добавил столбец, состоящий из единичек и сделал count по нему. Еще крутой вопрос, которым можно душить джунов: что вернет count(null)?
>>2100254 >Еще крутой вопрос, которым можно душить джунов: что вернет count(null)? Расскажи. Судя по логике остального, он как будто добавит столбец, состоящий из null, и сделает count по нему, но так как null он не считает, то получится 0.
>>2100623 Звездочка находится на цифре 8. Если учесть, что ты печатаешь ещё и скобочки, то для (*) ты нажмёшь shift + 980, все рядом. А для (1) ты будешь тянуться к единице и отжимать шифт, чтобы ее нажать. Второй тест на уебана: where 1=1 пишешь?
Сап, студент на связи, поясните пару моментов: 1) Насколько вообще востребован SQL сам по себе? Без нормального знания какого-то ОО языка программирования есть смысл в это лезть, или без связки вообще не стоит? 2) Как понять, что ты готов пиздовать на джуна? Какие вообще задачи дают джунам? Явно же не только задания уровня сделать nное количество простых запросов с джоинами и парой стандартных функций в селекте. Спасибо
>>2100925 Да, востребован и сам по себе. Есть очень много разных аналитиков или разработчиков баз данных. Но почему ты не хочешь вкатиться в настоящее программирование пока молодой? Да, джунам в основном дают простые задачи, взрослых дядек спрашивают по кишочкам конкретных БД.
Переставил систему, накатил постргю. И теперь почему-то не работает. Подскажите что не так? Раньше select similarity('йцу', 'йцукен'); выдавали что-то около 0.5 psql (PostgreSQL) 13.3
Аноны, кто шарит в базоданности всей этой базоданнизациоанальной, подскажите плиз - с чего начать, блядь? Думаю, короче, присобачить на наноборду SQLite, чтобы там всё реляционным было и чтобы реляционизировало реляционность реляциональнизационно. Есть даже такая вот dll-ка, https://github.com/username1565/System.Data.SQLite которая билдится под шиндой, но херово билдится на mono (какая-то шляпа нипанатная, выдаётся на выходе). В общем, как я понял, судя по исходнику, код базы где-то вот здесь: https://github.com/username1565/nanoboard/blob/dev/nanodb.exe-source/Database/PostDb.cs и как туда впихнть сиквелайт - хуй знает блядь. В общем, интересует всё, струкура таблиц там, индексы-хуиндексы, репликационность, шардинг, ну и собственно базоданность заебенчатая, чтоб летало всё и не бузило. Опционально, криптование базы, чтобы мусор не спиздил инфо. Шифрование думаю тупо сделать AES, а инфу хранить в blob'aх, но это уже второстепенное всё. Надо короче набросать план, а с чего начать не знаю, блядь. Походу мне надо кто-то, кто шарит в проектировании баз данных, для датацентров пиздатых, потому что в будущем, база нанопостов такого глобального проекта как наноборда, он может занимать целые пиздатые подземные лаборатории в замкнутых экосистемах на различных экзопланетах.
>>2052408 (OP) Пусть есть таблица, реализующая дерево. | ID | parentID | data | Для каждого ID, здесь, существует, один и только один parentID.
Вопрос. А возможно ли, каким-либо образом, реализовать связь один ID -> много parentID, сделав это, с сохранением обратной совместимости с этой вот таблицей? Первое, что приходит в голову, это включить дополнительные parentID's внутрь data, но тогда придётся парсить data для каждого ID. Может есть способ попижже, через какую-то дополнительную таблицу, заебенить сие, но сделав это так, чтобы эту вот таблицу не передёргивать, чтобы новый способ был как-бы опциональным, и мог не работать, но эта шняга чтобы гарантированно работала, как и прежде... Мм?
Будет ли count() > 100 from.. where.. пересчитывать все строки, или остановится на 101-ой. По моим тестам в SQLite считает все, ибо count() > 100 from (select.. from .. where.. limit 101) работает быстрее. Какие подводные есть у такой оптимизации? Или все так и пишут через подзапрос, а это я лопух писал просто count(*) > n? Или это SQLite не оптимизирует, а во "взрослых" базах без разницы? А?
>>2102271 Да, никакого волшебства здесь нет. Сначала считать все строки, потом сделать count, потом применить к нему условие. Во втором случае сразу ограничиваешь количество строк, которые читаешь, поэтому быстрее. Никаких подводных нет, вопрос только, нахуя тебе это нужно? Проверить, есть ли в таблице 100 записей? Ну ок.
>>2102285 >нахуя тебе это нужно? Проверить, есть ли в таблице 100 записей? Типа того. Пишу борду (судя по посту несколько выше не я один), и так как сортировка тредов на доске у меня начала подпердовать уже на 300к постов (~100мс), то я принял волевое решение добавить в тред поле lastBump и повесть на инсерт поста триггер, который обновляет это поле. Соответственно триггеру надо проверить количество count(*) > bumpLimit и решить поднимать тред или нет. Конечно в моем случае не будет разницы между количеством постов и лимитом в 1000 раз, когда разница в скорости подсчета становится заметна (пока писал подумал, может еще добавить поле с количеством постов и два триггера на инсерт/делит хм.. Стоит ли?), так что вопрос скорее возник из спортивного интереса. Допускаю что я пошел совсем не тем путем, я совсем зеленый и "проектирую" все на ходу. Зачем я высрал этот пост? ХЗ.
>>2102309 >Зачем я высрал этот пост? ХЗ. Нет-нет, очень интересная проблема. Но с триггером хуйня затея, очень большие накладные расходы, если заниматься этим на каждом посте. Не хочешь повесить джоб, который запускается раз в 5-10 минут и тред все треды, в которых больше определенного количества постов и последний бамп был определенное количество минут назад?
>>2102309 Кстати, обрати внимание, как двач сделан. Есть уникальный ID поста и есть номер поста в рамках треда. Может быть, тебе будет проще поддерживать номер поста и не поднимать, если номер нового поста больше 500?
>>2102316 >>2102318 >Но с триггером хуйня затея Ты про триггер, который lastBump ставит? Так это поле очень полезно: имея индекс (доска, бамп) можно очень быстро получать какие треды должны быть на какой странице. Плюс на главной показывать последние обновленные треды. В общем-то вот эта сортировка тредов на доске по последнему бампу с учетом сажи и сжирала 100мс. >джоб, который запускается раз в 5-10 минут Вообще есть такое желание, толко не тереть а отправлять в архив, например в виде json'a. Но до этого мне еще пердолить и пердолить. Например на форчане 10 страниц по 10 тредов + n тредов, которые утонули, но еще доступны по ссылкам, хуё-мое, получаем ну пусть 300 тредов по 500 постов. итого 150К постов, т.е. рядом теми 300К, которые я тесстировал. >Кстати, обрати внимание, как двач сделан. >Есть уникальный ID поста и есть номер поста в рамках треда. О, а тут у меня совсем наркомания. Я ковырял vichan на гите и там в бд для каждой доски своя таблица постов и нет сущности тред (там у постов есть поле parentId - ссылка на оппост, приреплен ли тред тоже свойство поста), но мне такое не очень понравилось, все-таки тред это тред, а пост это пост. Так вот, что бы сделать раздельную нумерацию постов на досках, я при создании доски (через триггер) создаю и sequences для каждой доски и при постинге посту (снова через триггер) устанавливоется поле Number. А насчет номера поста в треде, его же все равно надо вычислять (да банально max() + 1) и при удалении постов мочей придется сдвигать нумерацию. Хотя это наверняка будет быстрей, чем каждый раз count() делать. Кстати насчет tinyboard, там хитро сделано, что сами треды дублируются в виде фалов на диске и автоматически обновляются. Т.е. при запросе отдаются статические файлы и база практически не напрягается. Такой вот ультимативный кэш.
Хочется сделать приличное ядро и при этом не тупо копировать у других, но возможно я замахнулся на то, что мне не под силам. Но в любом случае, как говорится, обосраться - тоже опыт.
>>2102476 >в чем отличие треда от поста? На мой взгляд, прикреплен ли тред, заголовок треда, является ли тред ридонли и прочие прараметры хранить в таблице постов неправильно, они же могут быть применены только к оп-посту. Как-же нормализация БД? >Во многих движках тред и пост Знаю, вон даже номер треда это номер оп-поста.
>>2102126 Нихуя не понел. То есть, надо просто ещё одну таблицу сделать | ID | DataID | parendDataID | сформировав как-бы набор-данных из этих двух таблиц, и её уже наполнить, парся data для каждой заПИСИ?
Анон, помоги. Есть заморская программа с закрытым кодом. Она пишет данные в SQL Server. И вот что я хочу - когда программа что-то пишет в базу, я хочу видеть куда оно это записало, и что именно записало
Есть какие-нибудь средства для этого (MS SQL Server) - и да, я не шарю в девопсе и про базы данных знаю только на уровне команд SQL, поэтому мне надо попроще
>>2104247 В SSMS, про который тебе ответили выше, есть SQL Server Profiler. Ты им подлкючаешься к БД, настраиваешь нужные параметры (что именно логировать, для какого клиента и тд), запускаешь свою закрытую прогу и смотришь в профайлере все запросы, которые она шлёт.
>>2104402 Можно динамически строить запрос, с начало запрашиваешь имена таблиц, потом из этих имен клепаешь запросы, в том числе одно из полей имя таблицы. Название таблиц берешь либо из системной таблицы либо создаёшь свою настоечную таблицу.
Анон, хочу вкатится в условное DBA по PostgreSQL. Из знаний, ВУЗовский SQL 92, пинус и доебавший EF Core.
Хочется узнать: - Принципы работы PostgreSQL под капотом - Как работают индексы с примерами "вы обосрались" - Мониторинг, логирование - Репликация и масштабирование - Проектирование
Я не знаю чо я хочу. Я хочу чтобы можно было самому себе сказать, что я знаю как это делать и не было стыдно перед работодателем и собою. Чтобы я мог в целом предсказать поведение СУБД, а не рассказывать что дропать индексы ради переименования или джойнить жопой медленно, потому что пук.
Есть какой-нибудь адекватный план по вкатыванию путем книжек, курсов, etc? По сути только https://www.postgresql.org/docs/books/ Бери любую да читай, но хз мб двач подскажет че-нить
>>2104965 > хочу вкатится в условное DBA по PostgreSQL. У постгрес про есть пиздатый курс дба на русском. Только нахуй тебе, потенциальному разработчику, DBAшные знания?
Что такое SERIAL в pgsql? Это не тип, и не ограничение, тогда как мне его изменить? Как вообще проверить, что это свойство есть? Пытался добавить запись в таблицу из php и получаю:
Unique violation: 7 ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "elem_pkey" DETAIL: Ключ "(id)=(1)" уже существует
Какого? Оно же само должно увеличиваться? Мне что блять, самому ещё туда уникальное id заносить?
>>2105129 > У постгрес про есть пиздатый курс дба на русском Можешь кинуть ссылку или название курса? > Только нахуй тебе, потенциальному разработчику, DBAшные знания? У меня основной профиль информационная безопасность, поэтому сижу на двух стульях одновременно - администрирование и программирование. Если говорить на языке зумеров - SecDevOps, Security Champion или DevSecOps. Более реальный кейс - System Architect. Ну и чем хуевей проект (стартап или отсуствие денег), тем мультизадачней тебе надо быть
На тесте поставили задачу, написать на постгрес вариант магазина, где есть некий товар в количестве N штук, и что бы пользователи могли резервировать этот товар по нескольку штук. И надо что бы это было якобы высоконагруженно и многопоточно. В общем всё сделал, но вылазиет фигня что так как многопоточно, то получаются лишние резервации, сверх запаса. При том именно постгри позволяет как бы параллельно работать с копией базы данных, и потом синхронизирует и получается бяка. Я могу это исправить на уровне языка (шарпа, фактически сделать однопоточную отправку), но как то вообще можно постгри заставить обрабатывать работу с конкретной дб в одном потоке?
>>2106964 P.S. Или есть какой то синтаксис, что бы можно было вставлять строку с условием? Ну то есть если условие выполняется, то вставка работала, а если нет - то нет. Что б это в одном запросе как то было...
>>2106964 > В общем всё сделал, но вылазиет фигня что так как многопоточно, то получаются лишние резервации, сверх запаса. Раз тебе на тесте сказали сделать что-то многопоточно, то скорее всего подразумевается, что ты будешь использовать транзакции, определишь границы транзакций, выставишь уровни изоляции и т.д.
Лишние резервации сверх запаса получаются из-за того, что чтение количества резерваций и запись (добавление) резервации выполняются не атомно. Нужно чтение и запись резерваций объединить в одну транзакцию.
>>2107855 Транзакции не помогут, как я понимаю. Я засунул весь процесс в одну хранимую функцию. Если вкратце, она сначала смотрит запас, потом вносит резервацию, потом проверяет снова запас, и если бронь таки получилась лишней, то удаляет её. По сути копия транзакции (не делал напрямую транзакции, потому что требуется использовать процедуру, а мне нужна была функция, что бы показывало итоговое количество резерваций) Но всё равно, вылезают лишние резервации. Как я читал про постгри, про её работу с многопоточностью, то там получается каждый поток работает с копией бд, а потом результат синхронизируется.
Есть база данных MySQL, в ней 221048 записей Поиск 1) SELECT FROM database WHERE MATCH (text) AGAINST ("+word1 +word2 -word3" IN BOOLEAN MODE) 26 rows in set (20.26 sec) Поиск 2) SELECT FROM database WHERE text LIKE "%word1%" AND text LIKE "%word2%" AND text NOT LIKE "%word3%" 32 rows in set (5.04 sec)
Так и должно быть? Вроде пишут что первый метод быстрее И ещё чем почему все крупные компании не используют MySQL а используют другие БД?
>>2108478 Ну мне кажется логично, что второй метод быстрее. В первом он фактически проверяет соответствие всем трём условиям сразу, а во втором, если первое не подходит, то он второе уже не проверяет, например.
>>2109375 Мой говнокод работает через Qt и QSqlQuery. Грубо говоря, процесс ввода логина пароля - это просто их запись в оперативную память компьютера. А дальше прога в работе либо выдаёт ошибки (если ты не залогинен, либо нет доступа), либо работает нормально.
Мне надо сделать какой-то запрос, чтобы после клика по кнопочке "Войти" он писал - удачно я вошёл или нет.
А для этого нужно отправить какой-нибудь запрос в БД. Но городить костыли в виде if-ов, в которых проверяется доступ хотя бы к одной базе - вообще не хочется
Допустим есть таблица с иерархической связью: Id, ParentId, Name... Как можно в определении таблицы сделать ограничение на ParentId так, чтобы он был либо NULL, либо соответствовал одному из уже имеющихся Id в этой же таблице?
Сап аноны, у меня есть вопросы по нормальным формам.
Есть схема пиклередй.
На всякий случай ещё раз опиши текстом, есть три таблицы, в одной хранятся данные, какие-то нормы, скажем артериальное давление, оно бывает двух типов верхнее и нижнее, соответственно тип вынесен в отдельный справочник. Так же в отдельную таблицу вынесен период действия этих норм, условно в январе одни нормативы, в феврале другие. Но у нас ещё есть скажем температура тела, но так как он не привязана к типу, мы ебашим его прям в периоды. Да, по мне как гавнодизайн, но вопрос не в этом:
1) В каком НФ находятся синие таблицы? 2) Чем это черевато? 3) Какие весомые аргументы есть в пользу нормализации и вынесения второго набора нормативов в отдельный справочник.
Есть одна таблица в postgres, колонок из 20-30, куда будет сапаться относительно много записей, причём около 3/4 колонок в каждой записи будет заполнено нулями. Как оптимизировать подобное в плане экономии места?
Аноны, помогите пожалуйста. Какой общепринятый вариант массового инсерта с плейсхолдерами в постгресе. Вот мне надо добавить 500 позиций в таблицу за один раз и я начинаю тянуть такую колбасу INSERT INTO albums (album_id, name, artist) VALUES ($1, $2, $3), ($4, $5, $6) и т.д, параллельно пересобирая массив данных для нормального добавления. Я хуйню делаю и есть какой-то другой нормальный способ, или все норм? А если мне нужно в три таблицы паралелльно данные заносить? Это же ебануться можно
Допустим есть таблица MySQL, в ней записи по датам, можно ли получить на основе неё таблицу содержащую столбцы: дата, кол-во записей например 2021-07-20 100 2021-07-21 120 2021-07-23 97
Можно ли в постгресе из функции вернуть таблицу с двумя столбцами с одинаковыми именами? Т.е. у меня в функции есть запрос по типу select foo., bar. from foo join bar on foo.a = bar.b и нужно вернуть | ID | A | ID | B | Я не хочу гонять сам запрос от клиента к бд, поэтому решил сделать функцию. И не хочу усложнять маппинг, поэтому хочу столбцы с оригинальными названиями.
>>2111445 А можно ткнуть меня лицом в доку по этому пайпу? Гугл выдает раздел про pipeline, который относится к старой версии постгреса, в новой версии такой страницы нет вообще
Хелп, я сейчас ебнусь головой с этим sql pg sql Есть две табы, связь один ко многим. Я делаю запрос на получение данных из первой табы, но мне также нужно подсчитать число записей во второй таблице, относящихся к первой таблице, и при этом подсчитывать надо только те, у которых значение поля free = false.
SELECT table1.id, table2.number_free_seats, FROM table1 LEFT JOIN table2 ON table2.table1_id = table1.id WHERE table1_id = $table1_id ORDER BY table1.id
Я не понимаю, где и как тут правильно подсчитать count? Как его вообще отнести именно к таблице table2 и как при этом подставить "case when free = 'null' then 1 else null end", или это надо делать через where? И даже если я просто подставляю count(table2.id) без выборки по соответствию поля free = false, но на это получаю: >столбец "table1.id" должен фигурировать в предложении GROUP BY или использоваться в агрегатной функции (У МЕНЯ ЭТО УЖЕ СДЕЛАНО, почему мне это пишут?) Пишут, что такую ошибку надо исправлять тем, что делать count прямо в left join, а результат равнять какому-то полю, и это поле запрашивать в select, но у меня для этого нет никакой поля в table2...
Вопрос по spark. Есть паркет разбитый на 600 бакетов, из которого я фильтрую набор строк контекстом на 5 экзекуторов. Я наивно предполагаю, что если бакеты равномерно раскиданы по нодам с экзекуторами, то каждый экзекутор просто пробежится по ~120 бакетам и через драйвер вернет нужные строки в приложение. Т.е всего так и выполнится 600 тасков. Но если смотреть через spark UI, то видно что он сначала создает джобу на 1 таск, потом на 4, затем 20, 100 и наконец на 500. Каждый таск выглядит одинаково: FileScanRdd->MapRepartition. Итого больше 600 тасков получается. Это оптимизатор что-то хитро там вертит или что, почему именно такая градация?
>>2115980 Все что служит командным интерфейсом к какой-то функциональности - ЯП. Даже русский это язык программирования кожаных мешков на их определенную реакцию и активность. Просто его формализация весьма хуёвая.
>>2115999 > Все что служит командным интерфейсом к какой-то функциональности - ЯП Тогда и кнопки на микроволновке - ЯП. Если хочешь получить ответы на вопросы, используй общепринятые определения, либо пиши глоссарий в конце поста. А то наверняка у тебя свои понятия для "сейкеля", "говна" и "в сравнении".
>>2116003 Но кнопки на микроволновке действительно ЯП, только очень простой. Я не хочу получать ответы, просто бомбануло очередной раз от изучения этого высера для бухгалтерш и кладовщиц.
Пишу динамическую процедуру для подсчёта кол-ва записей для каждой таблицы, в таблице news_name есть столбец news_name с названием каждой таблицы. При запуске mysql воспринимает переменную как буквальное значение: Table 'testdb.tablename' doesn't exist Код: https://pastebin.com/GRihnUuT Что не так в коде?
>>2116627 Динамический SQL немного не так работает, тебя научить? Ты, действительно, запускаешь запрос select * from tablename, потому что нельзя получать названия таблиц из переменных. Динамический SQL это когда формируешь строчку со своим запросом и запускаешь ее специальной командой. Можешь погуглить, можешь ждать, что придет кто-то знакомый с твоим диалектом sql и напишет все за тебя.
Пришел вести проект в организацию. В нем есть База, около трехсот таблиц. Есть таблицы без связей, но в основном это связи один-к-одному. Мне нужно визуализировать схему БД, что-бы побыстрее въехать в происходящее и смочь быстрее начать ставить задачи перед разрабами. JB DataGrip смогла, но сбила все это в кучу. Поможет ли 4К телевизор в кач монитора, например? Или экспорт в некий формат и ручная правка... Есть вообще мысли на этот счет?
>>2052408 (OP) Сап. Где-нибудь можно взять что-то вроде тренировочных баз данных, на которых я смогу тренироваться писать какие-то сложные запросы или процедуры?
А то я что-то слабо себе представляю, как мне вообще по своей БД и по запросу определять, правильный ли аутпут я получил.
>>2120366 Правда в процессе выполнения заданий ты нихуя не будешь понимать что за хитрые колдунства ты из базы добываешь (если ты конечно не бейсбольный гуру), но это и не нужно — тебе говорят получить то-то и то-то, ты получаешь, знать что это такое — необязательно. Ну и если с английским плохо, то вообще ничего понимать не будешь, тогда лучше сразу стопы к Моисеенко направь.
Добрый день ночь еба Не кидайтесь говном только пожалуйста, начал изучать БД, и стало интересно как создавать триггеры в ссаном Adminer 4.8.0(4.8.1) Поделитесь советом, рекомендацией или своим наставлением юному БДшнику, в инете инфы пруд пруди, но из-за этого каша в голове уже
>>2052408 (OP) У нас архитекторы запилили дата волт поверх дата волта и еще сверху снежинку. Сижу смотрю на эту хуйню и как же блять душно что везде job security driven development... Дегенераты ебучие.
>>2126531 Нельзя, смысл как раз в том, чтобы ничего не знать о файлах. Несколько раз уже видел пост с примером, где селект из файла, при этом все, кто это постит, отказываются говорить, откуда этот пример взяли. Ни одна популярная СУБД так не умеет.