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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Шардинговый реплицируемый баз данных тред v1.2 /sql/ # OP 2052408 В конец треда | Веб
Предыдущий >>1964573 (OP)

Туториалы на русском для тех, кто не умеет гуглить, не может в английский и вообще готов жрать что угодно:
SQL:
- MySQL, Postgres, SQL Server: https://metanit.com/sql/
- Синтаксис SQL кратко: https://learnxinyminutes.com/docs/ru-ru/sql-ru/
- Плейлисты по разным СУБД: https://www.youtube.com/c/SQLDeveloperBI/playlists
- Тоже плейлист, сортировка хуёвая: https://www.youtube.com/watch?v=EHvzvwAv7RU&list=PLY7PmJJFH5nT-lbFKxfbp3rw5BBuq5Azo[РАСКРЫТЬ][РАСКРЫТЬ]
- https://www.youtube.com/c/SQLDeveloperBI
NoSQL:
- MongoDB: https://metanit.com/nosql/mongodb/
- Cassandra: https://proselyte.net/tutorials/cassandra/

На инглише:
SQL:
- https://www.w3schools.com/sql/

Литература:
- Прибыл Фейерштейн. Oracle PL/SQL. Для профессионалов - если уметь исказть, можно найти бесплатно без СМС и на русском.
- Алан Бьюли. Изучаем SQL. - про MySQL, тоже легко находится. Довольно старая, но базовые вещи не сильно меняются.
- К. Дж. Дейт. Введение в системы баз данных - талмуд на овер 1000 страниц.
- Томас Кайт. Oracle для профессионалов - тоже талмуд.

Задачки для оттачивания sql-скилов:
- https://www.sql-ex.ru
- http://sql-tutorial.ru/
- https://www.codewars.com/?language=sql

ETL, OLAP, DWH и другие умные слова:
- https://www.youtube.com/watch?v=WPZuzDJXs-Q&list=PLhhjwMYxzolhP29LSPPwORVQxJX5OjYix[РАСКРЫТЬ][РАСКРЫТЬ]
- OLAP DAX Power BI: https://www.youtube.com/playlist?list=PLhhjwMYxzolhXuySjLR2_n-xb6VvWnjju

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

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

Q: Что лучше, SQL или NoSQL?
A: Как обычно, зависит от задач. Нужна любой ценой скорость - бери NoSQL, нужна согласованность данных - SQL. У всего свои плюсы и минусы, и в обозримом будущем ни один подход не заменит другой полностью.

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

Здесь мы:
- Негодуем, почему шапка - говно, и предлагаем коллективному ОПу идеи, как её улучшить.
- Разбираемся, почему PostgreSQL - не Oracle
- Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
- Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе
- Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование
- Анализируем, как работает поиск вконтакте
- И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно
cda7ed356f7a4a0d6850adbeabb5a425.png13 Кб, 860x458
2 2052414
Подскажите, можно ли как-то при группировке выбирать любое значение в постгресе?
Типа
SELECT some(title) -- похуй какой, любой существующий сойдет
FROM projects
GROUP BY department_id

Понятно, что можно взять min/max. Но зачем лишняя сортировка, если похуй.
3 2052416
>>052414
Так просто title, оно вроде рандомно и будет.
4 2052419
>>052416
>>052417 (Del)
Не, в постгресе тогда нужно это поле включать в GROUP BY, иначе он не знает, какое значение брать.
5 2052522
>>052414
https://stackoverflow.com/questions/3800551/select-first-row-in-each-group-by-group
Там, вроде, кроме min/max предлагают другие решения.
изображение.png290 Кб, 637x358
6 2052738
Сам аноны. В прошлом тхреде говорили что чтобы расти, неплохо бы знать какой-нибудь язык программирования. А где тащемта его применять? Ну вот начал я вкатываться условный питохон, но дальше? Где у них точки пересечения с SQL?
7 2052743
>>052738
Обычно в бэкенде, есть у тебя некая серверная приложуха на каком-нибудь фреймворке, и надо где-то хранить данные. Иногда там не голый SQL, а всякие ORM или вообще говно-nosql.
Бывает и не бэкенд, какие-нибудь скрипты для ETL/OLAP/машинного обучения, либо десктопные/мобильные приложения с небольшой встроенной БД.
8 2052745
>>052738
Дальше Data Engineering.
9 2052786
>>052745
Да, дата инженер..Ну где это точка перехода не понятно пока. В повседневную работу с бд, трудно применить эти знания.

>>052743
Ну есть приложение, это больше про программирование, другая область.
10 2053008
>>052522
Ну там все какое-то извращение.
DISTINCT ON действительно берет первый попавшийся. Но если хочешь сортировку результатов, то придется ставить первым полем в сортировке то которое в дистинкт. А это нахуй делает его ненужным.
11 2053077
>>052786
Точка входа слишком хитрая, потому что все под ДЕ понимают разные вещи. По крайней мере, огромная разница между странами. У нас это дрочево кафок спарков и хуйвов, довольно бессмысленное и адхоковое, вынужден заметить. В Европках и Штатах это продолжение BI, поэтому начинается с Dimensional Modelling, шкуэль, вот это все.

Я бы наверн советовал начинать с обмазывания Кимбалом-Росс, и только потом хардскиллы про конкретные фреймворки. Но мапредьюс наверное стоит в деталях разобрать (вплоть до верхнеуровневых реализаций отдельных частей) параллельно с первым пунктом, потому что по нему тебя будут собеседовать в рашке. Поэтому тут неплохо посмотреть какой-нибудь курс про распределенные вычисления и кишки БД.

Платят кстати ДЕ заебца, и херочки каждый день в линке пишут.
12 2054592
Всем привет, подскажите, пожалуйста, Дейт пишет что в реляционных БД операции производятся над множествами строк, но когда он представляет SQL, то вводит понятие курсора. Это пример не возможности воплотить идею в действительности? То есть, операции в SQL всё-таки выполняются по каждой строчке отдельно?
13 2054650
>>054592
A join B это операция над множествами. С точки зрения пользователя и конечного результата.
При этом в кишочках реляционной базы эта операция происходит построчно, но в этом нет никакого противоречия.
14 2054675
>>054592
курсор это костыль для веб макак
15 2054844
>>054650
Понял, спасибо.
16022410875050.jpg425 Кб, 2048x1024
16 2058814
Кто не давно был-проводил собеседование? Что спрашивают на мидла?
17 2059569
>>058814
Ты бы хоть название желаемой должности написал.
18 2059714
>>059569
Middle data engineer
19 2060131
>>059569

Ну мы же sql тхереде? DBA, аналитик, или ещё какое-нибудь говно где основная занятость ковыряться в sql.
20 2061508
>>052408 (OP)

>- Алан Бьюли. Изучаем SQL. - про MySQL, тоже легко находится. Довольно старая, но базовые вещи не сильно меняются.


Третье издание - 2020 год, ничего не старая. С ультимативной HD-лягухой на обложке.
21 2061973
>>052408 (OP)
Продублирую сюда, не все же ньюфаг-тред отслеживают.
Надо сделать в цикле а=а+1. Так не работает. Как надо? Язык - plpgsql
VeviyDHgMds.jpg79 Кб, 716x508
22 2061983
Напомните почему mysql не работает на винде
23 2061986
>>061983
Потому что ты не добавил его в РАТН.
24 2062003
>>061973
Ты не задаешь значение суммы в начале, а 1 + null внезапно равно null. Очень плохо, очень стыдно, не надо тебе в айти.
25 2062011
>>062003

>1 + null внезапно равно null


Как интересно! Где ещё так кроме SQL?
26 2062012
>>061973
>>062003
Ну и чтобы тебя окончательно добить, замечу, что ты пытаешься продублировать функционал оконных функций, которые вроде и так должны быть в постгре.
27 2062027
>>062011
А где не так? Ты прибавляешь к единице "хуй знает что" и очевидно, что и конечный результат будет "хуй знает что". Потому что ты не можешь утверждать, что "хуй знает что" == 0.
28 2062035
>>062027

> Потому что ты не можешь утверждать, что "хуй знает что" == 0.


Можешь в жопаскрипте.
29 2062041
>>062035
Извините, я великий программист, а не макака, в моих языках все правильно и логично.
image.png90 Кб, 689x855
30 2062046
>>062027
У нас в go переменные при инициализации получают значение по-умолчанию, то есть определенное для своего типа нулевое значение. И вот так делать не надо. Спасибо, заработало.
31 2062057
>>062012
Я изучаю работу с переменными на первом примере, который пришел на ум.
32 2062063
>>062046
Обращайся, извини за грубость.
33 2062109
Почему перекинуть базу с постгри на мюскль оказалось нетривиальной задачей? Пробовал pgloader, но обосрался. В качестве приложения юзаю бобра.
34 2062110
как сделать,что внеся сумму,БД сама чрез время отняла икс сумму
35 2062115
>>062110
На уровне приложения.
36 2062118
>>062115
таймер на исполнение функции?
37 2062120
38 2062123
>>062120
но я не знаю,как на пхп сделать эту фичу на каждого пользователя
39 2062358
>>061986
А где он находится?
40 2062361
>>062358
А кто тебя знает, куда ты его установил, поищи папку MySQL в обеих program files.
41 2062373
Анонче, пытаюсь вкатиться в SQL, но ппц застопорился на джоинах и селектах внутри селектов. Плюс ко всему, я еще работаю с Clickhouse и поэтому классический sql-синтаксис из гайдов там не работает. Есть у кого на примере хорошие гайды с примерами запросов, которые можно препарировать?
Речь идет о запросах вида
select from ((select from t1) any left join (select * from t2)) using id
VeviyDHgMds.jpg46 Кб, 1282x274
42 2062374
43 2062376
>>062373
Так и знал, что обезьяна съест звездочки.

select Ж from ((select Ж from t1) any left join (select Ж from t2)) using id
44 2062379
>>062361
А все, нашел
VeviyDHgMds.jpg47 Кб, 718x296
45 2062380
>>062361
Все равно
46 2062384
>>062380
В папке, которую ты нашёл, лежит mysql.exe? Именно эту папку ты добавил в PATH?
47 2062385
>>062376
Это жжж неспроста.
select ⚹ from ((select ⚹ from t1) any left join (select ⚹ from t2)) using id
48 2062387
Как лучше всего хранить историю чата месенджера? Они вообще это в каких структурах данных делают? Не в эскюэльке же простой,

А ещё учитывая что нужен поиск по сообщениями.
image.png7 Кб, 396x108
49 2062390
>>062380
>>062384
Тащемта, mysql это клиент, сервер это mysqld
Алсо, в шинде сто лет уже есть хуитка для управления - notifier.
50 2062393
>>062384
Все, я просто в путь мускл.ехе добавил
51 2062394
>>062380
Пиздец потом таки дауничи рассказывают как в линупсе все заебись а венда маздай. сосноль то хоть открыл заново после того как path изменил?
52 2062395
>>062387
Почему нет? Заебись ложится на реляционность. Поиск есть искаропки или сторонние движки.
Тот же скупик в скулайте хранит, другие вполне возможно что тоже.
VeviyDHgMds.jpg60 Кб, 834x366
53 2062397
>>062384
Теперь такое
54 2062399
>>062394
Ну там таких проблем нет
55 2062400
>>062397
Вспоминай пароль, который ты указывал при установке.
56 2062401
Если я в монгодб хочу проверять массив на пустоту (массив при этом может быть как пустым, так и null-ом), во-первых, как это лучше всего делать? Сейчас у меня запрос "array.0": { $exists: true }. Во-вторых при таком подходе планировщик запросов игнорирует индекс на array. Можно указать его через хинт, но я не пойму, будет ли какой-то прирост производительности.
57 2062402
>>062400
Так он и не дает его ввести
58 2062404
>>062399
Каких нет? Что если исполняемый файл не в path система что ли из сральни его достанет?
Зато есть танкер своих вроде того что надо всю систему обновить целиком чтобы последнюю версию чего либо поставить и все равно все будет устаревшее потому что у дауничей все на все завязано через общие библиотеки - а винде таких проблем нет ставишь что хочешь и мозг себе не ебешь. Алсо у прыщедаунов даже . в path нет; и каждый пук надо через sudo делать - прыщебезопасность.
59 2062405
60 2062407
>>062404

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



Ну я как видишь не могу запустить даже базу данных после прописки в патч, в терминале это делается и запускается одной командой
61 2062408
>>062405
А, точно, спасибо зарабатало
62 2062423
>>062046
Продолжение.
Почему первый вариант работает, а второй выдает null? Значение переменной не передается за область видимости цикла?
63 2062463
>>062423
А если просто return summa?
64 2062480
>>062463
То же самое. Только сигнатуру надо переписать с такой
create or replace function sum_price() returns setof products.price%TYPE
на такую
create or replace function sum_price() returns products.price%TYPE
65 2062483
>>062373

>я еще работаю с Clickhouse


