Друзья, присоединяйтесь к онлайн-трансляции. Первый доклад начнется в 10.00. При входе не забудьте указать адрес электронной почты, который оставляли при регистрации.
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
🔥10👍8
Media is too big
VIEW IN TELEGRAM
«…и там, и тут передают…»
Брюс Момджян, представитель Core Team разработчиков PostgreSQL записал традиционное обращение к участникам PG BootCamp Russia 2026 Moscow. Публикуем его перевод:
Брюс Момджян, представитель Core Team разработчиков PostgreSQL записал традиционное обращение к участникам PG BootCamp Russia 2026 Moscow. Публикуем его перевод:
Здравствуйте, это Брюс Момджян.
Я рад приветствовать вас на PG BootCamp Russia. Три года назад первый PG BootCamp прошел в Москве, и вот мы снова здесь, с новой потрясающей программой докладов по PostgreSQL. В этом году впервые запланировано целых три трека, что, насколько я знаю, происходит впервые.
Как вы знаете, для специалистов из России сложно выезжать за пределы страны для участия в мероприятиях по PostgreSQL, и также сложно сейчас приезжать в Россию и выступать на конференциях. Поэтому я рад, что такие мероприятия проводятся, и сообщество PostgreSQL в России продолжает расти.
В России очень сильное сообщество разработчиков, вносящих вклад в исходный код PostgreSQL. На следующей неделе я приступаю к написанию примечаний к выпуску PostgreSQL 19, и я уверен, что в ней будет вклад многих выдающихся специалистов из России, поскольку мы продолжаем получать очень важные дополнения от них.
Я просмотрел фотографии с прошлогодней конференции в Екатеринбурге. Очень понравилось. Вспомнил множество мероприятий, которые я посещал в России, жаль, конечно, что не смогу присутствовать лично. Что же, наберемся терпения, и будем надеяться, что однажды сможем снова встретиться. А сейчас порадуемся предстоящей конференции.
Хотя я не могу приехать в Россию, я буду участвовать в PGDay Armenia 30 апреля, которая находится не так уж далеко от России.
В общем, работа в регионе продолжается. Еще раз хочу поблагодарить организаторов за то, что сделали это мероприятие возможным. Уверен, вы плодотворно проведете время!
👍16🔥14❤2🤷♂1
Андрей Бородин и хроники PostgreSQL в облаке
Завершился первый доклад PG BootCamp 2026 Moscow. Андрей Бородин рассказал про то, что сделано хорошо:
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
Завершился первый доклад PG BootCamp 2026 Moscow. Андрей Бородин рассказал про то, что сделано хорошо:
• Архив WAL прекрасно решает задачу путешествия по данным в прошлое, как в облаках, так и для on-premise инсталляций. Идея разделений историй по Timeline отличает Postgres от MySQL или MongoDB и упрощает понимание изменений, которые были записаны высокодоступным кластером.
• Вместе с тем не хватает множества функций. Разработчики и админы больше всего скучают по flashback запросам в прошлое, удалённым во времена Postgres 7.
• Интерфейс архивации довольно старый, не удобный, а главное - последовательный, что влияет на производительность. Но современные системы управления архивом научились с этим справляться.
• Декодирование WAL в логический в разных контикстах - хотелось бы уметь делать это без запуска кластера.
В работе структурные доработки для того как работает archive_mode, предлагается создать новый archive_mode=shared чтобы улучшить архивацию во время failover высокодоступного кластера.
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
🔥13👍7
На PG BootCamp Алена Рыбакина (Яндекс) честно разобрала, работают ли вообще генетические алгоритмы и машинное обучение в оптимизаторах.
Проблема. Соединить 5 таблиц — 120 вариантов. 20 таблиц — 2,4 × 10¹⁸. Полный перебор невозможен. А если в графе запроса есть цикл — задача становится NP-hard. Добавьте сюда ошибки селективности: PostgreSQL думает, что Paris + France встретятся в 0.005% строк, а в реальности — 0.1%. На пяти JOIN-ах ошибка может вырасти в 2000+ раз.
Что пробовали:
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
Проблема. Соединить 5 таблиц — 120 вариантов. 20 таблиц — 2,4 × 10¹⁸. Полный перебор невозможен. А если в графе запроса есть цикл — задача становится NP-hard. Добавьте сюда ошибки селективности: PostgreSQL думает, что Paris + France встретятся в 0.005% строк, а в реальности — 0.1%. На пяти JOIN-ах ошибка может вырасти в 2000+ раз.
Что пробовали:
• Классика. Selinger DP (1979) оптимален, но только до 12 таблиц. IKKBZ быстр, но требует дерева. DPhyp (2008) понимает гиперграфы и строит bushy-планы — именно он в DuckDB и Umbra.
• Рандом. GEQO в PostgreSQL при более 12 таблиц — генетика. Минусы: недетерминизм, игнорирует startup_cost, скрещивание часто бесполезно. SAIO (имитация отжига) в 2010-м был быстрее, но не взлетел из-за грязного кода и ручных настроек.
• ML-эпоха. Neo предсказывает latency через нейросеть (+18% на JOB), но учится на ошибках PG и переобучается часами. Bao подсказывает hints и гарантирует, что не хуже vanilla PG (+38%). SkinnerDB учится прямо во время выполнения и единственный имеет математические гарантии.
Критика. В 2024 году вышла работа, которая показала: ML-методы достигли успеха из-за утечки данных и игнорирования времени инференса. На большом бенчмарке STACK PostgreSQL оказался стабильнее.
Итог. Генетика и ML — не замена классике, а дополнение. Selinger, DPhyp и эвристики работают здесь и сейчас. Обучаемые методы хороши в исследованиях, но в production пока уступают старой школе.
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
🔥18👍10
PostgreSQL на пути к Exadata: как разделить Compute и Storage и не потерять совместимость
На PG BootCamp 2026 Moscow сразу два доклада «Тантор Лабс» сложились в диагноз и рецепт: Вадим Яценко назвал хронические болезни PostgreSQL, а Алексей Копытов показал, как их лечить архитектурой Compute/Storage Separation.
Десятилетиями не решаются фундаментальные проблемы:
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
На PG BootCamp 2026 Moscow сразу два доклада «Тантор Лабс» сложились в диагноз и рецепт: Вадим Яценко назвал хронические болезни PostgreSQL, а Алексей Копытов показал, как их лечить архитектурой Compute/Storage Separation.
Десятилетиями не решаются фундаментальные проблемы:
• Переполнение счетчика транзакций, потеря данных при failover, размножение повреждений через репликацию — всё ещё в работе.
• MVCC, process-per-connection, отсутствие hints и сжатия блоков — либо заброшены, либо живут в расширениях.
• Масштабирование требует полных копий данных на каждой реплике, а шардинг ломает транзакции и JOIN-ы.
Их решение:
Форк PolarDB (Alibaba) и его развитие, Tantor Polar, разделяют вычисления и хранение. Все узлы используют общее блочное устройство (RDMA, NVMe-oF). Реплики не хранят данные, а читают с общего хранилища. Репликация только метаданных (<PageID, LSN>) вместо WAL.
Ключевые доработки:
• PolarFS — распределённая файловая система с переписанным IPC, настоящим fsync() и группировкой POLL-запросов. Запись до 7х быстрее, чтение до 10.9х.
• CSN (Commit Sequence Number) — получение снимка за O(1) вместо сканирования ProcArray. Субтранзакции (SAVEPOINT) больше не убивают производительность.
• WAL Pipeline — конвейерная обработка WAL выделенными потоками, убрана конкуренция за блокировки.
• Shared Server — встроенный пул соединений, хранящий состояние сессии в shared memory. Prepared statements, LISTEN/NOTIFY, advisory locks работают без оверхейда.
• HTAP через ePQ — адаптированный планировщик Greenplum: любой узел становится координатором, аналитика на тех же данных без ETL.
• DataMax для DR — узлы-ретрансляторы с синхронным приёмом WAL (RPO=0) и асинхронной отдачей в другой ЦОД.
Итог:
PostgreSQL обретает экономически эффективное масштабирование, тысячи соединений без деградации, HTAP на одной копии данных и отказоустойчивость уровня enterprise — без переписывания приложений.
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
🔥13
Forwarded from Pangolin Community
Привет с PG BootCamp, где Павел Селезнев выступал с докладом «Временные таблицы для
Postgres. Почему это важно для платформы 1С и что можно улучшить?»
В докладе затронул тему работы с временными таблицами — как и для чего они используются для платформы 1С. Показал статистику использования и обсудил, как можно улучшить работу с ними с точки зрения
кода PostgreSQL.
Запись доклада скоро опубликуем в нашем канале. Следите за новостями 😉
Postgres. Почему это важно для платформы 1С и что можно улучшить?»
В докладе затронул тему работы с временными таблицами — как и для чего они используются для платформы 1С. Показал статистику использования и обсудил, как можно улучшить работу с ними с точки зрения
кода PostgreSQL.
Запись доклада скоро опубликуем в нашем канале. Следите за новостями 😉
🔥9👍7
Forwarded from Tantor Labs
Илья Рожнев и Александр Симонов рассказали, с какой болью столкнулись при масштабировании 1С. Аналитические запросы хочется скинуть на реплики, но PostgreSQL в режиме hot standby запрещает писать во временные таблицы. А 1С без них — как без рук.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤1
Уровни изоляции в PostgreSQL: аномалии, которые можно увидеть своими глазами
Андрей Овчаренко на PG BootCamp 2026 вместо скучной теории устроил live-демонстрацию того, как работают уровни изоляции в реальной PostgreSQL. неповторяющееся чтение, фантомы — всё это было показано в живых psql-сессиях.
Главное:
P.S. Запись live-доклада Андрея, как и всех остальных докладов, будет доступна через пару недель.
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
Андрей Овчаренко на PG BootCamp 2026 вместо скучной теории устроил live-демонстрацию того, как работают уровни изоляции в реальной PostgreSQL. неповторяющееся чтение, фантомы — всё это было показано в живых psql-сессиях.
Главное:
• PostgreSQL не поддерживает Read Uncommitted — этот уровень работает как Read Committed. Так что грязного чтения вы не дождётесь.
• Read Committed (по умолчанию) даёт хороший баланс, но внутри одной транзакции данные могут измениться — классическое неповторяющееся чтение.
• Repeatable Read в PostgreSQL сильнее стандарта: он защищает не только от неповторяющегося чтения, но и от фантомов. Однако остаются другие аномалии.
• Serializable — максимальная изоляция, транзакции выполняются так, будто идут одна за другой. Но плата — скорость работы и возможные ошибки сериализации, которые приложение должно обрабатывать.
На демо было видно, как при Read Committed повторный SELECT возвращает свежие данные закоммиченной транзакции, а Repeatable Read «замораживает» снимок на момент первого запроса.
Вывод: выбирайте уровень под задачу. Для большинства веб-приложений достаточно Read Committed по умолчанию. Если важна консистентность сложных отчётов — берите Repeatable Read. Для финансов — Serializable, но будьте готовы повторять упавшие транзакции.
🌐 ССЫЛКА НА ОНЛАЙН-ТРАНСЛЯЦИЮ
❤7👍3🔥2
Один день, три потока, 25 докладов – и вот она, вся команда героев, благодаря которой этот день пролетел как один миг.
Спасибо нашим спикерам, спасибо каждому, кто пришёл, слушал, спорил, задавал вопросы и делился опытом. Именно вы делаете PG BootCamp Russia живым и настоящим! 🫶🏻
👋🏻 До встречи на следующей конференции PG BootCamp Russia. Мы уже скучаем. Следите за новостями!
Спасибо нашим спикерам, спасибо каждому, кто пришёл, слушал, спорил, задавал вопросы и делился опытом. Именно вы делаете PG BootCamp Russia живым и настоящим! 🫶🏻
👋🏻 До встречи на следующей конференции PG BootCamp Russia. Мы уже скучаем. Следите за новостями!
🔥79❤19👍6🐳1🤝1
Всем привет!
Мы разослали электронные сертификаты участникам PG BootCamp Russia 2026 Moscow. Направили их только тем, кто:
— регистрировался на мероприятие
— отметил, что хочет получить сертификат
— присоединился к онлайн-трансляции
Пожалуйста, проверьте почту (и папку «Спам» на всякий случай). Если сертификат не пришёл — напишите в комментариях, разберёмся 🙌
Мы разослали электронные сертификаты участникам PG BootCamp Russia 2026 Moscow. Направили их только тем, кто:
— регистрировался на мероприятие
— отметил, что хочет получить сертификат
— присоединился к онлайн-трансляции
Пожалуйста, проверьте почту (и папку «Спам» на всякий случай). Если сертификат не пришёл — напишите в комментариях, разберёмся 🙌
🔥21❤13👍5😢3🤓3
PG BootCamp Russia
У нас есть скромная добрая традиция – розыгрыш книги «Высоконагруженные приложения. Программирование, масштабирование, поддержка» за авторством Мартина Клеппмана (в простонародии – «кабанчик») с автографами спикеров PG BootCamp Russia 2026 Moscow. Для участия…
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6🎉1
До розыгрыша «Кабанчика» осталось 3…2…1…
Друзья! Состоялся розыгрыш книги «Высоконагруженные приложения. Программирование, масштабирование, поддержка» за авторством Мартина Клеппмана (в простонародии – «кабанчик») с автографами спикеров PG BootCamp Russia 2026 Moscow.
Победителем стал Vitaly (@Vtitaly)!
Поздравляем. Организаторы свяжутся с вами для уточнения деталей доставки.
Друзья! Состоялся розыгрыш книги «Высоконагруженные приложения. Программирование, масштабирование, поддержка» за авторством Мартина Клеппмана (в простонародии – «кабанчик») с автографами спикеров PG BootCamp Russia 2026 Moscow.
Победителем стал Vitaly (@Vtitaly)!
Поздравляем. Организаторы свяжутся с вами для уточнения деталей доставки.
🔥25🎉20👍9😢2
PG BootCamp Russia 2026 Moscow: как это было
19 марта в Москве прошла пятая, юбилейная конференция PG BootCamp Russia. 563 участника офлайн и более 1300 онлайн — сообщество растет и укрепляется. О том, как это было – читайте на Хабре в репортаже одного из непосредственных участников события..
P.S. Записи всех докладов, а также фотографии с мероприятия появятся в ближайшие недели.
Когда выложим - обязательно сообщим, оставайтесь на связи!
Читать репортаж на Хабре
19 марта в Москве прошла пятая, юбилейная конференция PG BootCamp Russia. 563 участника офлайн и более 1300 онлайн — сообщество растет и укрепляется. О том, как это было – читайте на Хабре в репортаже одного из непосредственных участников события..
P.S. Записи всех докладов, а также фотографии с мероприятия появятся в ближайшие недели.
Когда выложим - обязательно сообщим, оставайтесь на связи!
Читать репортаж на Хабре
Хабр
По следам конференции PG BootСamp Russia 2026, прошедшей 19 марта
Прошла пятая ежегодная конференция PG BootСamp Russia. В этот раз она проводилась в Москве 19 марта 2026 года. 563 оффлайн участника и порядка 1300 онлайн. Первая конференция прошла в 2023 году и...
👍16🔥6❤🔥2
Презентации спикеров PG BootCamp Russia 2026 Moscow
Как и обещали, начинаем публиковать материалы с прошедшей конференции. Уже можно скачать презентации спикеров. Видео пока что загружаются, нужно еще немного подождать.
📑 Скачать презентации (GitHub)
Как и обещали, начинаем публиковать материалы с прошедшей конференции. Уже можно скачать презентации спикеров. Видео пока что загружаются, нужно еще немного подождать.
📑 Скачать презентации (GitHub)
🔥18👍12
Ответы на вопросы спикерам из чата онлайн-трансляции
🔹Вопросы к докладу Станислава Выщепана «Очереди и кэш на Postgres — без Redis, RabbitMQ и Kafka»
❔Вопрос по типам данных. Есть ли инструменты для работы с целыми числами больше 64 разрядов. Т.е. int, который больше, чем 2^64 (ограничение из-за разрядности архитектуры процессора). Речь об индексируемых данных.
❔Сравнение ограничено только RabbitMQ и Kafka. Рассматривали ли Вы позиционирование PgSQL как замену инфраструктуры данными с ESB-решениями? Да/нет, почему, какие преимущества?
🔹Вопрос к докладу Константина Ващенкова «Опыт эксплуатации, проблемы и производительность PostgreSQL на Эльбрус, Baikal-S, Loongson/Иртыш, Repka Pi, x86»
❔Учитывает ли планировщик запросов PostgreSQL какие-то особенности архитектуры "Эльбрус" (например, очень большой набор регистров), или он работает в "эмуляции" x86, и мы теряем потенциал производительности?
🔹Вопрос к докладу Кирилла Боровикова «Highload «из ниоткуда»: когда проблема не в СУБД, а в клиентской архитектуре»
❔В каком приложении ведется логирование процесса разбора проблемы? Чтобы можно было передать ссылку разработчику, который столкнулся с подобной ситуацией.
🔹Вопросы к докладу Станислава Выщепана «Очереди и кэш на Postgres — без Redis, RabbitMQ и Kafka»
❔Вопрос по типам данных. Есть ли инструменты для работы с целыми числами больше 64 разрядов. Т.е. int, который больше, чем 2^64 (ограничение из-за разрядности архитектуры процессора). Речь об индексируемых данных.
Ответ: тип numeric позволяет хранить и индексировать числа со 131 072 десятичными цифрами до точки. Для больших чисел придется отыскать или сделать расширение.
❔Сравнение ограничено только RabbitMQ и Kafka. Рассматривали ли Вы позиционирование PgSQL как замену инфраструктуры данными с ESB-решениями? Да/нет, почему, какие преимущества?
Ответ: ESB — это зачастую сервер приложений, API которого может подстраиваться под целевые системы и преобразовывать данные между форматами разных систем. Реализация такого в Postgres видится не вполне целесообразной.
🔹Вопрос к докладу Константина Ващенкова «Опыт эксплуатации, проблемы и производительность PostgreSQL на Эльбрус, Baikal-S, Loongson/Иртыш, Repka Pi, x86»
❔Учитывает ли планировщик запросов PostgreSQL какие-то особенности архитектуры "Эльбрус" (например, очень большой набор регистров), или он работает в "эмуляции" x86, и мы теряем потенциал производительности?
Ответ: вся инсталляция нативна, без бинарной транасляция, то есть чистый e2k. Потенциал производительности – да, теряем, но для этого существуют доработанные, т.е. не ванильные, версии PostgreSQL.
🔹Вопрос к докладу Кирилла Боровикова «Highload «из ниоткуда»: когда проблема не в СУБД, а в клиентской архитектуре»
❔В каком приложении ведется логирование процесса разбора проблемы? Чтобы можно было передать ссылку разработчику, который столкнулся с подобной ситуацией.
Ответ: Процесс разбора обнаруженной ошибки или инцидента производительности ведется внутри нашего же продукта Saby, который сочетает функции как трекера, так и системы внутреннего документооборота.
❤4🔥3
🔹Вопросы к докладу Алексея Копытова «Разделение Compute и Storage: архитектурный прорыв для PostgreSQL в облаке»
❔Вопрос к слайдам 21/22. Зачем нужно было реализовывать fsync(), если на слайде 21 упоминается, что PolarFS работает в O_DIRECT режиме? Возможно, поэтому fsync() и был no-op?
❔Если HAProxy знает кто мастер, и произошла потеря мастера, переключение на standby, может ли оказаться так, что бывший мастер, не имея связи с HAProxy, будет продолжать думать, что он мастер, и тажке проводить запись?
❔Вопрос к слайдам 21/22. Зачем нужно было реализовывать fsync(), если на слайде 21 упоминается, что PolarFS работает в O_DIRECT режиме? Возможно, поэтому fsync() и был no-op?
Ответ: Tantor Polar, как и PostgreSQL, для обеспечения долговечности данных вызывает сброс буферов на диск через аналог fsync() — в API PolarFS это pfsd_fsync() (и соответствующий вызов в libpfs). Без реальной реализации этого вызова нельзя гарантировать, что после сбоя питания или падения узла записанные данные действительно окажутся на постоянном носителе.
В оригинальной открытой реализации PolarFS вызовы pfsd_fsync() и pfs_fsync() были пустыми операциями (noop): они ничего не делали. Причины в коде не задокументированы. Возможные объяснения - в облачной версии PolarFS поверх PolarStore запись могла считаться «автоматически устойчивой» (например, семантика вроде O_SYNC на уровне хранилища). Для блочного устройства (бэкенд PFS_DEV_DISK), которое мы используем, это не применимо. Или же разработчики могли считать, что раз PolarFS использует только небуферизованный I/O (O_DIRECT), явный fsync() не нужен.
На деле O_DIRECT лишь обходит кэш страниц ОС и гарантирует попадание данных в кэш устройства, а не обязательно на энергонезависимый носитель. Считать запись устойчивой можно только если железо гарантирует защиту от потери питания (PLP), а в общем случае — и тем более в программно-определяемом хранилище — полагаться на это нельзя.
Поэтому в нашей доработанной PolarFS исправлено: при вызове pfsd_fsync() / pfs_fsync() теперь принудительно выполняется сброс кэша записи нижележащего блочного устройства (аналог flush на уровне диска). Поведение включается опцией конфигурации diskdev_flush_enable (по умолчанию включено). Это даёт Tantor Polar корректную гарантию долговечности при использовании PolarFS на произвольном блочном устройстве или кластере хранения.
❔Если HAProxy знает кто мастер, и произошла потеря мастера, переключение на standby, может ли оказаться так, что бывший мастер, не имея связи с HAProxy, будет продолжать думать, что он мастер, и тажке проводить запись?
Ответ: Patroni с DCS (etcd/Consul) – единый источник истины о том, кто сейчас мастер. Эпоха увеличивается при каждом failover. Shared storage с fencing – при переключении новый мастер получает эксклюзивное право на запись в общее хранилище. Даже если на реплике случайно или намеренно выполнить promote, эта операция провалится – реплика не сможет перемонтировать storage в режим RW, так как shared storage уже захвачен действующим мастером. HAProxy в этой схеме отвечает только за маршрутизацию клиентского трафика, но не за предотвращение split-brain – эту работу делают Patroni и shared storage. Так что потеря связи с HAProxy не позволяет старому мастеру навредить данным.
ProxySQL с группой репликации – в нашей архитектуре мы используем ProxySQL, в котором группа репликации допускает только один пишущий узел. Роли узлов периодически проверяются в отдельном потоке мониторнга. Это гарантирует, что даже если какой-то узел по ошибке считает себя мастером, пишущий трафик на него не пойдёт. Таким образом, даже при полной потере связи между компонентами, ни один узел не сможет несанкционированно писать в данные.
🔥4❤1
🔹Вопросы к докладу Александра Никитина «Работа с логами PostgreSQL»
❔Используются в Вашей организации ИИ-агенты для анализа логов?
❔Отдел безопасности очень хочет видеть все изменения в БД, я смог им предложить только log_statements = all. Можно ли как-то этого избежать?
❕Напоминаем: презентации спикеров уже доступны, а видео выступлений мы выложим и оповестим вас в ближайшее время.
❔Используются в Вашей организации ИИ-агенты для анализа логов?
Ответ: Нет, мы не используем ИИ для анализа логов
❔Отдел безопасности очень хочет видеть все изменения в БД, я смог им предложить только log_statements = all. Можно ли как-то этого избежать?
Ответ: Если интересуют изменения, то всё-таки - log_statement=mod должно вам подойти - all будет включать в себя и запросы (SELECT), которые вряд ли будут интересовать безопасников. Возможно, отделу безопасности не хочется видеть абсолютно все изменения, а только изменения на каких-то конкретных таблицах? Ведь объём изменений в БД очень велик и со временем он начнёт превышать размер самой БД. Если можно ограничиться конкретными таблицами, то можно посмотреть в сторону дополнительных расширений типа pgaudit или рассмотреть создание триггеров, на интересующих их таблицах. В любом случае, нужно исходить именно от поставленной задачи.
❕Напоминаем: презентации спикеров уже доступны, а видео выступлений мы выложим и оповестим вас в ближайшее время.
🔥6👍2