Задать вопрос
  • Почему у nokogiri ключ массива #text?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ведь $i['#text'] не канает.

    Почему это? Строка как строка. хэштаблице всё равно, что искать.
    Ответ написан
    Комментировать
  • Как отобразить JSON с кириллицей на PHP?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    JSON_UNESCAPED_UNICODE
    Ответ написан
    6 комментариев
  • Как исключить всё кроме определённых символов в регулярном выражении?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ну так и ограничьте начало и конец совпадения. Спецсимволы ^ и $.
    Ответ написан
    Комментировать
  • 62 градуса - температура для HDD. Сам ПК еще горячее. Что думаете?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если у вас именно HDD - это за пределами рабочего диапазона.
    knowledge.seagate.com/articles/en_US/FAQ/193771en
    По другим сходу не нашёл, но цифры схожие.

    И очень далеко за пределами оптимального температурного диапазона 35-45С, в котором диски живут статистически дольше всего.
    Ответ написан
    Комментировать
  • Почему type hint ругается на наследника?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Пока нельзя. Наследник должен строго соответствовать контракту родителя.
    https://wiki.php.net/rfc/generics Under Discussion
    Ответ написан
    Комментировать
  • Функция копирования строки БД PostgreSQL, как правильно написать?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    insert into tablename (field1, field2, field3) 
    select field1, field2, 'new values instead field3'
    from tablename
    /*where*/
    Ответ написан
  • Это DDos или ломится вирус?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Это вы DDoS'ите. reply сильно больше входа, плюс если это происходит по 53 порту - классика увеличения мощности UDP флуда через безалаберно настроенные DNS и firewall.

    Перенастройте свой firewall в адекватный режим запрещено всё, что не разрешено явно.
    Ответ написан
    Комментировать
  • Стоит ли делать составные внешние ключи в БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    1. внешние ключи должны быть там и те, чтобы гарантировать ссылочную целостность. Должна быть ссылка сочетанием именно двух параметров - значит должна быть ссылка сочетанием пары параметров. Лучше или хуже сюда не применимо. Два разных fk и один составной имеют различное поведение.
    2. для какой именно СУБД? Postgresql следуя стандарту SQL обязывает ссылаться только на уникальное поле. Mysql отступает и в этом вопросе от стандарта и позволяет проверять неуникальное индексированное поле.
    3. см. coding standart конкретного проекта. Обычно никто не обижается против именования: имя таблицы _ имена полей _fk
    4. можно упереться в предел размера индексируемого поля. У postgresql это 1/3 размера странички памяти = 2730 байт по дефолту, у mysql - зависит от кучи факторов.
    Ответ написан
    Комментировать
  • Как правильно сделать SQL запрос?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Включите в sql_mode режим ONLY_FULL_GROUP_BY и тогда, наконец-то, этот странный mysql перестанет разрешать делать странные вещи с группировкой, отчего получаются не менее странные результаты, зависящие от фазы луны .

    www.sql.ru/forum/687908/faq-vyborka-pervoy-posledn...
    Ответ написан
    Комментировать
  • Как прошить HDD Toshiba?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    имеется новый диск

    Ну и в СЦ его.
    Начал выдавать сюрпризы сразу же - как этот расходник можно для чего-то использовать?
    Ответ написан
    Комментировать
  • Проясните работу RAID 1???

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Система обязана продолжать работать.
    Это единственный смысл строить рейд с резервированием данных - продолжать работу при выпадении оговорённого уровнем рейда диска. Больше никакого смысла делать массив с резервированием нет, это ни в коем случае не бекап.

    raid1 на 4 диска, то есть вам нужна ТАКАЯ избыточность хранения, но при этом вы не проверили поведение контроллера? Это странно.
    Ответ написан
  • Что лучше JOIN или использование нескольких таблиц в запросе?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    mysql> explain select test6.i from test6, test9 where test6.i=test9.i;
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------------------------------------------+
    | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                              |
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------------------------------------------+
    |  1 | SIMPLE      | test6 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    2 |   100.00 | NULL                                               |
    |  1 | SIMPLE      | test9 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    4 |    25.00 | Using where; Using join buffer (Block Nested Loop) |
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------------------------------------------+
    2 rows in set, 1 warning (0,00 sec)
    
    mysql> show warnings;
    +-------+------+-----------------------------------------------------------------------------------------------------------------------------------------+
    | Level | Code | Message                                                                                                                                 |
    +-------+------+-----------------------------------------------------------------------------------------------------------------------------------------+
    | Note  | 1003 | /* select#1 */ select `test`.`test6`.`i` AS `i` from `test`.`test6` join `test`.`test9` where (`test`.`test9`.`i` = `test`.`test6`.`i`) |
    +-------+------+-----------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0,00 sec)
    
    mysql> explain select test6.i from test6 join test9 on test6.i=test9.i;
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------------------------------------------+
    | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                              |
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------------------------------------------+
    |  1 | SIMPLE      | test6 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    2 |   100.00 | NULL                                               |
    |  1 | SIMPLE      | test9 | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    4 |    25.00 | Using where; Using join buffer (Block Nested Loop) |
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------------------------------------------+
    2 rows in set, 1 warning (0,00 sec)
    
    mysql> show warnings;
    +-------+------+-----------------------------------------------------------------------------------------------------------------------------------------+
    | Level | Code | Message                                                                                                                                 |
    +-------+------+-----------------------------------------------------------------------------------------------------------------------------------------+
    | Note  | 1003 | /* select#1 */ select `test`.`test6`.`i` AS `i` from `test`.`test6` join `test`.`test9` where (`test`.`test9`.`i` = `test`.`test6`.`i`) |
    +-------+------+-----------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0,00 sec)

    Как можно заметить, оба стиля переписаны в одно и то же представление.

    Имеет смысл использовать join on по соображениям читаемости человеком, т.к. такой join сразу говорит, по каким полям связаны таблицы, а where органично остаётся для фильтрации.
    Плюс, в случае как у вас со связью по паре одноимённых полей можно написать
    SELECT maker, price FROM Product JOIN PC USING(model)

    Что эквивалентно PC.model = Product.model, но короче и позволяет в дальнейшем ссылаться просто на model - парсер уже знает, что значение поля будет идентично и не будет теряться в догадках, хотели вы получить model из PC или из Product
    Ответ написан
    Комментировать
  • Как в БД подставлять старые значения справочников?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Для начала между работником и учебным заведением связь многие-ко-многим.
    Во-вторых, с чего это для новых работников выбираются только новые значения? Можно быть одновременно новым работником и закончить лет *дцать назад именно бывшее тогда учебное заведение. Выбирать можно из всего списка, либо, что лучше, хранить для учебного заведения год открытия и год закрытия (default null) и выбирать подходящие по годам обучения.
    Если сохраняете ещё и даты обучения - то важно учесть, что учебное заведение может быть закрыто в любой момент между поступлением и выпуском студента. Поступил в одно заведение, выпустился из другого - запросто.

    Если нет особых требований к поиску учебных заведений, то достаточно хранить год закрытия (default null) и ссылку на новую форму после реорганизации, если есть (поэтому тоже default null).
    Для вашего примера будет КГПА например с edu_id = 105, reorg_to_id null и КГПУ со своим edu_id, датой закрытия и reorg_to_id = 105
    Ответ написан
    Комментировать
  • Как обработать коды ошибок PDO?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Переключите PDO::ATTR_ERRMODE в единственный адекватный режим PDO::ERRMODE_EXCEPTION.
    Нормальный поток исполнения - вас не заботят ошибки в SQL, раз метод вернул управление, значит он был выполнен успешно.
    Случилась какая-то ошибка - словили исключение. Если для какой-то конкретной ошибки вам нужна своя реакция - то тогда уже выясняете код именно этой ошибки, смотрите в getCode и реагируете на конкретный код ошибки.
    Ответ написан
    1 комментарий
  • Почему не передается строка в массив $_POST?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Что передаваться-то должно?
    frm_flink - это имя формы. Оно не сабмитится.
    А input у вас не имеет имени. Поэтому тоже не отправляется.
    Ну и до комплекта кнопка тоже не имеет имени. Поэтому тело запроса вообще пустое получается. А из пустого тела запроса что-то кроме пустого массива достать очень сложно.

    И включите отображение ошибок. E_NOTICE есть, а вы его не видите.
    Ответ написан
    Комментировать
  • Как реализовать работу баз данных с разными дисками?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ответ написан
    Комментировать
  • Почему не могу передать данные методом POST?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    $_POST существует всегда. Ну разве только вы сами руками unset сделаете.
    Поэтому проверять на isset($_POST) не имеет смысла.
    Ответ написан
    2 комментария
  • Как преобразовать 1e-06 в 0,000001 в модели Yii?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Числа тождественно равны. Ну, насколько это возможно для by design приблизительного double.

    Если надо пользователю показывать в формате десятичной дроби - то внимание на слово "показывать". Значит это вопрос к вьюхе, а не модели. Штатный number_format, например, можно использовать.
    Ответ написан
    1 комментарий
  • MiniPC с Ubuntu, USB 3.0 работает как USB 2.0, в чем может быть причина?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Тестируя запись поверх NTFS вы тестируете производительность CPU, а не USB или диска.
    Работайте напрямую с блочным устройством - получите скорость блочного устройства.
    dd if=/dev/zero of=/dev/sd? bs=1M count=1024
    (На всякий случай - имеющиеся данные будут перезаписаны)
    Или хотя бы поверх чего-нибудь нативного: ext4, xfs.
    btrfs, помнится, тоже весьма CPU-intensive нагрузка.
    Ответ написан
  • Как можно максимально ускорить выборку с низкой селективностью из таблицы с сотнями миллионов записей?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Какие индексы есть? Структура таблицы?
    explain (analyze, buffers)?

    1. не нужно
    2. см. 1
    3. если вы упираетесь в CPU, а не в диск. Если в диск - сделает только хуже.
    4. сначала выяснить, как ведёт себя имеющаяся табличка. Потом думать. Например, brin по id города. На низкоселективных полях получится внятный компактный индекс.
    5. 200гб вполне себе нормальная база. Даже не астрономически дорого целиком в shared_buffers разместить.
    Ответ написан