Как работу нашёл?
66 2062501
>>062483
Работа не связана с БД как таковыми. Я что-то типа техлида в саппорте одной айти-компании, и мои навыки позволяют мне вытягивать отдел из дерьма выполнять всякую черновую работу других отделов в обход обсосных спринтов, которые распланированы на месяц вперед. Наговнокодить какой-нибудь сервис, автоматизировать какую-то поебень - сейчас потихоньку перетягиваю на себя аналитику, потому что сейчас ждать выполнение таска от аналитика - буквально месяц, а сидеть ждать не можем себе позволить. Из БД там мускуль 5.7 в проде, все логи приложений идут в КХ, техническое логирование - сентри, мониторинг - кибаны, елк и еще куча всего, хз что там еще у админов, не разбирался. Так что с КХ просто "повезло", причем судя по слаковым каналам, где админы обсужают инфраструктуру, КХ - пиздец в плане оперирования. Аналитики, неосторожные джоины и прочее постоянно кладут продовый кластер по памяти. Недавно аналитики еще приходили реквестировать апгрейд до новой версии, в которой добавили оконные функции, но техдир их послал нахуй с таким запросом, лал. При этом я ни разу не видел подобных жалоб, пока логи просто лежали в S3 и доставались самописной консольной тулзой из-под ssh.
67 2062524
>>062501
У тебя тянка есть? Какая зп?
68 2062541
>>062524
Бабы нет. Я шизоид, и мне не очень интересны сексуальные контакты. ЗП 120, договорились, что поднимут до 150, когда сдам проект.
69 2062548
>>062541
А чому так мало?
70 2062555
>>062548
Формально - потому что я не разработчик, чтобы мне башляли 300к/наносек. А так, руководство устраивает хуй пойми какие махинации, и по документам я прохожу, как менеджер поддержки, и они не хотят моей зарплатой завышать рыночную вилку. Ну и такой вещи, как индексация, у нас нет. Пока босс не отвалит бабок - больше получать не будешь. А чтобы босс отвалил, надо пососать-полизать, либо закрыть какой-нибудь полезный для компании проект.
Безымянный.jpg162 Кб, 1024x327
71 2062867
Подскажите по скулю. Я не специалист, и вообще немного не мой профиль, но пришлось разбираться в чужом скрипте. Скрипт простой, проверка целостности базы.

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, чтобы отрабатывало успешно?
Безымянный.jpg162 Кб, 1024x327
71 2062867
Подскажите по скулю. Я не специалист, и вообще немного не мой профиль, но пришлось разбираться в чужом скрипте. Скрипт простой, проверка целостности базы.

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, чтобы отрабатывало успешно?
изображение.png175 Кб, 1920x1590
72 2062870
В шапку в => тред плз.
изображение.png400 Кб, 1903x3229
73 2062872
Бамп
изображение.png362 Кб, 1853x3021
74 2062873
изображение.png197 Кб, 1915x2113
75 2062874
76 2062917
>>062867

бамп
77 2062922
>>062870
Следующий перекат только в конце лета, тогда можно добавить.
78 2062928
>>062867
Охуеть, щас бы за бесплатно эти простыни читать. Выйди и зайди нормально.
79 2062940
>>062928
Уходи.
80 2062960
>>062867
нет, он запускает chkedb, и если вернул ошибку %%ты пидор%. Там селект не из таблицы, а из результата выполнения.
А где вопрос то?
81 2062968
>>062874
Чесно говоря говно какое-то, просто понапиханы все технологии, это не дата инженер, а осьминог ебанный какой-то. И самое главное, не одна из схем не обьясняет чем он собственно занимается
82 2063011
>>062968

>


Тащемта, эти роадмапы сейчас любые стали делать как говно.
Пихают все что есть лишь бы раздуть на несколько экранов.
image.png77 Кб, 647x612
83 2063132
>>062423
Здесь явно что-то с областью видимости цикла, но я не нахожу этого в документации.
Снимок.PNG180 Кб, 1651x922
84 2063208
Есть хоткей для закрытия нижнего фрейма, который вылезает если мускул жалуется?
85 2063617
>>062401
Бамп.
86 2063628
>>063617
Могу разве что экстраполировать свой бесконечный опыт с другими базами и сказать, что null значения не учитываются в индексе.
Удивлен, что null и пустой массив в этом случае не одно и то же.
87 2063633
>>063628
Ну на самом деле null в данном случае - отсутствие поля в документе. И отсутствие таких документов в индексе ведь тоже помогает быстрее узнать, что для данного id этот массив отсутствует?
88 2063726
>>063633

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


Нет, чел, для того, чтобы узнать, каких документов нет в индексе, тебе сначала нужно считать все документы, которые есть в индексе. И проверить для каждого документа, входит он в этот список или не входит. Гораздо проще считать все значения и проверить их на null.
89 2063742
>>063726

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


Зачем? Наверняка там внизу какая-то структура данных типа хешмапы или сета, в которой значение всегда получается за константное время.
image.png948 Кб, 800x578
Как идентифицировать себя? 90 2063764
Все чаще замечаю, что мало кто знает про ETL/DWH разработку. То есть область востребованная, но большинство других программистов не рассматривает ETL как разработчиков. Ну то есть, сейчас под разработчиком почему-то понимают по умолчанию фронт на js или java-ынтерпрайз.

Вот лично я работаю последние 5 лет в банках в разных отделах. Был в отделе отчетности, в рисках, в кредитном процессинге. И последний год работаю чисто в ETL. Но в чем я истинно силен? Наверно в SQL конечно, могу запрос любой сложности написать и оптимизировать. Пишу немного в Java код для общения с message broker: kafka, ibm mq, немного в python код для aiflow бихдата прости господи, немного в groovy для etl-средства. Еще на диалектах PL/SQL, на T-SQL, на pgSQL. Про зоопарк баз вообще молчу, так как почти не осталось СУБД с которыми я не работал.

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

Реквестирую ETL-братишек рассказать свои истории как боролись с такими ощущениями или у меня развивается СПГС.

Надеюсь в тот тред написал
91 2063833
>>063764
Да, в тот.
Можешь называть себя Data Engineer, очень солидная профессия.
Сколько зарабатываешь?
92 2063868
>>063764
Сейм друг. У меня такое же ощущение. Успел поработать с ораклом, террадатой, гринпламом, ETL на airflow писал, hadoop, pyspark сам понимаешь, сейчас ещё и BI отчётность пилю, только всё это я делал не в банках и, с оптимизацией запросов я хромаю, но я думаю, как-нить наверстаю. Как-то не чувствую себя разработчиком, при таком большом количестве js кодеров на дваче.
Зп 150к
93 2063879
>>062401
Попробуй на этот кондишн "array.0": { $exists: true } создать индекс partialFilterExpression.
94 2063933
>>063833
Да вот Data Engineers это другой департамент, которые ковыряют чисто Data Lake. Зарабатываю 180к на руки + годовая премия в 1 оклад. Не знаю много это или мало по местным меркам, официально я мидол.

>>063868
Ага, ты тоже уловил суть. Хоть может это и хорошо что откровенное быдло не лезет в нашу область. Хотя быдло-кабанчики-аналитики лезут
95 2064103
>>063764
>>063933
Прикольно, так много слов знакомых, твоя организация случаем не на букву Р называется?
96 2064162
>>063933

>Хоть может это и хорошо что откровенное быдло не лезет в нашу область


Мне почему-то кажется, что там порог входа чуть повыше. Ну т.е. довольно сложно заинтересовать быдло заниматься именно этим.
97 2064194
>>064103
На букву С, зелёное такое из 4 букв.
98 2064268
>>064194
А, лол, я понял. Тоже туда собесился, но не пошел, потому предложили нихуя не выше рыночка, вопреки расхожему мнению, и потому что там был ебучий SAS DI, которым мне заниматься не очень хотелось.
99 2064279
>>063764

>Еще на диалектах PL/SQL


Хорошо, что ты пришел!
Подскажи, пожалуйста, в чем тут проблема? >>063132
100 2064283
>>064268

> предложили нихуя не выше рыночка, вопреки расхожему мнению


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

мимо джава-макака
101 2064365
>>064283
Честно говоря никто не хочет. Недавно собесили на удаленку товарищей из Омска и Екб. Однако, процентов на 30% ЗП ниже чем у мидла в ДС.

Но заметил такое, что сеньер в регионах это, как правило, мидл в ДС по скидками. Лид в регионах - сеньер в ДС. Недавно собесил сеньера SQLщика с 9 месяцами опыта, но назвал себя ведущим программистом. Охуеть.

мимо другой банк
102 2064398
image.png796 Кб, 640x640
103 2064434
104 2064741
Как вы все начинали?
105 2064758
>>064741
В шкалке один человек объяснил мне основы, дальше научился гуглить.
106 2064885
А на работу с какими знаниями шли?
107 2064899
>>064885
Базовыми. Даже оконных функций не знал.
108 2064900
>>064741
Я начинал с того, что научился ставить винду на свой комп. Потом устроился в комп. клуб админом. Ну а потом приходишь в любую днище-фирму и говоришь - я админил сетку и 30-40 компов с круглосуточным аптаймом и постоянно меняющимися юзерами без навыков. Обычно этого достаточно чтобы взяли на испытательный срок. Там месяц-два учат своему софту, если выучил и справляешься с поддержкой - остаешься. Так я стал сисадмином. Дальше, если не обленишься, учишь язык. Я вот учу, дается легко, так как всё знакомое. Опыт в ИТ есть, язык знаешь - идешь джуном. Получаешь опыт в разработке, а дальше либо по разработке двигаешься, либо в девопс. Если в девопс, то можно получить опыт, обмазаться безопасностью и в спецопс.
109 2064931
>>064885
Даже не знал, что такое язык SQL. Решил пару задачек на логику и взяли. Ну а потом уже начался язык SQL и база данных Oracle.
110 2065323
А какие первые задачи были на работе? Сложные запросы писали? >>064931
111 2065334
>>065323
Ну сначала не сложные, потом посложнее... А ты зачем вообще спрашиваешь?
112 2065343
>>065334
Пойду на стажировку на аналитика, боюсь обосраться
113 2065346
>>065343
Не бойся, в этой сфере очень большой процент ничтожеств, так что либо гармонично туда впишешься, либо будешь выгодно выделяться.
photo2021-04-0723-19-16.jpg51 Кб, 622x849
114 2065478
>>065323
Меня сразу заставили нырять в ёба процедуры с головой лул я сразу сломал кое-что и заниматься реверс инженеригом чужих говен честно говоря и по происшествию года кое-что не понимаю, представь как я знатно охуевал в первые месяцы

мимокрок
115 2065479
Как в постгресе сделать EXPLAIN для функции?
Везде форсят autoexplain, но или я что-то не понял, или он пишет куда-то в логи, куда я не хочу лезть и вообще мне нах не надо это на каждый запрос. Хочу просто один раз посмотреть и все.
116 2065483
>>065478
А когда сломал, что сказали?
117 2065490
>>065483
Немного побугуртили, потом дали задачу попроще но один хуй слишком сложную чтоб я её мог сделать. Потом отправили дебыватся до подрядчика чтоб они меня научили это была пиздец подстава и позорище, я полез в скайпе доебыватся до их синьёра, он от такого знатно охуел, и позвал ПМ-а, вобщем до сих пор стыдно. Мне кажется первые месяца три меня всерьез подумывали выпиздить, но потом выяснимлось, что я могу в MDX немного, и жтот навык оказался полезным, а потом я уже и SQL подтянул.
118 2065526
>>065490 А как рабочий день проходит у аналитика? Чем они занимаются? Только данные ищут?
119 2066049
>>065526
Аналитики разные бывают, в разных департаментах. Но если брать именно анализ данных то:
1) Ищут данные для разных подразделений
2) Правят маппинги, чтобы потом разраб доработал ETL
3) Поясняют за данные - почему таблица Х прогрузилась именно так, а не иначе
4) Ебашут ad hoc
5) Пишут ТЗ разрабам чтобы те разработали новую загрузку
120 2066157
>>066049
Звучит сложно
121 2066181
>>066157
на самом деле в этом списке технически сложных вещей нет, скорее муторно, и надо быть внимательным, и хорошо разбираться в предметной области.

другой анон
122 2066227
>>063764
Да, у меня такое-же было, правда через год-два работы ЕТЛ-щиком. Делал все и по немногу.
В итоге я погрузился сильнее в техническую часть, освоил С, начал изучать внутрянку баз, как они в ОС работают, алгоритмы поиска, обращения к данным как реализованы и тд и тп. Понимания, кто я в современной градации мне это так и не прибавило, но задачи больше нравятся).С данными уже давно не работал, в основном в ОС что-то допиливаю или настраиваю.Сейчас это похоже на какую-то смесь админа, системного разработчика и архитектора.

И да, плюс о котором выше писали - так как область не хайповая - залетных хипстеров и гуманитариев почти нет. Работаешь так сказать в кругу единомышленников)
123 2066705
>>066049
6) бесконечные переписки с БА (если сам аналитик СА), или с бизнесом (если сам аналитик БА). Очень много деловой переписки, отвечаю, аналитики половину рабочего времени просто со всякими бизнесами общаются.
124 2066854
>>065490
Как так получилось, что ты мог в MDX? Откуда ты его знал?
125 2066883
>>066854
Я когда готовился к приему на эту работу, у меня было 2-3 месяца, за это время я организовал вкат в SQL и учил MDX. MDX довольно простой оказался, точно уж проще SQL, по итогу мне даже всё не пригодилось, что я курил по MDX. Конечно в mdx есть скоупы, которые довольно странно иногда работают, но с этим я подьяснился уже на проекте.
126 2066897
Подкиньте материалов по проектированию реляционных баз даннных. В частности нужна схема для чат приложения
EBYlGE1XkAAwVhN.jpg large.jpg200 Кб, 1242x1636
127 2066945
Аноны что покурить по моделям данных? Часто в вакансиях мелькает - умение пояснить за аймона\кимбелла. При том судя по орели, аймона уже давно все в рот ебали. А от сранного датаволта, вобще срака рвётся.
128 2067044
>>066945
Да тупо пару статей читани с хабра. У меня тоже это в требованиях было чуть ли не обязательным требованием. В итоге спросили про снежинку/звёздочку. Про факты/дименшены. По факту ведь мало кто руководствуется именно манярекомендациям этих товарищей. В голове держат, но четко не следуют.
129 2067482
>>067044
Ну хуй знает кимбал как по мне довольно жизненные байки травит.
Отечественным двх-рабработчикам энтерпрайзовым гречневым конечно похую, но тем не менее
130 2067753
Почему так нахуй? Апдейт фейлит енамы.
131 2067756
>>067753
А, понял. Во втором THEN должно быть значение, а не выражение.
Снимок экрана 2021-06-14 133238.jpg207 Кб, 1102x994
132 2067765
Интересно, почему так получается. Ладно бы он булевое WHEN не мог правильно прочитать, но ведь фейлится даже синтаксически правильное присваивание.
133 2067773
>>067765
CASE sex
134 2067793
>>067773
Действительно, так работает.
Я даже понял, почему он до этого присваивал нулл или пустые строки: выражение "SET sex =" начинает выполняться в любом случае, и если нет подходящих CASE, то оно таким и останется, порождая нуллы и пустоту.
135 2067803
>>063132
апну вопрос
136 2067821
>>061508

