• Как хранить списки в бд?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Вложенные списки организуют классическую связь 1:N (одному блоку данных соответствует несколько записей из списка).
    Если эти строки списка как-то обрабатываются (поиск, фильтрация и пр.), то наиболее разумна схема с 2 таблицами и внешним ключом.
    Если же списки только сохраняются и извлекаются, без вообще какой-либо обработки, то можно использовать предложенную mxelgin схему с хранением всего списка в одном поле TEXT либо JSON в сериализованном виде.
    Ответ написан
    Комментировать
  • Чем отличается маршрутизатор от точки доступа с коммутатором?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В чем отличие между роутером и коммутатором с точкой доступа?

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

    Дополнительный коммутатор просто обеспечивает несколько проводных интерфейсов в получающемся сегменте - потому как штатно на точке доступа всего один RJ-45 разъём.

    Ну а роутер - это синоним слова "маршрутизатор". Правда, в быту так называют SOHO маршрутизаторы с NAT.

    Есть ли смысл переплачивать, если делаешь обычную домашнюю сеть?

    Если в домашней сети уже есть проводной маршрутизатор с NAT (ака роутер), то никакого смысла приобретать ещё один маршрутизатор нет. Достаточно точки доступа. Дополнительный коммутатор нужен только если нехватает проводных портов, т.е. в малой сети на 2-3 проводных клиента вообще достаточно точки доступа без коммутатора.

    А если в домашней сети проводного маршрутизатора с NAT не имеется, то от покупки беспроводного роутера никуда не деться.
    Ответ написан
    Комментировать
  • Как правильно сделать приписку со склонением слов в PostgreSQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT amount || ' ' ||
           CASE WHEN amount % 100 / 10 = 1 THEN 'автомобилей'
                WHEN amount % 10 = 1 THEN 'автомобиль'
                WHEN amount % 10 IN (2,3,4) THEN 'автомобиля'
                ELSE 'автомобилей'
                END
    FROM generate_series(0,600) AS source (amount)

    fiddle
    Ответ написан
    Комментировать
  • На сколько актуальные L3 коммутаторы? Как вы делаете VLAN, на самом Mikrotik или ставит L3 комок, потом соединяете L3 и Mikrotik портом ACCESS?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как вы делите сеть на VLAN если не используете L3?

    Вот сижу и думаю - что за бред? VLAN - чисто L2 штука. Где связь?

    У меня вон стоят коммутаторы L2 (даже не L2+), и они распрекрасно себе умеют VLAN, причём и port-based, и MAC-based. Единственно чего, связанного с VLAN, они не умеют, так это держать несколько IP адресов внутреннего интерфейса в разных VLAN, только один IP, доступный либо из одного указанного VLAN, либо из вообще любого. Они даже GVRP умеют без проблем.
    Ответ написан
  • Как залить большой файл sql в базу?

    @Akina
    Сетевой и системный админ, SQL-программист.
    захожу через putty по SSH и гружу по
    mysql -u****** -p****** ******* < *******.sql

    Напрасно.
    Загрузи CLI, а уж потом в нём грузи дамп командой SOURCE.
    Во-первых, не будет тайм-аута, интерактивно клиент, в отличие от безынтерфейсного, не воспринимается как померший, ибо постоянно льёт в выходной поток. Во-вторых, будешь видеть диагностику загрузки (особенно если запустишь CLI с ключом --tee).
    Ответ написан
    Комментировать
  • 10к строк по базе размером 500кк?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Запрос
    SELECT * FROM base WHERE domain LIKE '%habr%' LIMIT 10000;


    Какой это нахрен поиск "по совпадениям"??? Это, блин, поиск по подстроке!!! причём в любом месте строки.

    С таким шаблоном поиска можете с обычными индексами вообще не трахаться, по причине абсолютной бессмысленности действа. Читайте про GIN, GiST, RUM и прочие виды индексов и поиск с их использованием.
    Ответ написан
    Комментировать
  • Как составить SQL запрос на получение дочерних категорий woocommerce, чьи дочерние категории имеют записи?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Модельное решение:

    SELECT brand.b_id
    FROM brand
    NATURAL LEFT JOIN model 
    NATURAL LEFT JOIN item
    GROUP BY 1
    HAVING NOT SUM(i_id IS NULL)


    fiddle
    Ответ написан
    Комментировать
  • Безопасна ли установки ПО для VDI?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Да безопасно, безопасно - это только клиент.
    Впрочем, безопасно только при условии, что установочный файл взят с сайта производителя, а не получен или скачан хрен знает откуда.

    https://www.vmware.com/go/viewclients (перенаправляет на https://customerconnect.omnissa.com/downloads/info..., который недоступен из России, используйте VPN).

    Можно использовать не нативный, а браузерный клиент. Там контроль за доступом к локальным ресурсам можно вести ещё и средствами браузера.
    Ответ написан
    Комментировать
  • Как исправить ошибки в БД Битрикса?

    @Akina
    Сетевой и системный админ, SQL-программист.
    ALTER TABLE Statement

    Например, для первого сообщения это будет, вероятно,

    ALTER TABLE bitrix_db_name.b_crm_kanban_supervisor 
      MODIFY COLUMN `ENTITY_TYPE_ID` tinyint unsigned NOT NULL;

    На время выполнения остановите и выгрузите все сервисы Битрикса. И не забудьте заменить имя БД на правильное.

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

    SELECT COUNT(*)
    FROM bitrix_db_name.b_crm_kanban_supervisor
    WHERE ENTITY_TYPE_ID < 0;

    и убедиться, что результат его выполнения - ноль. Если же полученное значение - ненулевое, то следует сильно разбираться, как так получилось.

    PS. В теории при обновлении должна запускаться процедура, которая конвертирует данные из старой структуры в новую. Проверьте, что такая существует, и что вы точно её запускали.
    Ответ написан
    Комментировать
  • Как объединить разные таблицы с разными столбцами?

    @Akina
    Сетевой и системный админ, SQL-программист.
    (SELECT DISTINCT name AS zagolovok FROM sotrudniki ORDER BY 1 LIMIT 2147483647)
    UNION ALL
    (SELECT DISTINCT nazvanie FROM transport ORDER BY 1 LIMIT 2147483647)


    Если поля name/nazvaine объявлены как уникальные - убрать DISTINCT.

    fiddle
    Ответ написан
  • Как составить правильный запрос к бд?

    @Akina
    Сетевой и системный админ, SQL-программист.
    ...
    HAVING COUNT(*) > 1
       AND SUM( (name IN ('зеленый', 'красный')) :: INT ) = 1
    Ответ написан
    1 комментарий
  • Можете дать рекомендации и советы по ограничениям компьютеров в школах?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Против программного вандализма - бездисковые рабочие станции и сервер терминалов.

    Против физического вандализма - система видеообзора в классе. Плюс "Правила использования компьютерной техники", подписанные официальными представителем каждого учащегося (родители и пр.) и самими учащимися (если позволяет возраст). С подробным описанием санкций (включая материальные) в случае такого вандализма.

    И при любом инциденте - не стесняться. Досудебная претензия с полным "меню" восстановления, а при невыполнении в срок - в суд. Обычно "достаточно одной таблэтки" (с)
    Ответ написан
    Комментировать
  • Как создать таблицу из двух столбцов с критериями?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Принципиально - например, вот так:
    66a8a9f013465796321206.png
    Границы и константы задать вручную (либо получить формулой).

    Конечно, с одном столбце надо использовать остаток, а в другом - целочисленное деление, но это уже для самостоятельной работы...
    Ответ написан
    Комментировать
  • В чем отличие trunk port от tagged port на коммутаторе eltex, будет ли функционировать между собой tagged и trunk на разных коммутаторах?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В чем отличие trunk port от tagged port

    Trunk - это понятие, относящееся именно к порту. Это порт, предназначенный для магистральной передачи, соединяющий два коммутатора. Как правило, через него передаётся несколько tagged VLAN.

    Tagged - это понятие, относящееся к паре порт-VLAN. Именно конкретный VLAN на конкретном порте может быть либо tagged, либо untagged.

    будет ли функционировать между собой tagged и trunk на разных коммутаторах?

    Опираясь на вышесказанное: tagged VLAN передаётся через trunk port.
    Ответ написан
    4 комментария
  • Какую кодировку выбрать для бд чтобы хранить фото?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Не надо хранить бинарные файлы в БД.

    В дополнение ко всему сказанному - в MySQL извлечение сохранённых бинарных файлов именно в виде файлов, а не массива байтов, тоже занятие нетривиальное. Выполняется по одному, запросом SELECT INTO DUMPFILE, да ещё и отдельно от остальных полей записи.
    Ответ написан
    Комментировать
  • Как выходить в интернет по gateway, который имеет ip адрес в другой подсети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Есть 2 созданных сети на этом dhcp 10.0.0.1-10.0.0.100 и 10.1.1.1-10.1.1.100.

    Это НЕ сети. Это диапазоны выделяемых адресов (scopes).

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

    Gateway имеет ip адрес 10.0.0.1.

    Это чей gateway? Операционной системы, на которой работает DHCP? Или это значение параметра в настройках скопа, отдаваемое сервером клиенту?

    Это gateway куда? Шлюз по умолчанию? Шлюз в подсеть? Что-то ещё?

    Каким образом можно указать для сети 10.1.1.1-100 gateway 10.0.0.1 , чтобы например, контейнеры proxmox, которые будут находиться в этой подсети имели выход в интернет ?

    Самое простое - объединить скопы одной подсетью.
    Соответствующая маска - /23 или шире.
    Ответ написан
    Комментировать
  • Нечетное число в шахматном турнире?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Я считаю, что оптимальным является проведение квалификационного тура. Который отсеет "лишних".

    Применительно к показанному - из 17 участников выбираются случайным образом двое, которые играют между собой квалификацию за право выхода на турнир. После чего остаётся 16 участников, играющих 5 туров на выбывание. Будь участников, скажем, 19, квалификацию играли бы три пары.

    Если же среди участников имеется некоторое количество, подтверждённая квалификация которых достаточна, они могут быть исключены из числа участников квалификации. Например, если заявились 19 игроков, но пятеро из них КМС и лучше, то они сразу проходят в турнир, а три пары участников квалификации выбираются случайным образом из остальных 14 участников.
    Ответ написан
    Комментировать
  • Обновление таблицы в бд данными, которые когда-то были, но теперь отсутствуют - как?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Есть товары, которые прилетают по API, их заношу в бд, но иногда часть товаров отсутствует в API и в бд нужно обнулить остатки.

    Элементарно.

    То, что приходит по API, нужно не пихать сразу в рабочую таблицу, а сохранить во временную таблицу. А потом обновить рабочую таблицу, используя полученные данные как источник данных. Потребуется два запроса - первый обновит записи о товарах, имеющихся в пришедшем списке, и добавит новые (INSERT .. SELECT .. ODKU), второй поставит требуемую пометку в нужном поле (UPDATE .. FROM .. LEFT JOIN .. WHERE .. IS NULL).

    Альтернативный вариант - добавить в таблицу (если не имеется, что было бы весьма странно для описываемой системы) поле штампа времени обновления записи (updated_at). Перед обновлением по данным API зафиксировать время начала процесса (получить запросом с сервера MySQL), после чего вторым запросом поставить соотв. пометку в те записи, где этот штамп времени ранее запомненного.
    Ответ написан
  • Проблема миграции базы данных с mysql 8 на mariaDB 10?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Проблема миграции базы данных с mysql 8 на mariaDB 10?

    Проблемы ОБЯЗАНЫ БЫТЬ. MySQL и MariaDB расфоркнулись достаточно давно, изменения и дополнения в синтаксисе они не синхронизируют, так что неудивительно, что чем дальше, тем меньше они совместимы. И соответственно всё меньше шансов. что дамп одной СУБД беспроблемно натянется на другую.

    Такой перенос надо делать руками.

    1. Выгружаем дамп структуры (без данных) из MySQL.
    2. Экспортируем данные из MySQL-таблиц в CSV.
    3. Правим дамп структуры руками, приводим к требованиям синтаксиса MariaDB.
    4. Загружаем структуру в MariaDB, убеждаемся, что работает. Дропаем.
    5. Делим дамп на 2 части - в одной только таблицы (и другие критично необходимые для создания таблиц объекты), в другой всё остальное (индексы, представления, триггеры-функции и прочая тряхомудия).
    6. Грузим первую часть дампа структуры.
    7. Импортируем данные из CSV в таблицы MariaDB.
    8. Грузим вторую часть дампа структуры.
    Ответ написан
  • Как оконнной функцией вытащить последнее значение для предыдущего года?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Будет что-то вроде
    SELECT *,
           ( SELECT value
             FROM tablename t2
             WHERE t1.year - 1 = t2.year
             ORDER BY created_at DESC LIMIT 1 
             ) AS prev_value
    FROM tablename t1;
    Ответ написан
    2 комментария