Задать вопрос
  • Как возвести в степень в php?

    @devian3000
    Ответ написан
    Комментировать
  • Как сделать запись в mysql с проверкой на уникальность с учётом времени из поля?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Легко решается триггером. Пример:

    - исходная таблица:
    CREATE TABLE users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      username VARCHAR(100),
      created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    );


    - триггер:

    CREATE TRIGGER tr_users_bi
    BEFORE INSERT ON users
    FOR EACH ROW
    BEGIN
      DECLARE allowed_created_at DATETIME;
      DECLARE error_message_text VARCHAR(64);
      SELECT MAX(created_at) + INTERVAL 12 HOUR INTO allowed_created_at
      FROM users
      WHERE username = NEW.username;
      IF NEW.created_at < allowed_created_at THEN
        SET error_message_text = CONCAT('Регистрация возможна не ранее ', allowed_created_at);
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_message_text; 
      END IF;
    END


    DEMO fiddle

    PS. Надеюсь, получение сгенерированного сообщения об ошибке и показ его юзеру не составит проблемы..
    Ответ написан
    Комментировать
  • Как гарантировать последовательную запись данных без пропусков id?

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


    Никак НЕ РЕАЛИЗОВЫВАТЬ.

    Оставь автоинкремент в покое - он обязан обеспечивать только уникальность, и не более. Нужна непрерывная нумерация? Создай для неё ОТДЕЛЬНОЕ поле, и нумеруй программно. Триггеры в помощь.
    Ответ написан
    4 комментария
  • Как гарантировать последовательную запись данных без пропусков id?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Таблицы на основе генераторов или sequences обычно ствавят главной задачей - обеспечить
    уникальность id в первую очередь
    . С эти sequence справляется.

    Гарантировать блокировку или захват sequence они не могут так как Postgres создавался
    как много-пользовательская БД
    . Тоесть много сессий обладают правом в любой момент
    взять из sequence следующее значение
    . Поэтому требование хронологии - это как эксклюзивный
    лок объекта. Слишком жесткое требование. И никому не нужное. Если б так БД работали то
    они теряли бы в производительности и ждали-бы чтоб какая-то главная сессия отпустила таблицу.

    Выход есть - брать ранг записи извне. Тоесть само приложение должно быть поставщиком
    таких номеров. А БД будет просто их вставлять.

    Еще вариант - в уже после загрузки обновить одно полей одной транзакцией как row_number
    сортируя по любому признаку.
    Ответ написан
    6 комментариев
  • Как и где сохранять код проектов?

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

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Потому что в одной из связанных таблиц дважды повторяется условие связи. Уберите группировку и проверьте.
    Ответ написан
    Комментировать
  • Какую ключ-значение БД использовать, чтобы работало быстро и без ошибок?

    Daemon23RUS
    @Daemon23RUS
    Оставаться на Redis и пытаться решить ошибку! Я из опыта могу точно сказать что 3-4 тыс соединений redis держит, и работает очень быстро. И работает месяцами...
    Ответ написан
    3 комментария
  • Какие есть способы отключить историю команд в psql?

    Lorien_Elf
    @Lorien_Elf
    Keep calm and drop database
    -n
    --no-readline
    Do not use Readline for line editing and do not use the command history
    https://www.postgresql.org/docs/current/app-psql.html
    Ответ написан
    2 комментария
  • Как можно получить изменения во VIEW, когда изменяется базовая таблица?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    view не хранит никаких данных. Это просто сохранённое дерево запроса, встраиваемое в обратившийся к этой view запрос.
    Вам нужен триггер на таблице с данными, который будет писать в отдельную аудит таблицу историю изменений. Потом из этой таблицы получайте историю.
    Ответ написан
    Комментировать
  • Seagate Exos имеет смысл для домашнего ПК?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    Вы никогда не угадаете, сколько проживет конкретно ваш диск:
    - Если он из супернадежной серии - он может сдохнуть через месяц.
    - Если он из неудачной серии, где брак за первый год 60% - он может проработать 15 лет.
    - Если вы пинаете системник время от времени - быстрый итог немного предсказуем.
    - Если диск будет работать при температуре 55 градусов и выше - его век тоже не будет долгим.
    - Троян шифровальщик может отправить все ваши данные в прошлое за один вечер.

    Лучше всего исходить из парадигмы, что все жесткие диски одинаково НЕнадежны...
    Ответ написан
    3 комментария
  • Как сделать поиск в многомерном массиве по ключу?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    1. Открываем документацию.
    2. Внимательно читаем.
    3. Видим, что у функции есть третий аргумент, который как раз управляет тем, что будет передано в callback.
    4. ???
    5. Profit.


    Но зачем всё это, если можно написать $arr['clients']['client1']? Для этого ключи в ассоциативном массиве и существуют, чтобы по ним обращаться к элементам.
    Ответ написан
    2 комментария
  • SQL запрос не знаю правильный?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    Проверять, что результат запроса содержит данные о товаре. Если не содержит - показывать пользователю об этом сообщение.
    Выполнение запроса с WHERE id = 'несуществующее значение' не является ошибкой само по себе, это вполне нормальная ситуация, которую нужно просто обрабатывать в коде.
    Ответ написан
    Комментировать
  • Как можно оптимизировать SQL запрос?

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

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

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

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

    Хотя как по мне, следует отделить систему безопасности Постгресса от авторизации в приложении. Мнение по данному вопросу от Everything_is_bad в комментарии - это не сарказм, а весьма правильное замечание.
    Ответ написан
    Комментировать
  • Что у меня за направление и как в нем учиться?

    Если тебя интересует непосредственно разработка всяких проксей, vpn, и прошивок для сетевого оборудования, то это:
    1. Сетевое программирование
    2. Системное программирование
    Ответ написан
    1 комментарий
  • В чем может быть проблема?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Должен вернуть одну строку с id 10 (последняя строка в выборке на скриншоте)
    Кому должен? Программа должна делать только то, что вы в ней написали. Строки по колонке mentions отсортированы, десятая строка выбрана. То, что нет других правил сортировки означает, что строки с одинаковым значением mentions можно выдавать в любом порядке.
    Ответ написан
    Комментировать
  • Как правильно создать БД в одном execute?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Обычно БД создается во время процессов CD/CD через технологии liqubase/flyway.
    Таблицы тоже. В этом есть смысл потому что БД и таблицы это такие долго-живущие объекты
    и кроме того не лежащие в плоскости транзакций. Они - выше транзакций и их надо логически
    отделять от прочего java кода. А в java коде - оставить insert/update/delete.
    Ответ написан
    5 комментариев
  • Какой выбрать протокол для подключения сетевого диска вне локальной сети?

    @rPman
    * http (лучше https но тогда нужен на машину источник файлов а это значит + домен либо самоподписанные сертификаты) с авторизацией
    По этому протоколу можно работать откуда угодно, но с каталогами будет неудобно
    Промежуточный вариант webdav, это надстройка над http, но поддерживается майкрософт вплоть до монтирования в файловую систему и работа из проводника

    * scp (штатный механизм ssh) - самая простая настройка для сервера, наиболее надежный (встроенное шифрование и сжатие трафика), но нужны клиенты с поддержкой scp (все популярные файловые менеджеры умеют, типа far commander или total commander)
    Есть еще sftp, он немного отличается как более продвинутый (под linux есть fuse модуль для монтирования его в каталог), реализация идет штатно с ssh (ну или я привык что такие вещи в linux легко) так же поддерживается популярными клиентами работы с файлами

    * любые инструменты синхронизации, когда вместо доступа к файлам по какому либо протоколу, они копируются и синхронизируются автоматически таким образом что размещены на всех машинах где нужен доступ.
    Собственно все популярные централизованные системы типа dropbox/Google Drive/OneDrive и т.п. работают по этому принципу, но в довесок данные копируются еще и на сервера компании этого инструмента.
    Я рекомендую использовать открытый проект Syncthing - он не копирует файлы ни на какой сервер, и поддерживает любые ОС от windows до android (очень прикольно настраивать синхронизацию через промежуточное устройство типа смартфон, позволяющее синхронизировать файлы между закрытыми сетями)
    Ответ написан
    2 комментария
  • Как разместить календарь в Postgresql?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Для расписаний подходит тип tsrange с GiST-индексом.
    Ответ написан
  • Какая база данных подходит для частых UPDATE и сортировки?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Подходит любая БД. Вопрос в том чем вы готовы пожертвовать ради скорости. Например вы можете хранить данные в backend (hashtable) и сбрасывать их в БД периодически. Эта схема идеально работает. Вам только надо с самим собой и с бизнесом поговорить о гарантиях. Что вы хотите? Чтоб любой вектор {id, data, user_date} сохранялся в ту-же микросекунду или вы можете эти изменения отложить на потом и применить их в БД через 15 минут например в виде
    batch-update.

    Поэтому вопрос оптимизации БД - это вопрос не только технически но и организационный. А запись в Postgress в через длинный сетевой стек да еще и с фиксацией транзакции это такое яростное безкомпромиссное решение
    которое не всегда и нужно.


    Договаривайтесь с ценностью бизнес-информацией и с компромиссами.
    Ответ написан
    Комментировать
  • Почему нельзя/можно писать бизнес-логику в sql?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос из серии "У меня есть своя дурацкая точка зрения, которую я ни сформулировать толком не могу, ни подкрепить никакими доводами. Давайте, переубеждайте меня!"

    Вы просто не поняли статью, которую читали.
    Там говорятся банальные вещи о том, что бизнес-логика не должна завязываться на конкретное хранилище. То есть там было сказано ровно противоположное тому что у вас. Не "БЛ нельзя писать в SQL", а наоборот - в бизнес логике не должно быть SQL. Просто потому что чистый код и разделение ответственности. Сейчас у вас SQL, завтра эластик, а послезавтра микросервис по НТТР. Да, БД, которыми пользуются все три, "осталась та же самая". Способ ходить в неё поменялся.
    Плюс тупо упрощается код, с ним проще работать. БЛ отдельно, БД - отдельно. Именно об этом и говорится в статье.

    Но могу вас утешить. Всё это говорится про более-менее сложные приложения.
    Говнокодить свою домашнюю страничку про котиков, или интернет магазин по продаже мёда с пасеки любимого дядюшки вы можете как угодно, хоть в SQL, хоть в Brainfuck-e.
    Ответ написан
    5 комментариев