>Алан Бьюли. Изучаем SQL


Дочитал, какая-то невесёлая книга. Неприятная.
137 2067937
>>067821

>невесёлая


>Неприятная


Прямо как ты ИРЛ.
138 2067950
>>067937
Мать жива?
Мастхев книги 139 2067991
Сап, аноны!

По личному опыту кто-нибудь посоветует книгу?

Подойдет всё, что связано с теорией БД, sql и тд.

P.S. видел книги в шапке, но может ещё какие накидаете
140 2068126
>>067950
Да, всё хорошо, спасибо, что спросил.
141 2068170
>>067991
Мне прочитанная в 2012 книга Ицика Бен-Гана T-Sql Querying зашла так, что с тех пор по rdbms ничего не читал (читал про nosql и всякое распределенное), но я дотнетомакакен.
Параллельно решал sql-ex, видимо по-этому закрепилось достаточно и для собесов, и для работы.
142 2068675
>>068126
Проверь ещё раз.
143 2068972
Анон, есть таблица, где мне надо выбрать все данные после конкретной записи, никаких зацепок в виде уникальных дат нет или айди строк. Есть какой-нибудь простой способ?
Пытаюсь гуглить, а там какие-то очень сложные для меня запросы
144 2069006
>>068972
Нет. Таблица в базе данных это куча, если у тебя нет айди и даты изменения, то тебе сначала нужно их добавить, иначе ничего не выйдет.
Конечно, вопрос еще зависит от того, какая у тебя база. В Oracle, например, есть rowid у каждой строчки, в общем случае они упорядочены, но это все равно не гарантируется и завязываться на это не принято.
145 2069241
Приветствую анон
Оракл. Есть таблица для временных данных.
При нормальной работе больше чем на пару секунд данные там не задержатся, но в случае ошибки останется мусор, который надо автоматически вычищать.
Как можно это сделать на уровне дб? Там простейший delete from TABLE.
Хочу чтобы это запускалось разок посреди ночи.
146 2069264
>>069241
Как в случае ошибки может остаться мусор? У тебя же должен при этом происходить автоматический откат транзакции. Вообще, в оракле есть планировщик: https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/scheduling-jobs-with-oracle-scheduler.html или можно через какой-нибудь крон или дженкинс.
147 2069286
>>069241
гугли dbms_scheduler
тебе надо создать процедурку с нужным скриптом и зашедуллить
148 2069370
>>069241
А эти данные используются больше чем в одной сессии? У оракла есть прекрасные global temporary tables под такую хуйню.
Еще у оракла есть exception, можешь там прописать очистку таблицы, если что-то пошло не так.
Если эти изящные варианты решения проблемы тебя не устраивают, то да, ебашь джоб на уровне бд, но это уебанство, потому что так у тебя два разных процесса будут менять одну таблицу и ошибок ты можешь только больше наплодить.
149 2069469
>>069370
>>069286
>>069264
Я не упомянул кое-что и ввел в заблуждение.
Ошибка может возникнуть лишь на уровне сетевых запросов. Есть действие, которое выполняется в несколько последовательных запросов, и, если какой-нибудь пост не долетит до сервака, строка в бд так и останется висеть.

Спасибо за инфу, погуглю про это.
150 2069809
>>069469
тогда ты вообще не туда дуешь
смотри в сторону транзакции
если ошибка произошла - транзакцию откатываешь
uwagrTSv8OI.jpg188 Кб, 1440x1800
151 2069955
>>052408 (OP)
Аноны, попался такой запрос:

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 про это нет
152 2069971
>>069955
Эквивалентно count(*).
Обычно так пишут хуесосы, которые ничего не понимают в бд и верят, что count(1) работает быстрее. Распространенное суеверие, можешь ссать на лицо автору запроса.
Чтобы понять, как это работает, можешь представить, что сначала ты делаешь select 1 from table (т.е. возвращаешь столбец из единичек по количеству строк в таблице), а потом делаешь count по полученному результату.
153 2069976
>>069971
Спасибо, точно, одна и та же хуита что и *
154 2069980
>>069976
Ну я пиздеть не буду.
155 2070010
>>069980
Протасевич так же думал...
156 2070349
>>069809
У него несколько запросов, а значит и транзакций несколько. Откатить не получится.
157 2070378
>>069955
>>070349
в чем проблема несколько запросов в одной транзакции бахнуть?
и распределенные транзакции тоже для кого-то придумали
158 2070433
Добрый день! Есть 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;
159 2070448
>>070433
если дата точнее дня не пишется, то можешь дополнительно отсортировать по id (они же инкрементируются)
160 2070461
>>070448
Можешь поконкретнее, где нужно отсортировать?
161 2070465
>>070433

>right JOIN


Скажи, ты ебанутый?
162 2070466
>>070433
select from heads join (select from emp order by dateup desc) emps on heads.id = emps.head group by heads.id;
163 2070472
>>070466
Тонну нефти тебе анон!! Спасибо!
164 2070477
>>070472
>>070466
Вы не охуели? SQL немножко не так работает. Фильтра на сотрудника нет. Конкретно на этом запросе вообще будет ошибка группировки, потому что group by по начальнику, а селектится по всей видимости звездочка, которую сожрала макаба.
165 2070481
>>070477
Всё там работает, джойним начальников и сортированных холопов и группируем по начальнику.
166 2070482
>>070465
Почему?
167 2070711
>>062423
Что это за редактор такой?
168 2070717
>>070711
Какая-то очередная атомо-параша судя по виду
169 2070722
>>070717
А что посоветуешь?
Использовал только DBeaver, когда делал курсовую по БД.
170 2071443
>>052738
Модельки в django или во flask, например. Если ты про python
171 2071764
>>070711
pgadmin
172 2073908
Сап знатокам. На работе хочу углубится в БД на уровне разработчика - mongodb и ms sql. С монгой будет отдельный разговор, меня больше интерисует sql. Писать Joins, view, sp уже умею, но чувствую, что есть пробелы в знаниях и этого не достаточно. Планирую такую программу роста:
1. Профайлер. Как работать, как оптимизировать запросы;
2. Индексы - Seek, scan, full text index;
3. Масштабирование;
4. EF to ms sql (ORM .net) - AsNoTracking, Querable.
Что еще посоветуете?
173 2073930
>>073908
распределенные транзакции
174 2073987
>>073908
Секционирование
175 2074361
>>073930
>>073987
Спасибо
176 2075831
Подскажите плиз. Я уже не понимаю.
Есть у меня одна таблица, хочу ограничение повесить на поле, уникальным сделать.

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
177 2075869
>>075831

> Вот что лок вешает


> SELECT u.* FROM users u WHERE u.id = 128592314 ORDER BY CASE WHEN u.type = 'active' THEN 1 ELSE 2 END, u.id DESC


Как оно может лок вешать? Оно же должно отработать и угомониться.
178 2075872
>>075869
А я ебу? Вот поэтому я и спрашиваю, как оно вообще вешает лок, да еще и на левую таблицу.
179 2075877
>>075872
Причем на 13 версии постгри это не мешает, а в 9.6 почему-то странные локи висят
180 2075888
>>075869
Я же не от делать нечего такое спрашиваю

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
181 2076003
>>075831
>>075888
Привет, обещал тебе из МВП ответить.
Нихуя не понятно.
Скорее всего, это какая-то ваша ёбка с привилегиями, так что еби своих админов, читай хранимки и триггеры. Ты точно имеешь право делать DDL операции в этой базе?
1624345527752.jpeg99 Кб, 1498x792
182 2076742
Сап. Я студент, делаем курсач по базам данных на sql. Пик - физическая схема (Тупо сделано? Наверное да, но препод принял). Что он НЕ принял, так это сложный запрос, который надо было сделать для сдачи курсача. Звучало так: запрос одного оружия со всеми его характеристиками И с учетом влияния модификаций на характеристики.
Тут я сломался, посколько как прикрутить сюда влияние модификаций - ноль идей.
Даже у тех кто на отлично уже сдал спрашивал, тоже молчат. Прошу помощи как это сделать, плюс какие нибудь общие советы.
183 2076753
>>076742
В чем сложность? Просто джоинишь по цепочке весь шмудряк
1624346319544.jpeg170 Кб, 1514x688
184 2076768
>>076753
В том что в моем (неправильном) решении этого вопроса влияние от прицела происходит вообще на все характеристики, а должно только на точность. Пытаюсь переварить все это, а голова кипятится - SQL для меня тема новая.
185 2076770
>>076742
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 что где-то я с синтаксисом объебался, но логика вроде верная.
186 2076822
>>076770
Эх, оно все равно тупо суммирует ко всему.
Mod_Stat это если что название другой таблицы, а название колонки - Stat_Effect
187 2076832
>>076822
Название таблицы у тебя mod_stats, mod_stat - это элиас который я назначил для суммы значений stats_effect для конкретного стата конкретного оружия, можешь любой въебать.
188 2076836
>>076768
В джойне 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 и считать сумму модификаций, если несколько разных модицикаций могут влиять на одну характеристику.
189 2076847
>>076836
Спасибо, попытаюсь разобраться
190 2077368
Как вставить значения в таблицу без 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 - строки и сделать его ключом? Но чет звучит как костыль.
191 2077373
>>076742

>И с учетом влияния модификаций на характеристики.


Что это значит?
192 2077376
>>077368
Можно делать ключом несколько колонок вместе, делаешь primary a,b,c и всё.
193 2077423
>>077368
Простите, а там что, нельзя создать таблицу без primary key?
А обычный автоинкрементящийся праймари кей?
В чем вопрос?
194 2077450
>>077368

>в таблицу без primary key


Это как?
195 2077565
>>077423
Можно. Я хуево вопрос написал наверное. Мне нужно вставить в table(a, b, c) новые такие значения (a, b, c), чтобы при этом строки, которые уже есть в таблице, не вставлялись т.е. чтобы в table не образовывались дубликаты.
С автоинкрементом он будет писать подряд все (id, a, b, c), а мне нужно, чтобы (a, b, c) были уникальными.
196 2077567
>>077565
ALTER TABLE `table` ADD UNIQUE `unique_index`(`a`, `b`, `c`);
Потом через INSERT IGNORE вставляешь.
197 2077572
>>077376
>>077567
Создание ключа помогло, спасибо.
198 2077867
Есть задание пикрелейтед и есть схема, которую я набросал. В базах полный ноль. Где я обосрался? Я смогу на основе этого что-то запилить вообще? Это нормально, что у меня primary_key это и foreign_key всегда одновременно?
Gg Аноним 199 2077870
Gg
200 2078126
>>077867

> Это нормально, что у меня primary_key это и foreign_key всегда одновременно?


Конечно, что в одной таблице праймари кей, то в другой форейн кей.
А схему твою мне впадлу смотреть.
201 2079949
Как в постре ускорить запрос типа SELECT * FROM DOGS WHERE DATA ->> PAWS = 4?
То есть есть таблица, в которой хранятся jsonы, и значения одной из колонок в жсоне одинаковы в 98% случаев. И мы фильтруем именно по этому значению.

Если добавить индекс то он игнорируется, потому что индексы юзаются только для не слишком часто встречаемых значений.
Добавлять поля в таблицу не вариант, структура должна остаться такой же.
202 2079954
>>079949
Если постгрес новый то создайте партиционирование по этому полю. Таблицу придется пересоздать.
203 2079973
>>079949
Знаете что. В моей картине мира json это формат для обмена данными, а не для хранения данных. В реляционной базе данных все должно храниться строчками, а не джейсонами. Архитектура ваша — говно.
>>079954
Двачну анона с партициями.
Еще почитайте про битмап индексы, если они есть в вашей бд и если подходят под эту ситуацию, там нюансы
204 2080048
>>079973
В сервис из сторонней интеграции прилетают json-данные довольно произвольного и часто меняющегося формата, с парой постоянно встречающихся полей и остальными рандомными. Причем эти данные не требуется анализировать, а просто хранить и отдавать по запросу всей котлетой. Твои предложения к такой архитектуре?
205 2080054
>>079973
>>079954
Партиции похожи на то что нужно, спасибо
206 2080188
Помогите плс, пытаюсь восстановить базу из бекапа. А ОН Б*ЯТЬ с расширением File.backup1c - и это даунское расширение не открывается через pgAdmin 3. Как жить?
207 2080304
>>080188
Кажется это бекап сформированный через pg_dump. Ресторится база через pg_restore. НО КАК БЛ, читал на стеке ниодин вариант не подошел, хххелп плс!
208 2080634
>>079954
В пострге нельзя распартишенить таблицу?
в оракле вроде можно
209 2080732
>>080634
В оракле тоже нельзя.
211 2080769
212 2080925
>>080304
Спасибо, выебки, и без вас справился.
213 2081029
>>080925
Ну раз справился, то и нам подскажи.
Мы то не умеем, раз не подсказали.
214 2081381
>>052408 (OP)
Анон, как оптимизировать sql-запросы? Если это сильно привязано к СУБД, то пусть вопрос будет для PostgreSQL.

Например, вот анон пишет:
>>063764

>в SQL ... могу запрос любой сложности написать и оптимизировать.



Какие хорошие ресурсы есть по этой теме?

Я так понимаю, это связано с реляционной алгеброй, это большая тема, нужно прочитать какие-то талмуды или там всё проще?
215 2081383
>>081381
Посмотри, что такое explain и кури в эту сторону.
Т.е. улучшение эффективности получения конкретного результата подбором правильного плана запроса, навешивания индексов для ускорения и т.д.
216 2081385
>>081383
Я не понимаю, почему постоянно говорят про индексы. В чём проблема? Берёшь проект, сканируешь его запросы, получаешь список таблиц и для каждой таблицы список столбцов, по которым производится поиск, на все эти столбцы навешиваешь индексы.
На это можно ответить, что слишком много индексов замедляют запись. Ну и чё делать теперь? Запрос-то исполнять надо. Что делать в ситуации, когда тебе нужно добавить индекс к столбцу, но почему-то нельзя?
217 2081386
>>081385
Там всё несколько сложне чем просто ололо навешаем индексы везде, где ведутся запросы.
Для мелкобаз это не особо актуально и зачастую достаточно такого подхода, да.
218 2081387
>>081386
Наверное приходится выбирать между двумя запросами, решать, какой из запросов важнее, в каком запросе скорость критичнее, и замедлять один запрос чтобы ускорить второй.
219 2081388
Bump
220 2081391
>>081387
А ещё есть кэши.

Получается такая история: если бы у нас была идеальная база данных, то мы бы просто выполняли запросы безо всяких индексов и всего такого.

Если бы у нас была идеальная база данных с индексами, то мы просто добавляли бы индексы на все столбцы, по которым ведётся поиск, и всё бы работало без проблем.

Но так как мы имеем дело с не-идеальными базами данных, то приходится думать о трейд-офф-ах, использовать всякие костыли и подпорки в видей кэшей, вью, триггеров и прочего. Чем ещё можно дополнить этот список?
221 2081393
Раз уж речь пошла об оптимизации, пилю свою прохладную. Индексы использую как крайнюю меру, обычно кручу сам запрос, последние два раза когда удалось значительно ускорить, были такие кейсы:
1) Большая выборка с джоином, в итоге поменял запрос чтобы большая таблица была в WITH с фильтром, а не фильтровалось во время джоина.
2) Джоин большой таблицы из подзопроса , чтоб не вешать индексы по полям для джоина, добавил параметризированый фильтр внутрь подзапроса, там индекс по дате был, а по полям по которым идёт джоин нет, чтоб получилось что-то вроде:

select
from zalupa join
(select
from govno
where date beetwen {param1} and {param2})
where date beetwen {param1} and {param2}

Вот такая хуйня малята.
изображение.png414 Кб, 655x527
222 2081394
>>081391
партиции
223 2081397
>>081394
Это типа создавать поколения данных, и потомков первых данных считать патрициями, а остальных - плебеями? Как это поможет оптимизировать запросы? Ну и из истории мы знаем, что сословия перемешались, а потом патрицианские роды и вовсе вымерли.
224 2081456
>>081029
Гугли распаковку бекапа от pg_restore. Там через цмд открываешь папку с это утилитой, и потом пишешь чтото типа: /pg_restore -U имя юзера в пг админе -d новая база, в которую хочешь поместить бекап(имя этой базы в пг админе) и имя самого бекапа (у меня сработало только тогда, когда переместил бекап в папку с утилитой, через -f путь файла не работало)

https://postgrespro.ru/docs/postgrespro/10/app-pgrestore

Вот это сильно помогло
225 2081505
>>081381
Хз, могу ответить про Оракл, может поможет.

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

Но самое важное - это планы запроса, да. Не знаю, как в Пострге, но оракл страдает такой проблемой, что план, который тебе объяснили, и реальный план исполнения - вообще разные вещи.
В оракле есть штуки уровня dba_hist_* табличек, в которых логируются состояния сессий/процессов, и просто охуенный тулз sql_monitor, позволяющий риалтайм смотреть, что процесс реально делает. Наверное, в Пострге тоже подобные штуки есть.

Я работаю с большими и тупыми базами данных, где часто проблема не в оптимизации как таковой, а в тупых настройках бд, оптимизатора или кретинских регламентах работы на источниках, которые вечно мне всё локают.

СУБД вроде и так сами по себе достаточно умные, нужно только мониторить, чтобы они совсем херь не делали.
226 2081525
>>081393
1) если у тебя не идёт замножения при джойне, то никакой разницы по факту. Предикатный фильтр можно и внутри условия джойна сделать, чтобы сразу доступ к таблице только по фильтру был.
Вот если оно у тебя в CTEхе материализацию сделало, тогда да, могло помочь.

сам вешаю индексы только на PK
227 2081753
>>081505

> В оракле есть штуки уровня dba_hist_* табличек, в которых логируются состояния сессий/процессов, и просто охуенный тулз sql_monitor, позволяющий риалтайм смотреть, что процесс реально делает. Наверное, в Пострге тоже подобные штуки есть.


А как тебе это поможет при оптимизации конкретного запроса? Что могло бы помочь - это если бы какая-то штука разбила твой запрос на шаги или подзапросы и для каждого шага показала бы, сколько он исполнялся в целом и в процентах. Так это работает?
228 2081758
>>081525

>сам вешаю индексы только на PK


ты трололо или туттуру?
мы же только что только выяснили, что надо навешивать индексы.
прикинь если бы ты попросил у человека номер телефона, а он бы тебе сказал: "я никогда не спрашиваю номер, я просто перебираю все номера, и рано или поздно всё равно дозвонишься туда, куда надо".

https://use-the-index-luke.com/
229 2081787
>>081393

>а не фильтровалось во время джоина.


Разумно, зачем фильтровать много данных когда можно фильтровать мало данных.

> индекс по дате был, а по полям по которым идёт джоин нет, чтоб получилось что-то вроде:


Те ты заменил join подзапросом?
230 2081797
>>081525

>внутри условия джойна сделать, чтобы сразу доступ к таблице только по фильтру был.


Я так понял было следующее:
n строк m строк = nm строк + фильтр = q строк + фильтр = k строк
Vs
(n строк + фильтр) = p строк
m строк = k строк
n < q
231 2081838
>>081753
Монитор как раз по шагам пишет, сколько делал, сколько темпа, сколько I/O. И порядок этих шагов.
Запускаешь запрос — смотришь, где проблема при исполнении — думаешь, можно ли пофиксить в коде. В оркале это часто хинты на порядки джойнов или хинт на запрет какой-то тупой хуйни уровня: оракл считает, что после джойна будет 1 строка, а выходит 10лямов, и он хуярит NESTED LOOP, конечно, это будет вечность считаться.
232 2081841
>>081758
Ну бля, у меня большие составные PK обычно.
Если данные важные, то хули не PK.
233 2081847
>>081797
че т теперь я не понимаю. Ты если явно условие фильтра в джойне укажет, то СУБД сперва соберёт (n строк + фильтр), и только потом будет n'm делать, где n' - n после фильтра.
Если СУБД так не делает, то ей нужно объяснить, что она не права, лол.
234 2081850
>>081758
Но вообще почитаю, спасибо.
235 2081868
>>081847
Хм, может быть ты и прав.
На самом деле я точно не отвечу, надо проверять.
236 2081878
>>081525
Я тоже думал разницы нет, и оно само на этапе джоина отфильтрует сначала, потом сделает джоин. Оказалось нет, если явно в CTE фильтровать перед тем как джоинить работает быстрее.
В первом случае явный WHERE в CTE, во втором and {Условие} в джлине.

>>081787
Нет, там джоин идёт к подзапросу, я добавил фильтр к подзапросу, по полю дата. Вон я же пример написал.
237 2082459
Поясните за схемы и триггеры. Вообще не понимаю смысла их использований. Ладно там тригеры - выполнить действие при условии (хотя кто таким будет пользоваться на уровне СУБД, я хз), но схемы - инструмент управление правами?
И подскажите, как в SQL Server смотреть план выполнения? В MySql есть Explain, в MsSql я что-то такого не нахожу
238 2082654
Сколько занимает json в MS SQL места? Ибо все никак не найду
P.s дана была задача хранить перфокарту(с выбранными отверстиями) и решил использовать json
или есть варианты по-лучше?
239 2082664
>>082654
бинарный формат есть же, он тчно меньше
240 2082706
>>082664
а записывать то как в него?
241 2082749
>>082706
покастить жи
242 2082751
>>082749
ну либо можешь сразу в бинари туда писать, если есть чем поконверить раньше
243 2082780
>>082751
а какие еще варианты есть хранения (с минимумом занимаемой памяти)?
(на перфокарте 40 областей с различной длинной)
244 2083360
>>082654

>перфокарту


>2к21


ебаный колотить, это флешбек из прошлого милениума? С возвращанием...
245 2083643
>>082780
Бинари меньше всего будет занимать, тем более у тебя на дискете уже хранится в двоичном виде по сути. Можно ещё вьебать говна и записать каждую дискету как 40 различных строчек, с ключом - имя перфокарты. Можно вобще ссылку на файл хранить, а перфкарты хранить на диске. Непонятно из-за чего сырбор, эти данные с перфокарт нихуя не весят, по отдельнеости неконститенты, если ты читаешь перфокарту ты хочешь читать её всю, разделители эту условность нужная самой перфокарте для работы. Можно ебануть в longstr с разделителям.

Обычно вопрос не ставят КАК СДЕЛАТЬ, обычно начинают от ЧТО НУЖНО ПОЛУЧИТЬ. Вобщем с ёбой ехидного колобка спрашивай у деда препода А КАКАЯ БИЗНЕС ЗАДАЧА? КАКОЕ БИЗНЕС ВЕЛЬЮ ВЫ ХОТИТЕ ПОЛУЧИТЬ ОТ РЕАЛИЗАЦИИ ЭТОЙ ЗАДАЧИ? Более чем уверен у тебя там затхлый совковый пердун, который говорит СИКВЕЛ.
246 2083685
Програмач, объясни, как вообще база данных должна с sql работать?
Вот я написал свою базу данных для работы, но она вся висит в оперативке сервера и её копия в тхтшке. Если идёт запрос данных - то он обрабатывается с оперативке. Если изменения данных - то они меняются в оперативке, а потом вся база целиком сбрасывается в тхтшку. И оперативно и надёжно, как мне кажется.
Но весь мир говорит, что базы данных должны хранится в sql. Окей, я его освоил по минимуму, могу создать базу, запрос.
Но в целом архитектура мне не ясна. Получается что вся база должна хранится в sql и если идёт запрос данных, то сервер должен формировать соответствующий запрос sql, получать данные из базы и переправлять пользователю? А если запрос сложный? Допустим мне надо целую страницу хтмл сформировать с данными, мне надо раз 20 обратиться к базе?
247 2083691
>>083685
Таблетки прими.
248 2083692
>>083685
Есть общее правило: никогда не пиши свою СУБД, далее если кажется, что есть необходимость.

> Вот я написал свою базу данных для работы, но она вся висит в оперативке сервера и её копия в тхтшке. Если идёт запрос данных - то он обрабатывается с оперативке. Если изменения данных - то они меняются в оперативке, а потом вся база целиком сбрасывается в тхтшку. И оперативно и надёжно, как мне кажется.


Просто пиздец.
1. При росте размеров БД на каждое небольшое изменение целиком перезаписывается файл. И медленно, и всеоре убьёт диск из-за постоянной перезаписи.
2. Если во время записи файла ввключится питание, модет записаться половина файла, вторую не восстановить никак.
3. Большая БД не влезет в ОЗУ.

> Но весь мир говорит, что базы данных должны хранится в sql. Окей, я его освоил по минимуму, могу создать базу, запрос.


Она не хранится в SQL. SQL - это просто язык запросов, внутри БД может быть реализована как угодно.

> Но в целом архитектура мне не ясна. Получается что вся база должна хранится в sql и если идёт запрос данных, то сервер должен формировать соответствующий запрос sql, получать данные из базы и переправлять пользователю?


Не обязательно сервер, есть sqlite. Но в целом приложение выступает прослойкой между БД и пользователем.

> А если запрос сложный? Допустим мне надо целую страницу хтмл сформировать с данными, мне надо раз 20 обратиться к базе?


Обращайся 20 раз. Можешь кешировать чтение. Это лучше, чем возможность ситуации, когда однажды самописная БД сдохнет.
249 2083700
>>083692

>1. При росте размеров БД на каждое небольшое изменение целиком перезаписывается файл. И медленно, и всеоре убьёт диск из-за постоянной перезаписи.


Ну, допустим, у меня нет перспектив что база данных станет мега гигантской. 10-20 мегабайт, это прям капец с каким запасом. Тем более в перспективе можно подумать как оптимизировать место. Ну и разве тот же sqllite не записывает всё равно каждый раз все данные в файл?

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


Это легко фиксится. База пишется не в один а два файла, которые меняются местами. Сначала в один, при следующем сохранении в другой.

>3. Большая БД не влезет в ОЗУ.


С этим согласен. Но опять же, если нет перспектив что база будет занимать гигабайты места - этим можно пользоваться?

>Она не хранится в SQL. SQL - это просто язык запросов, внутри БД может быть реализована как угодно.


Ну окей, освоил язык. Сути не меняет, будет она хранится в sqllite или MySql

>Обращайся 20 раз.


Понятно. Грустно как то. В итоге мой вариант более оптимизирован, но из за стандартов юзанья sql - становится признаком нуба.

>Это лучше, чем возможность ситуации, когда однажды самописная БД сдохнет.


Это легко предотвратить.
250 2083704
>>083700
Sqlite делали умные люди и нахуячили туда сотни оптимизаций, а ты хуяришь строчки в простой тхт-файл и думаешь что у тебя то же самое. Чел.....
251 2083717
>>083700
Можешь посмотреть на всякие in-memory СУБД, там тоже всё держится в ОЗУ и иногда сохраняется на диск, там это делается оптимальнее, чем в самописной. В реальности используется в основном для данных, которые не жалко потерять, всякие кеши, результаты вычислений, очереди сообщений и подобное, что можно легко восстановить.
252 2083722
>>083704
Я не говорю что то же самое. Но лично пробовал, скинуть целиком базу в тхтшку на порядки быстрее, чем скинуть её в sqlite. В других бд не пробовал.
Ну ладно, я сюда не обсирать или отстаивать свою точку зрения пришёл. Думал может я что то не так понимаю. В целом то для моей задумки абсолютно не критично, будет запрос обрабатываться 0,1 секунду или 0,01 секунду.
>>083717
В целом я делаю проект больше для портфолию, мне надо что было как у всех...
253 2083755
>>083722

>я делаю проект больше для портфолию


Покажешь себя лошарой, лол.
254 2083782
>>083685
Опять ты выходишь на связь мудило? Необучаемый блять.
255 2083791
>>083782
Это не он, тому надо было проприетарный копирастский sqlite с зондами запустить через mono на windows xp.
256 2083823
>>083722

>Надо чтобы было как у всех


>Делает самописную базу на тхтшках вместо того чтобы заюзать склайт


Челллллл....
257 2083826
>>083823
Так и говорю, что придётся переделывать на sqlite, что б было как у всех
258 2084310
>>083826
А чего не mongodb? Тоже файловая, если сохранность данных не сильно в приоритете, то может подойти.
259 2084313
>>084310
С каких пор монгодб файловая? Уже не надо тащить целый сервер, писать конфиг и разворачивать кластер из единственной ноды?
260 2084451
>>083722
Еще есть редис
261 2084495
Почему varchar(max) имеет ограничение в 2гб?
262 2084588
>>084495
Пушо его длина определена как signed int32
263 2084592
>>084588
понял, спасибо

Т.е для nvarchar(max) длина будет уже как int16, верно?
(занимает то символ 2 байта)
264 2084593
>>052408 (OP)
Увидел вот такую конструкцию в одном из запросов для mysql:
FROM {message} mm1

Что еще за фигурные скобки? mm1 понимаю что это сокращение для таблицы message, только тут AS опустили
265 2084597
>>084593
Гугл говорит, что это php-шная тема и mysql тут не при чём.
266 2084599
>>084592
Нет, не понял.
Signed int32 - длина поля в байтах.
Varchar вмещает 2ккк байт == 2ккк символов == char == uint8.
Nvarchar вмещает 2ккк байт == 1ккк уникодных символов == wchar == uint16.
267 2084601
>>084597
Походу да бля, это кусок кода в пхп
а я хуево знаю пхп
268 2084602
>>084601
Это переменная. Туда подставится значение в скобки
269 2084607
>>084599
Юникодный символ может быть и 6 байт длиной.
270 2085163
Посоветуйте гайдецкий по индексам в монго. Почитал их доку - нихуя не понял, где и какой лучше использовать. У меня документы в коллекции с 10 полями, все они и/или могут быть включены в выборку. Внимание вопрос:
1. Если на каждое из полей вешать compound индекс, будет ли в этом толк?
2. Будет ли в 1 кейсе перекрытие индексов, если оба поля будут участвовать в выборке?
3. Нужны ли partial filter expressions вообще? Выжу в них смысл только в тех кейсах, где одна и та же кверя отрабатывает по нескольку раз.
Спасибо
271 2086167
>>052408 (OP)

> https://metanit.com/php/mysql/


Подскажите, я могу делать всё как по этому гайду, но только с postgres? Через PDO всё будет такое же или нет? Mysql никак не хочет устанавливаться.
272 2086170
>>086167
В пхп части будет, а сам постгрес чуток другой, очевидно.
273 2086174
>>086167
Ну там просто запросы передаются, хули тут делать. Вобще юзай ларавель и нееби голову.

чел если ты обосрался ещё на этапе установки бд, у меня для тебя плохие новости

спасибо абу, как же ахуенно капчу каждый раз вводить чтоб блядь на телефоне у тебя была такая же капча, макака сранная
274 2086180
>>086174

>ты обосрался ещё на этапе установки бд


Лол, установщик не может запустить сервер, а виноват конечно пользователь, а не говнокорпа. Гугл говорит, что это извечная проблемаmysql, но из решений только танцы с бубнами, которые мне не помогли.
275 2086589
>>086180
На работе тоже скажешь, бля, я не сдела таску, мне устанвщик в штаны насрал?
276 2086781
>>086589
Ну в случае тотального отсутствия вариантов решения проблемы, за исключением сноса винды, конечно да, хоть уволюсь, в чём проблема? Мне из жопы высрать нормальный mysql, написанные не криворукими дебилами?
277 2086805
>>086781
Заебал, поставь docker desktop на винду и запускай любую хуйню, на сколько оперативы хватит.
278 2087980
Сап котаны. Хочу ускрить запрос навешиванием индексов,

запрос вида

SELECT *
FROM GOVNO
WHERE BEGIN>=2020-01-01
and END>=2020-01-02

Достаточно ли будет проиндексировать BEGIN+END или нужен связанный индекс по двум полям, или ещё какое-нибудь колдунство? Что посоветуете при таком сценарии вобще?
279 2087983
>>087980
самофкис, да очевидно что в случае с END знак в другое стороны, проебался но я думаю вы умненькие и так всё поняли
280 2087995
>>085163
бамп
281 2088021
>>087980
Всё очень плохо.
Если у тебя будут индексы на обоих полях, для доступа к данным все равно будет использоваться только один индекс.
И надо учитывать, что если твои условия выполнены для большинства записей (очень старая дата BEGIN, очень новая дата END), то от индекса будет только хуже. По тем же причинам индекс на одновременно BEGIN + END будет говной.
Как вариант, можешь попробовать партиции на одно из полей и индекс на второе.
282 2088276
Поясните за колоночные базы.
Если на простой запрос повесить условие

select *
from table
where atr = 'aaa'

Условие на запросе будет работать быстрее, если таблица СУБД колоночная?
283 2088295
>>088276
Конечно, будет, именно для этого они и нужны.
Но вы учитывайте, что в колоночных СУБД дорогие апдейты и джойны, так что нужно выбирать СУБД исходя из решаемых задач в целом.
284 2088299
>>088295
ебнул join в КХ == выстрелил себе в ногу
285 2088305
Как правильно хуячить sql-запросы чтоб все понимали что я Альфач? Ну чтоб прям конкретно продавить
286 2088318
>>088305
Можешь скинуть свой запрос, я переделаю в альфовый.
287 2088347
>>088318
select * from muk.puk where mne='pora'
288 2088348
>>088318
select * from muk.puk where mne='pora'
289 2088411
>>088347

>mne = 'pora'


Не благодари.
290 2088458
Что, появилась там, наконец, легковесная мастер-мастер бд с eventual consistency? Или, может, постгресс освоил такие технологии? Пару лет назад, вроде, такие подвижки были.
291 2088628
>>088021
Бля чот подумал что изи катка...А оно во то оно как. Странно что под такой распространеный кейс нет стандартного шаблона.

А что касается партиций, я что-то не уверен, мимокроки пишут, что прирост перфоменса хуйня

http://mysql.rjweb.org/doc.php/partitionmaint

За ответ спасибо
292 2089115
>>088628
Так перформанс по партициям сильно от объема данных зависит, не?
Одно дело по ключу партиции вытащить несколько лямов, а другое дело даты дрочить.
Не делайте себе голову, проверяйте на своем железе. Тут запросы пару строчек
293 2089245
Всем привет. Где проектировать базу данных для моего сайта?
294 2089268
>>089245
Привет.
В компьютере.
295 2089272
>>089245
Если ты про всякую IDEF0-ER-UML-парашу, ей пользуются только студенты на лабах и то только потому, что заставили преподы. Просто думаешь, какие таблицы тебе нужны, пишешь скрипты для их создания, и всё.
296 2089380
>>089245
Что значит проектировать?
297 2089435
>>089245
В draw.io диаграмму нарисуй и хватит.
298 2092041
Что лучше: NULL или пустая строка?
299 2092046
>>092041
Это разные вещи. Всё равно что сравнивать нулевую температуру и вакуум, где понятия температуры нет.
300 2092086
>>092046
Вот у меня нет значения пока пользователь не добавит. Что мне использовать?
301 2092087
302 2092126
>>092041
за пустые строки пиздить надо
303 2092249
>>092126
желательно ногами в живот
304 2092323
>>092041
Что лучше: отсосать с достоинством или позорно быть выебанным в жопу?
305 2092383
Анон, объясни, как такое вообще может быть?

Есть запрос с фильтром по СТАТУС + КОМПАНИЯ:

> 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-байтоый инт - то есть это микросекунды и заказы размазаны по суткам абсолютно хаотично. И он идет первым в индексе. А второй идет компания.
Это же вообще бессмысленный индекс, но блять, он работает и фильтрует по нему компанию. Как так?
305 2092383
Анон, объясни, как такое вообще может быть?

Есть запрос с фильтром по СТАТУС + КОМПАНИЯ:

> 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-байтоый инт - то есть это микросекунды и заказы размазаны по суткам абсолютно хаотично. И он идет первым в индексе. А второй идет компания.
Это же вообще бессмысленный индекс, но блять, он работает и фильтрует по нему компанию. Как так?
306 2092481
>>092383
Лол, у тебя может одна и та же компания быть создана несколько раз в разное время?
Есть ощущение, что created_at, company_id - 1 уникальная пара для company_id, так что оно по этому индексу как раз находит компанию.
А потом уже фильтр на те строки, что по индексу.
307 2092483
>>092481
А не, я объебос и читать не умею.
Хз, хинтани как-то full scan по фильтру и посмотри. Мейби ему рли проще по дереву индексов пройтись, игноря даты.
308 2092489
>>092383

> Index Cond: (company_id = 91785)


Он же сам пишет, что по 1 кондишену индекс смотрит.
Чё за СУБД?
309 2092506
>>092489
Постгря

>сам пишет, что по 1 кондишену индекс смотрит


Но это составной индекс же. Сначала дата, потом в рамках этой даты компания.
date1
- с1
- с2
date2
- c1
- c3
Это же так работает вроде?

>>092483

Ну очевидно проще, таблица жирная, а время выполнения приемлемое. Но вот и вопрос, как так.
310 2092563
>>092506
Почитал, как в Постгре индекс на несколько атрибутов работает.

Мейби, у тебя жирнющая таблица с херовой тучей полей, и к ней так тяжко обращаться, что проще весь индекс прочитать, чем сперва таблицу трогать?

https://www.postgresql.org/docs/9.6/indexes-multicolumn.html

Дока говорит, что

>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.

311 2092564
>>092563
Хмм, да возможно, что-то я не подумал. Это типа получается как фулскан, только по индексу бежать типа быстрее.
Да, спасибо анон, видимо так оно и есть.

Таблица большая, порядка 3кк, но полей не много.
312 2092576
>>092564
Во, придумал, кажется.

При Table Full Scan нам всегда нужно 100% строк смотреть.

При Index Full Scan иногда возможен такой кейс.
Пример:
date1
- с1
- с2
-...
-сN
date2
- c1
- c3
-...
-cM

Нам нужно найти с2, допустим. Пойдем по каждой дате, но будет чекать не 100% записей в индексе, а только до момента записи с2, потом дальше в ветке по дате смотреть нет смысла. И выходит, что вроде как Full Read, но читаем не всё.

А если ещё окажется, что оно как-то алфавитно или по моменту добавления индексы строит, или по частоте запросов (хуй знает, пути СУБД неисповедимы иногда), то мейби там вообще в 1-2 блоке индекса щас лежало и всё так шустренько вывело.
313 2092600
>>092576

>а только до момента записи с2


Ну да, логично.
Правда в моем кейсе это будет безпрофитно, тк почти невероятно то что заказы будут в одну микросекунду. Но так-то да.
314 2092640
>>092600
Может тогда стоит ребилдануть индекс по DATE без времени?
Что это даст в производительности случайных запросов?

Или уже есть партиции по дням/неделям/месяцам?
image20210708T104348956Z.png24 Кб, 594x250
315 2093511
Не могу до конца въехать, что нужно добавить в запрос, чтобы данные, хранящиеся в таблице слева, оформить в виде как справа.

Данные: есть номера, типы и даты. Сочетание "номер + тип + дата" уникально, а сочетание "номер + тип" может повторяться.
Задача: необходимо отобразить историю изменений типов в рамках номера с течением времени.

Простая группировка вида
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
т.е. когда с течением времени в поле "тип" начинают повторяться значения.
316 2093552
>>052408 (OP)
сап, двач!
собираюсь вкатиться в дата инжир джуном.
знаю так себе скл, ковырял немножко оракл, знаю основы питона

какие подводные??
317 2093768
>>093511
Это очень интересная задача, но ты все делаешь неправильно, как ты сам заметил, ты не должен просто группировать по типу, потому что это не отрабатывает ситуации, когда значения одного типа были в два разных периода.
Эта задача решается через аналитические функции, они есть в бд, в которой происходит действие?
>>093552
Хорошая работа, минусов нет.
318 2093873
>>093768
классно, пойду наверну курсов
image.png51 Кб, 949x618
319 2093885
>>093511
Тебе повезло, что я в отпуске и задача крутая.
Вот так она должна решаться.
Первый запрос: получить признак того, что значение поменялось.
Второй запрос: просуммировать единички нарастающим итогом и получить цифру, которая одинаковая у всех в рамках одной группы, айди группы, короче.
Последний запрос: сгруппировать по полученному айди и вывести значения.
1.jpg75 Кб, 1681x538
320 2094102
Парни, что не так с этим запросом? Я заебався
321 2094107
>>094102
dept_id integer,
foreign kry (dept_id) references dept(dept_id)
322 2094115
>>094107
нихуя не понял, но спасибо
323 2094118
>>094107
типа после foreign key нужно дописать (dept_id)?
324 2094127
>>094118
Не только, там ещё запятая. Сначала объявляешь колонку, а затем отдельно делаешь её внешним ключом.
325 2094141
>>094127
Получилось, спасибо
326 2094249
>>093885
Если чё, то это базовый поиск уникальных периодов, базовый кейс, везде нужно.
327 2094341
Аноны, есть загрузчик данных в таблицу из csv-файла. Пишу скрипт, который сравнивает таблицу и csv-файл, и логирует строки которые не занеслись в базу по каким-то причинам. Пока что написал только для загрузки данных в пустую таблицу, но что делать если она непустая? Скрипту на вход подается только файл-источник и таблица. Как узнать, с каких строк начать сверять данные?
328 2094398
>>094341
Системное поле с моментов вставки/обновления строки добавь. Или хотя бы с номером загрузки.
Или ебись костылями через rowid или его эквивалент.
329 2094402
>>094398
Нет другого способа? Скрипт должен работать с любым загрузчиком и любой таблицей
330 2094408
>>094341
Почему ты не можешь на этапе работы скрипта логировать строки, которые не занеслись в базу? Хуйню какую-то придумываешь.
331 2094415
>>094408
Да не я эту хуйню придумал, мне так задачу поставили(
Типа это должно работать с любым загрузчиком
332 2094453
>>094402

>Скрипт должен работать с любым загрузчиком и любой таблицей


Тогда проверяй все.
333 2094901
>>093885
Огромнейшее тебе спасибо! Добра, большой зп и интересных задач!

Аналитических функций в моей БД (Sybase 9.0.2 + ASA 9.0) не оказалось, а написать альтернативу lag я пока не смог (пробовал через добавление ещё одного столбца с порядковым номером строки и последующим селфджойном со смещением на предыдущую строку и проверкой на равенство типов между строк, но что-то нужного результата пока не получил; также поэкспериментировал с rank() и dense_rank(), результата также не получил, но хотя бы наглядно понял их отличие), так что перенес данные в другую БД и воспользовался твоим запросом.

Ещё раз большое спасибо :3
334 2095045
>>094901
Спасибо за добрые слова! Обращайся.
335 2095667
>>094341
Ебашь мердж, если в таблице нехватает добавит, если нет обновит. Либо делай инсерт с игнором ошибок, чтоб дублей не было. Вобще я чот нихуя не понял в чём проблема то?

Если тебя смущает что данных много, то часто делают мердж только за определенные даты, скажем за сутки.
sqlscreeeeeennn.png11 Кб, 842x483
336 2095842
Анон помоги плез, нужно сделать запрос который выводит коды продавцов salesperson из таблицы purchase_archive, которые не повторяются в таблице purchase. Но у меня выводятся тупо 2 таблицы. Что не так?
И заодно сразу спрошу: как вывести только тех продавцов которые содержаться в таблице purchase_archive?
Заебался шо пиздец
337 2095846
>>095842
SELECT DISTINCT salesperson FROM purchase_archive INNER JOIN purchase ON purchase_archive.salesperson = purchase.salesperson;
Тоже не срабатывает, хз че не так
338 2095856
>>095842
SELECT DISTINCT purchase.code FROM purchase JOIN archive ON purchase.code = archive.code WHERE archive.code IS NOT NULL;
Это которые есть, которых нет соответственно IS NULL
339 2095857
>>095842
Это тренировочная задачка? Давай бд, не все же тут старшие дата инженеры в отпусках, чтобы самим данные вбивать.
340 2095858
>>095856
LEFT JOIN то есть
бд.png236 Кб, 1051x546
341 2095873
>>095856
чёто не работает(
>>095857
вот как выглядит БД. Нужно вывести salesperson из purchase_archive, которые не повторяются в purchase
342 2095877
>>095873
Да дай ссылку на бд свою, что ты жадничаешь? Какой смысл наугад запросы придумывать, чтоб ты проверял, если можно сразу нормально сделать?
343 2095878
>>095877
Да у меня нет ссылки, я делаю в sql 8.0, это практическое задание
344 2095879
>>095873
С лефтом не работает? Должно вроде.
345 2095887
>>095879
table archive is not exists
346 2095888
>>095887
Ты дурчок штоль? Поменяй на свои имена.
347 2095895
>>095888
Да бля сижу целый день, уже нихуя не понимаю под вечер
348 2095899
>>095888
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
349 2095904
>>095899
SELECT DISTINCT purchase_archive.salesperson FROM purchase_archive LEFT JOIN purchase ON purchase_archive.salesperson = purchase.salesperson WHERE purchase.salesperson IS NOT NULL;
Вроде так.
350 2095915
>>095904
Завтра чекну братик
Ауе
351 2096116
Работаю SQL-макакой, из дома. Работаю с большими реляционными БД. Неплохо знаю SQL, и получается работать по 20-40 минут в день, вместо 9 часов. Зарплата норм. Что учить дальше из смежных областей, чтобы ЗП только повышалась, но при этом чтобы работать не больше часа в день? Есть ли тут такие?
352 2096146
>>096116
оу, чел
а как стать тобой? что подучить, чтобы перейти в работу с БД? sql так-то знаю
353 2096238
>>096116
Сколько зп?
354 2096689
>>095904
Получилось спасибо
355 2096963
Если у меня будут обращения в базу для чтения гораздо чаще, чем запись в неё и от многих пользователей, то что делать? Писать в ОЗУ, а потом сбрасывать в реляционную? Или типа может сразу какой-то NoSQL есть?
356 2096973
>>096963
Возьми какое-нибудь готовое решение для кеша, не надо ничего велосипедить.
357 2097004
Redis делает snapshots в файл так, что мне будут доступны все эти ключи собственно, но в ОЗУ будет только то, что нужно сейчас? Типа если не найдет ключа в ОЗУ, то лезет в файл, находит и ставит в ОЗУ? Да?

Хотя чет другое поведение и трудно представить или может быть?
358 2097008
>>097004
Нет, он просто скидывает на диск иногда или пишет в журнал, актуальная база всегда в памяти.
359 2097023
>>097008
А как тогда сделать, чтобы и в памяти было и подгружалось из файла, если нет в ОЗУ?
360 2097025
>>097023
Оно всегда в озу, файл читается только на старте.
361 2097026
>>097025
Мне надо, чтобы на случай, когда очень много ключей и не влезают в ОЗУ. Тогда старые (незапрашиваемые) идут в файл откуда можно достать если что и поместить уже в ОЗУ. А часто используемые и остаются в ОЗУ, хотя и их тоже желательно иногда в файл. Такое возможно? Если да, то как? Задача ж вроде популярная, наверное.
362 2097027
>>097026
Нет, тогда используй другую k-v базу.
Смысл редиса как раз в том, что он сидит в памяти, файлы это вообще опциональная фича.
image.png107 Кб, 974x777
363 2097031
>>097027
Только первые два подходят из всего списка? https://en.wikipedia.org/wiki/Key–value_database
364 2097036
>>097031
Можешь хранить в чем угодно, а поверху кешем редис, он как раз умеет в такие штуки.
365 2097060
>>052408 (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?
366 2097078
367 2097084
>>097060
Ответ на вопрос: нет, неправильно. Для начала внешний ключ должен ссылаться на потенциальный ключ.

Насчет NULL: он нужен в FK в том случае, если я хочу смоделировать отсутствие соответствия в главном отношении. Например, есть таски, есть разработчики, каждая может быть назначена какому-то одному разработчику. Пока таска никому не назначена - все бухают ее FK будет NULL.
368 2097085
Почитал книжку этого Дзюбы... Ну знаете.
На 34-й странице автор утверждает, что для теоретико-множественных операций алгебры необходим строгий порядок атрибутов. Грубое надругательство над Коддом.
На 37-й странице Дзюба после декартова произведения получает отношение с двумя атрибутами customer_id.
Закрыл книгу.
Нахуй такую литературу, малец. Кузнецова читай.
369 2097086

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



Это тоже звучит как бред и неудивительно что вызывает вопросы.
370 2097101
>>097084
>>097085
>>097086
Понял, всем спасибо.
371 2099090
Аноны, есть csv-файл, и есть таблица, содержащая данные из этого файла (не все). Как быстро сравнить файл и таблицу и найти разницу в данных?
Сейчас я делаю так: загружаю таблицу в другой csv-файл, и каждую строку из первого файла ищу во втором. Короче, медленно. Можно ли быстрее?
Использую python (можно bash)
372 2099108
>>099090
1) Пиухон умеет в декартовы произведения, в чем проблема?
2) SQL умеет работать с csv\json, тащемта первая ссылка в гугле:
https://docs.microsoft.com/ru-ru/azure/synapse-analytics/sql/query-single-csv-file

Хули ты суда принёс это? Пиздуй к питухонистам в тхреад
сидящий епифанцев. хуюбель.JPG12 Кб, 406x447
373 2099111
Аноны, могли бы пояснить макаке, какого хуя столбец не существует, когда он существует, блять. Я где-то в синтаксисе туплю?

hui:DATABASE=> insert into
users (name,surname,username,email,password,datecreate,defaultcity,changeStatus,userWeather)
values ('name','surname','username','email','password','datecreate','defaultcity','changeStatus','userWeather');

ERROR: column "changestatus" of relation "users" does not exist
СТРОКА 1: ...me,username,email,password,datecreate,defaultcity,changeStat..

Вот тута select * from users, тута есть столбец.
id | name | surname | username | email | password | datecreate | defaultcity | changeStatus | userWeather
374 2099113
>>099111
Ок, это связанно с верхним регистром в второй половине слова.
Как это говно пофиксить?
16259250039430.mp4567 Кб, mp4,
924x720, 0:03
375 2099114
>>099113
>>099111
Ебать, надо каждое слово с разными регистрами оборачивать в двойные ковычки, уу сука. А еще грят, что жепаскрипт говно.
16116006884670.jpg100 Кб, 820x823
376 2099333
так поясните раку, который с нуля хочет вкатится в SQL , реально ли обучиться на аналитика абосанца самого галимого уровня и получать хотя бы 70-100к, если я не знаю ни одного языка программирования и вообще нулевый в этой теме?
Я не работал ни сисадмином , вообще в этой сфере не работал. Но мне человек сказал, что в SQL любой может вкатится и получать свои 120к в мск.
https://www.youtube.com/watch?v=BYCU3XyKCzA смотрю Кухаря, на 3ем уроке пошли какие то чары варчары, в общем нехуя особо не рассказывается откуда он какие то формулы берет и для чего, нехуя не понятно. Мне что просто повторять за ним как мартышка и я в итоге пойму или как ? а подскажите аноны, а то меня из дома выгонят скоро.
В каком направлении двигаться то , может кто расписать что сначала изучать начать, а что потом, чтобы дебил с 0 мог понять смысл вещей.
377 2099355
>>099114

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


Потому что при создании ты написал идентификатор в двойных кавычках. Пиши всё без кавычек и капсом, и проблем не будет.
378 2099357
>>099333

> Но мне человек сказал, что в SQL любой может вкатится и получать свои 120к в мск.


Нихуя новый положняк для вкатышей.
379 2099363
>>099333
Нет, в твоём случае это нереально, ведь в тебе ноль интереса к теме, нет образования и способностей, только жадное желание получать сотыгу всеми правдами и неправдами.
Рекомендую вкат в гей-проституцию.
380 2099370
>>099363
я человек не жадный, высш.физ и мат я учил , образование какое то есть. Я понимаю вам лишь бы обосрать, а помочь советом кто нибудь может ?
381 2099376
>>099370
Боимся конкуренции от такого могучего деятеля, да.
Просто вопрос максимально идиотский. Хочю стать хуй-нейм, чо делоть?
Читай книги, смотри своих цыган, потом приходи и спрашивай по сути.
382 2099377
>>099370
Какой совет тебе дать? Советую заниматься тем, что нравится, а не тем, за что всем сотыгу платят в Москве.
383 2099379
>>099376

> вопрос максимально идиотский


Даже конченный идиот может зарабатывать 120к в месяц, нужно всего лишь ... (продолжение в источнике)
384 2099380
>>099377
ну так мне нравится анализ данных и тд, поэтому мне и посоветовали это. Я прошу просто дать мне алгоритм обучения, чтобы я с 0 смог иметь понимания , а не тупо зубрить как учили в школе, вот и всё. Хуле вы все такие негативные то блять
385 2099386
>>099380
Ты плохо залетел, надо было сразу мимикрировать под джуна с горящими глазами.
Ну а мы самый нищий слой айти и к тому же двачеры, так что не удивляйся.
советов по существу не дам, всё пока
386 2099389
ну и пошли вы нахуй двачеры абосанные, сам все найду и выучу.
изображение.png1,8 Мб, 1280x800
387 2099450
>>099389
Этот гречневый порвался, несите следующего
16051773208690.jpg9 Кб, 188x167
388 2099462
>>052408 (OP)
Щас вкатываюсь в Spark. Вроде похоже нa SQL, но много всяких погромистких нюансов, создаётся ощущение, что это не SQL макак а дли мидлов бекендеров, ууу сука ъхъ.

Раскуриваю Learning Spark, 2nd Edition с орели там бесконечные триалы можно абузить, не сказать чне понятно, но очень много новой инфы, и как назло топики которые мнен ужны, в самом конце книги. Ёбаный рот это казино, я тока неделю пытался среду разработки приколхозить. Такие дела анончики
389 2099522
>>099386

>Ну а мы самый нищий слой айти


Я думал вем-макаки, ну ладно.
390 2099535
>>099522
Они кстати хорошо получают, времена верстальщиков давно прошли. Всё из-за востребованности их хуйни, при этом знать надо не так много. Думаешь, почему они такие охуевшие? Кто действительно бедный - так пхп-шники и 1с-ники.
image.png552 Кб, 412x600
391 2099544
>>099462
Приготовься охуенно соснуть. Спарк это JS бигдаты, финальный босс от которого твоя жопа разлетится на мелкие кусочки так что никакой хирург не соберет обратно.
А если нет, то я тебя все равно попущу на собесе. Чел, серьезно, не стоит вскрывать эту тему.
392 2099684
Я могу в постресе сделать что нибудь типа такого? Пройтись в функции лупом по результату запроса?

DECLARE
..x text;
BEGIN
..FOREACH x IN ARRAY (SELECT b."Key" FROM public."Bitches" b)
..LOOP
....RAISE NOTICE '%',x;
..END LOOP;
393 2099699
>>099355
Ясно, что-то я жидко пукнул, когда решил через консолечку это делать, хотя работы на час-два было, но вроде разобрался.
394 2099760
>>099684
Вроде сделал через FOR. Теперь вопрос, а что я должен вернуть из функции before truncate триггера? Если я верну NULL, то другие триггеры не вызовуться (так же?), new/old тут не имеют смысла, тогда что?
395 2099807
Насколько быстро работает COUNT? Или завести поле, где добавлять единицу будет проще и лучше?
396 2099814
>>099807
Ебать ты оптимизатор.
397 2099825
>>099807
Зачем, ведь можно же просто писать count(1) кстати, это детектор конченных уебищ, ничего не понимающих в бд
398 2099859
>>099825
Что не так с count(1)? Уже несколько раз видел негатив в сторону данного выражения. Объясните позицию.
399 2099860
>>099807
Всё как обычно зависит от задачи. Если у тебя сотни записей и есть индекс, то быстро. Если надо посчитать миллионы записей, то имеет смысл сделать поле count и повесить триггер на delete/insert, но в таком случае ты замедлишь эти операции в несколько десятков раз, плюс поле count не поможет, если надо посчитать используя фильтр.
400 2099867
>>099859
Те, кто пишут count (1), веруют, что это работает быстрее, чем count (*). А это неправда.
401 2099870
>>099867
Большинство тех, кто это пишет, ни во что не веруют и просто копируют из примеров, думая, что это волшебное обозначение такое.
402 2100105
>>099807
Зачем отдельное поле? У тебя есть поле с первичным ключём уже. Да и вобще не думаю что на count влияет содержимое поля. COUNT(1) нужно только для того чтобы посчитать без NULL для конкретного столбца. Вобще не выебывайся ,а иди смотреть план запроса.
403 2100187
>>099825

> count(1) кстати, это детектор конченных


>>100105

>COUNT(1) нужно


Объяснитесь.
404 2100193
>>100187
Чел жиденько обосрался. Count (1) эквивалентно count (*) и считает все строки, а чтобы посчитать без учёта null, нужно делать count(имя_столбца)
>>100105
Извиняйся.
405 2100251
>>100193
А ёбана, я думал 1, просто номер столбца, ну не так что б жиденько, но да, слегка поддал
406 2100254
>>100251
Ничего, бывает.
count(1) это как если бы ты добавил столбец, состоящий из единичек и сделал count по нему.
Еще крутой вопрос, которым можно душить джунов: что вернет count(null)?
407 2100260
>>100254
Нулл нуллу волк.
408 2100408
>>100254

>Еще крутой вопрос, которым можно душить джунов: что вернет count(null)?


Расскажи. Судя по логике остального, он как будто добавит столбец, состоящий из null, и сделает count по нему, но так как null он не считает, то получится 0.
409 2100412
>>100408
Да, все верно.
410 2100424
>>100412
чото мсскул сказал что %%ты пидор% нельзя нуль
411 2100623
>>099825
Иди нахуй, пидор, не буду я до звёздочки тянуться.
412 2100697
>>100623
Звездочка находится на цифре 8. Если учесть, что ты печатаешь ещё и скобочки, то для (*) ты нажмёшь shift + 980, все рядом. А для (1) ты будешь тянуться к единице и отжимать шифт, чтобы ее нажать.
Второй тест на уебана: where 1=1 пишешь?
413 2100925
Сап, студент на связи, поясните пару моментов:
1) Насколько вообще востребован SQL сам по себе? Без нормального знания какого-то ОО языка программирования есть смысл в это лезть, или без связки вообще не стоит?
2) Как понять, что ты готов пиздовать на джуна? Какие вообще задачи дают джунам? Явно же не только задания уровня сделать nное количество простых запросов с джоинами и парой стандартных функций в селекте.
Спасибо
414 2100943
>>100925
Да, востребован и сам по себе. Есть очень много разных аналитиков или разработчиков баз данных. Но почему ты не хочешь вкатиться в настоящее программирование пока молодой?
Да, джунам в основном дают простые задачи, взрослых дядек спрашивают по кишочкам конкретных БД.
415 2101079
>>100697
Только если динамическое спагетти собираю.
416 2101183
>>100925
1) Вполне востребована, во всех банках пердолятся с этим говном
2) Когда можешь сложные джоины, оконные функции, немного хранимые процедуры.
Снимок экрана 2021-07-20 в 18.14.43.png111 Кб, 1184x1116
417 2101644
Переставил систему, накатил постргю. И теперь почему-то не работает. Подскажите что не так? Раньше select similarity('йцу', 'йцукен'); выдавали что-то около 0.5
psql (PostgreSQL) 13.3
418 2101671
>>101644
А если латинские? Что-то с кодировкой небось.
419 2101674
Если латинские, то всё норм.
Вот что-то с кирилицей. До сноса работало всё нормально. Куда копать? Может что-то с конфигами?
420 2101677
>>101674
А в таблице и редакторе одинаковые кодировки?
421 2101684
>>101677
В таблице у меня на лету в тестах кидается запись в бд, всё в utf
422 2102108
>>2096462 (OP)
>>2099130 →

Аноны, кто шарит в базоданности всей этой базоданнизациоанальной,
подскажите плиз - с чего начать, блядь?
Думаю, короче, присобачить на наноборду 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х, но это уже второстепенное всё.
Надо короче набросать план, а с чего начать не знаю, блядь.
Походу мне надо кто-то, кто шарит в проектировании баз данных, для датацентров пиздатых,
потому что в будущем, база нанопостов такого глобального проекта как наноборда,
он может занимать целые пиздатые подземные лаборатории в замкнутых экосистемах на различных экзопланетах.
423 2102115
>>052408 (OP)
Пусть есть таблица, реализующая дерево.
| ID | parentID | data |
Для каждого ID, здесь, существует, один и только один parentID.

Вопрос. А возможно ли, каким-либо образом, реализовать связь один ID -> много parentID, сделав это, с сохранением обратной совместимости с этой вот таблицей?
Первое, что приходит в голову, это включить дополнительные parentID's внутрь data, но тогда придётся парсить data для каждого ID. Может есть способ попижже, через какую-то дополнительную таблицу, заебенить сие, но сделав это так, чтобы эту вот таблицу не передёргивать, чтобы новый способ был как-бы опциональным, и мог не работать, но эта шняга чтобы гарантированно работала, как и прежде... Мм?
424 2102126
>>102115
Гугли data vault
425 2102271
Будет ли count() > 100 from.. where.. пересчитывать все строки, или остановится на 101-ой. По моим тестам в SQLite считает все, ибо count() > 100 from (select.. from .. where.. limit 101) работает быстрее. Какие подводные есть у такой оптимизации? Или все так и пишут через подзапрос, а это я лопух писал просто count(*) > n? Или это SQLite не оптимизирует, а во "взрослых" базах без разницы? А?
426 2102285
>>102271
Да, никакого волшебства здесь нет.
Сначала считать все строки, потом сделать count, потом применить к нему условие.
Во втором случае сразу ограничиваешь количество строк, которые читаешь, поэтому быстрее.
Никаких подводных нет, вопрос только, нахуя тебе это нужно? Проверить, есть ли в таблице 100 записей? Ну ок.
427 2102290
>>101644
Это что pgAdmin? Брось каку, возьми хотя бы dbeaber.
>>100697

>тест на уебана


Пишу where not 1<>2, я прошел тест?
428 2102309
>>102285

>нахуя тебе это нужно? Проверить, есть ли в таблице 100 записей?


Типа того. Пишу борду (судя по посту несколько выше не я один), и так как сортировка тредов на доске у меня начала подпердовать уже на 300к постов (~100мс), то я принял волевое решение добавить в тред поле lastBump и повесть на инсерт поста триггер, который обновляет это поле. Соответственно триггеру надо проверить количество count(*) > bumpLimit и решить поднимать тред или нет. Конечно в моем случае не будет разницы между количеством постов и лимитом в 1000 раз, когда разница в скорости подсчета становится заметна (пока писал подумал, может еще добавить поле с количеством постов и два триггера на инсерт/делит хм.. Стоит ли?), так что вопрос скорее возник из спортивного интереса. Допускаю что я пошел совсем не тем путем, я совсем зеленый и "проектирую" все на ходу. Зачем я высрал этот пост? ХЗ.
429 2102316
>>102309

>Зачем я высрал этот пост? ХЗ.


Нет-нет, очень интересная проблема.
Но с триггером хуйня затея, очень большие накладные расходы, если заниматься этим на каждом посте.
Не хочешь повесить джоб, который запускается раз в 5-10 минут и тред все треды, в которых больше определенного количества постов и последний бамп был определенное количество минут назад?
430 2102318
>>102309
Кстати, обрати внимание, как двач сделан.
Есть уникальный ID поста и есть номер поста в рамках треда.
Может быть, тебе будет проще поддерживать номер поста и не поднимать, если номер нового поста больше 500?
431 2102433
>>102316
>>102318

>Но с триггером хуйня затея


Ты про триггер, который lastBump ставит? Так это поле очень полезно: имея индекс (доска, бамп) можно очень быстро получать какие треды должны быть на какой странице. Плюс на главной показывать последние обновленные треды. В общем-то вот эта сортировка тредов на доске по последнему бампу с учетом сажи и сжирала 100мс.

>джоб, который запускается раз в 5-10 минут


Вообще есть такое желание, толко не тереть а отправлять в архив, например в виде json'a. Но до этого мне еще пердолить и пердолить.
Например на форчане 10 страниц по 10 тредов + n тредов, которые утонули, но еще доступны по ссылкам, хуё-мое, получаем ну пусть 300 тредов по 500 постов. итого 150К постов, т.е. рядом теми 300К, которые я тесстировал.

>Кстати, обрати внимание, как двач сделан.


>Есть уникальный ID поста и есть номер поста в рамках треда.


О, а тут у меня совсем наркомания. Я ковырял vichan на гите и там в бд для каждой доски своя таблица постов и нет сущности тред (там у постов есть поле parentId - ссылка на оппост, приреплен ли тред тоже свойство поста), но мне такое не очень понравилось, все-таки тред это тред, а пост это пост. Так вот, что бы сделать раздельную нумерацию постов на досках, я при создании доски (через триггер) создаю и sequences для каждой доски и при постинге посту (снова через триггер) устанавливоется поле Number. А насчет номера поста в треде, его же все равно надо вычислять (да банально max() + 1) и при удалении постов мочей придется сдвигать нумерацию. Хотя это наверняка будет быстрей, чем каждый раз count() делать.
Кстати насчет tinyboard, там хитро сделано, что сами треды дублируются в виде фалов на диске и автоматически обновляются. Т.е. при запросе отдаются статические файлы и база практически не напрягается. Такой вот ультимативный кэш.

Хочется сделать приличное ядро и при этом не тупо копировать у других, но возможно я замахнулся на то, что мне не под силам. Но в любом случае, как говорится, обосраться - тоже опыт.
432 2102476
>>102433
И в чем отличие треда от поста? Ничем. Во многих движках тред и пост - это одна сущность.
433 2102506
>>102476

>в чем отличие треда от поста?


На мой взгляд, прикреплен ли тред, заголовок треда, является ли тред ридонли и прочие прараметры хранить в таблице постов неправильно, они же могут быть применены только к оп-посту. Как-же нормализация БД?

>Во многих движках тред и пост


Знаю, вон даже номер треда это номер оп-поста.
434 2102929
>>102126
Нихуя не понел.
То есть, надо просто ещё одну таблицу сделать
| ID | DataID | parendDataID |
сформировав как-бы набор-данных из этих двух таблиц,
и её уже наполнить, парся data для каждой заПИСИ?
435 2103577
Анон, помоги. Есть заморская программа с закрытым кодом. Она пишет данные в SQL Server. И вот что я хочу - когда программа что-то пишет в базу, я хочу видеть куда оно это записало, и что именно записало

Есть какие-нибудь средства для этого (MS SQL Server) - и да, я не шарю в девопсе и про базы данных знаю только на уровне команд SQL, поэтому мне надо попроще
436 2104099
>>103577
Sql management studio клиент и подключайся
437 2104247
>>104099
при чем тут это? я спрашиваю как узнать что и где изменилось в базе данных.

То есть в закрытой проге я нажимаю кнопку, она вносит какие-то изменения в таблицы базы данных

и вот я хочу узнать - какие изменения - какие таблицы были изменены, что в них записалось и т.д.
image.png141 Кб, 1280x800
438 2104283
>>104247
В SSMS, про который тебе ответили выше, есть SQL Server Profiler.
Ты им подлкючаешься к БД, настраиваешь нужные параметры (что именно логировать, для какого клиента и тд), запускаешь свою закрытую прогу и смотришь в профайлере все запросы, которые она шлёт.
439 2104291
>>104283
спс, попробую
440 2104402
Есть несколько таблиц MySQL, мне нужно получить результат в виде:

table1 100
table2 500

Сейчас вывод:
+----------+
| COUNT(*) |
+----------+
| 219775 |
| 2859 |
| 109 |
| 2896 |
| 1059 |
+----------+

Т.е. как добавить в результат имя таблицы
441 2104403
>>104402
Хардкодом написать.
442 2104506
>>104402
Можно динамически строить запрос, с начало запрашиваешь имена таблиц, потом из этих имен клепаешь запросы, в том числе одно из полей имя таблицы. Название таблиц берешь либо из системной таблицы либо создаёшь свою настоечную таблицу.
443 2104965
Анон, хочу вкатится в условное DBA по PostgreSQL.
Из знаний, ВУЗовский SQL 92, пинус и доебавший EF Core.

Хочется узнать:
- Принципы работы PostgreSQL под капотом
- Как работают индексы с примерами "вы обосрались"
- Мониторинг, логирование
- Репликация и масштабирование
- Проектирование

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

Есть какой-нибудь адекватный план по вкатыванию путем книжек, курсов, etc?
По сути только https://www.postgresql.org/docs/books/
Бери любую да читай, но хз мб двач подскажет че-нить
444 2104969
Что происходит с индексами при добавлении ограничений в MS SQL?
В особенности при добавлении FOREIGN KEY
445 2105129
>>104965

> хочу вкатится в условное DBA по PostgreSQL.


У постгрес про есть пиздатый курс дба на русском. Только нахуй тебе, потенциальному разработчику, DBAшные знания?
446 2106268
Что такое SERIAL в pgsql? Это не тип, и не ограничение, тогда как мне его изменить? Как вообще проверить, что это свойство есть?
Пытался добавить запись в таблицу из php и получаю:

Unique violation: 7 ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "elem_pkey" DETAIL: Ключ "(id)=(1)" уже существует

Какого? Оно же само должно увеличиваться? Мне что блять, самому ещё туда уникальное id заносить?
447 2106273
>>106268
Просто не используй его в инсерте.
448 2106289
>>106273
Его и нет в инсерте, это уже sql пытается подставить ID=1, хотя в таблице уже есть две записи.
449 2106299
>>106289
Ну значит криво сделал схему, проверяй.
450 2106356
>>105129

> У постгрес про есть пиздатый курс дба на русском


Можешь кинуть ссылку или название курса?

> Только нахуй тебе, потенциальному разработчику, DBAшные знания?


У меня основной профиль информационная безопасность, поэтому сижу на двух стульях одновременно - администрирование и программирование. Если говорить на языке зумеров - SecDevOps, Security Champion или DevSecOps.
Более реальный кейс - System Architect. Ну и чем хуевей проект (стартап или отсуствие денег), тем мультизадачней тебе надо быть
451 2106964
На тесте поставили задачу, написать на постгрес вариант магазина, где есть некий товар в количестве N штук, и что бы пользователи могли резервировать этот товар по нескольку штук. И надо что бы это было якобы высоконагруженно и многопоточно. В общем всё сделал, но вылазиет фигня что так как многопоточно, то получаются лишние резервации, сверх запаса. При том именно постгри позволяет как бы параллельно работать с копией базы данных, и потом синхронизирует и получается бяка. Я могу это исправить на уровне языка (шарпа, фактически сделать однопоточную отправку), но как то вообще можно постгри заставить обрабатывать работу с конкретной дб в одном потоке?
452 2106966
>>106964
P.S. Или есть какой то синтаксис, что бы можно было вставлять строку с условием? Ну то есть если условие выполняется, то вставка работала, а если нет - то нет. Что б это в одном запросе как то было...
453 2107134
>>106966
Нахуя тебя многопоточность? Просто отправляй одной транзакцией несколько штук.
454 2107855
>>106964

> В общем всё сделал, но вылазиет фигня что так как многопоточно, то получаются лишние резервации, сверх запаса.


Раз тебе на тесте сказали сделать что-то многопоточно, то скорее всего подразумевается, что ты будешь использовать транзакции, определишь границы транзакций, выставишь уровни изоляции и т.д.

Лишние резервации сверх запаса получаются из-за того, что чтение количества резерваций и запись (добавление) резервации выполняются не атомно. Нужно чтение и запись резерваций объединить в одну транзакцию.
изображение.png4 Кб, 237x216
455 2107895
Что-то проиграл с вашего w3schools, такой неполиткорректный.
Ещё бы назвали всех китайцев Чин-чонгами.
456 2107896
>>107895
Ты уже ебанулся с утомлением от толерастов.
Если бы было айвен фром мухосранск то было бы неполиткорректно?
457 2107960
почоны, кабан!
458 2108078
>>107895
А что не так? Хуан, Джон и Иван стандартные шаблоны имён. Имя апостола Иоанна на разных языках тащемто.
459 2108082
>>108078
ДЖОВАННИ!
b21d62a1f6bb5ea1c9495aab941c7ef9ed826a78.jpg51 Кб, 960x540
460 2108113
>>108082
Даже Шон - это ирландский Иван.
461 2108339
>>107855
Транзакции не помогут, как я понимаю.
Я засунул весь процесс в одну хранимую функцию. Если вкратце, она сначала смотрит запас, потом вносит резервацию, потом проверяет снова запас, и если бронь таки получилась лишней, то удаляет её. По сути копия транзакции (не делал напрямую транзакции, потому что требуется использовать процедуру, а мне нужна была функция, что бы показывало итоговое количество резерваций) Но всё равно, вылезают лишние резервации.
Как я читал про постгри, про её работу с многопоточностью, то там получается каждый поток работает с копией бд, а потом результат синхронизируется.
462 2108341
>>107134
Условие задания такое, что бы была многопоточность.
463 2108478
Есть база данных 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 а используют другие БД?
464 2108490
>>108478
Ну мне кажется логично, что второй метод быстрее. В первом он фактически проверяет соответствие всем трём условиям сразу, а во втором, если первое не подходит, то он второе уже не проверяет, например.
465 2109269
Как можно проверить успешность логина в postgresql.

Нужен какой-то запрос в БД, который выполнится даже если он запущен из под пользователя, у которого вообще ни каких прав в базе нет.
466 2109375
>>109269
БД сама напишет, если какая-то ошибка.
Можешь еще попробовать select 1;
изображение.png2 Кб, 295x182
467 2109487
>>109375
Мой говнокод работает через Qt и QSqlQuery.
Грубо говоря, процесс ввода логина пароля - это просто их запись в оперативную память компьютера.
А дальше прога в работе либо выдаёт ошибки (если ты не залогинен, либо нет доступа), либо работает нормально.

Мне надо сделать какой-то запрос, чтобы после клика по кнопочке "Войти" он писал - удачно я вошёл или нет.

А для этого нужно отправить какой-нибудь запрос в БД. Но городить костыли в виде if-ов, в которых проверяется доступ хотя бы к одной базе - вообще не хочется
468 2109574
>>109487

>костыли в виде if-ов


Это и есть программирование, разве что исключения попробуй, что по сути оно же.
469 2110348
>>062501
Ты еще здеся?

Как аппа инсертит логи в КХ? Апп => (RabbitMQ/вставить нужное) => Bulk-Insert в КХ?
2908621686[1].jpg228 Кб, 1024x682
470 2110479
Допустим есть таблица с иерархической связью:
Id, ParentId, Name...
Как можно в определении таблицы сделать ограничение на ParentId так, чтобы он был либо NULL, либо соответствовал одному из уже имеющихся Id в этой же таблице?
471 2110480
>>104965
PostgreSQL - это open source.
Что мешает посмотреть исходники и разобраться?
Книги - это втор. продукт уже.
изображение.png55 Кб, 1553x815
472 2110481
Сап аноны, у меня есть вопросы по нормальным формам.

Есть схема пиклередй.

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

1) В каком НФ находятся синие таблицы?
2) Чем это черевато?
3) Какие весомые аргументы есть в пользу нормализации и вынесения второго набора нормативов в отдельный справочник.

Мне кажется это BCNF
473 2110483
>>110479
alter tables nodes add foreign key parent_id_fk(parent_id) references nodes(id)
Screenshot20210729-113450.jpg221 Кб, 720x1440
474 2110484
Вакансия на "Начинающий разработчик баз данных" хватит ли знаний со stepik по sql? Я просто из qa и не знаю какие навыки нужны для вката в бд
475 2110489
>>110483
Но это ограничение не пропустит Null для ParentId для корневого элемента.
476 2110491
>>110484
в вакансии литерали написано - нихуя не надо знать бля сблевнул от фаербёрда
477 2111125
Есть одна таблица в postgres, колонок из 20-30, куда будет сапаться относительно много записей, причём около 3/4 колонок в каждой записи будет заполнено нулями. Как оптимизировать подобное в плане экономии места?
478 2111129
>>111125
Зачем же нули, если можно null.
479 2111347
Аноны, помогите пожалуйста. Какой общепринятый вариант массового инсерта с плейсхолдерами в постгресе. Вот мне надо добавить 500 позиций в таблицу за один раз и я начинаю тянуть такую колбасу INSERT INTO albums (album_id, name, artist) VALUES ($1, $2, $3), ($4, $5, $6) и т.д, параллельно пересобирая массив данных для нормального добавления. Я хуйню делаю и есть какой-то другой нормальный способ, или все норм? А если мне нужно в три таблицы паралелльно данные заносить? Это же ебануться можно
480 2111349
>>111347
copy from stdin
481 2111423
>>111349
Я не из базы или файла это тащу, а из апишки сторонней, вот в чем проблема
482 2111445
>>111423
Ну так гони через пайп.
483 2111568
Допустим есть таблица MySQL, в ней записи по датам, можно ли получить на основе неё таблицу содержащую столбцы:
дата, кол-во записей
например
2021-07-20 100
2021-07-21 120
2021-07-23 97
484 2111574
>>111568
Можно
485 2111596
>>111568
rftm "group by" + count
486 2111625
Можно ли в постгресе из функции вернуть таблицу с двумя столбцами с одинаковыми именами? Т.е. у меня в функции есть запрос по типу select foo., bar. from foo join bar on foo.a = bar.b и нужно вернуть
| ID | A | ID | B |
Я не хочу гонять сам запрос от клиента к бд, поэтому решил сделать функцию. И не хочу усложнять маппинг, поэтому хочу столбцы с оригинальными названиями.
487 2111663
>>110489
Так не делай parentId not null o.O
488 2112010
>>111445
А можно ткнуть меня лицом в доку по этому пайпу? Гугл выдает раздел про pipeline, который относится к старой версии постгреса, в новой версии такой страницы нет вообще
489 2112046
Подскажите замену книжке Дейта. На английском в нормальном качестве невозможно найти, а на русском читать не хочу.
490 2112070
>>112046
На орели есть видео где дед сам рассказывает
491 2112969
>>112046
Ёбу дал штоле Дейта читать в 2к22?
492 2112976
>>112969
А что сейчас модно? Видяшка на ютубе от Алёши Писюнкова?
493 2113046
Хелп, я сейчас ебнусь головой с этим 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...
494 2113171
>>112046
Garcia-Molina, Ullman, Widom - Database Systems: The Complete Book.
Дейта не надо читать.
495 2113255
>>113171
Шиз, спок. Щас бы читать алгебраическую теорию тривиальной хуйни, которую можно на пальцах объяснить.
496 2113292
>>113046

SELECT
table1.id,
(select count(*) from table2 t2 where t2.t1_id = t1.id and not t2.free) as number_not_free_seats,
FROM
table1 t1
ORDER BY table1.id
497 2113293
>>113046

>У МЕНЯ ЭТО УЖЕ СДЕЛАНО


P.S. А зачем код показываешь где вообще нет груп бай?
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 1 августа 2021 года.

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

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