Задать вопрос
  • Странные сообщения при выполнении команды update-grub. Цел ли HDD\SSD?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Какие файловые системы-то на разделах в действительности? Или, может там LVM или ещё чего интересно?

    Почти наверняка у вас стоит пакет os-prober. Он вызывается при update-grub и ищет по всем блочным устройствам загрузчики других операционных систем. Для этого дёргает драйвера разных файловых систем, а те, в свою очередь, жалуются в dmesg, что не видят на этом разделе такой файловой системы.
    Ответ написан
  • Как обновить пакет postgresql в debian?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Стоит, и однозначно стоит, если вы с ним работаете. postgresql весьма активно развивается. Один jsonb в 9.4 чего стоит.

    9.1 в репозиториях - это получается у вас wheezy? https://packages.debian.org/search?keywords=postgr...
    Можете поставить просто из backports
    А можете с официального репозитория postgresql: https://www.postgresql.org/download/linux/debian/ Там вижу даже ещё не вышедший 9.6, не говоря уже про 9.5.
    Ответ написан
    Комментировать
  • Как пользоваться SET в Mysql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Суть типа данных set - 64-битная битовая маска со встроенным человечным именованием значений.
    Желаемый фильтр делается условием:
    where FIND_IN_SET('доставка2', delivery_type) or FIND_IN_SET('доставка3', delivery_type)
    Ответ написан
    Комментировать
  • Как подготовить запрос SQL в PHP?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    - $sql = 'SELECT * FROM items WHERE item_name LIKE %:query%';
    + $sql = 'SELECT * FROM items WHERE item_name LIKE :query';
    - $result->bindParam(':query', $query, PDO::PARAM_STR);
    + $result->bindParam(':query', '%'.$query.'%', PDO::PARAM_STR);

    И проверьте свой PDO::ATTR_ERRMODE. Должен быть PDO::ERRMODE_EXCEPTION
    Ответ написан
  • Сайт открывается, но не пингуется. В чем может быть проблема?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    На машине запрещён ICMP трафик весь или конкретно echo-request
    Ответ написан
    4 комментария
  • Как организовать выборку из таблицы MySQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    По разному можно поизвращаться. Например,
    select /**/ from tablename join (
        select id_client, max(next_talk_date) as last_date from tablename where id_client in (/**/) group by id_client
    ) lastdate using(id_client)
    where id_client in (/**/) and next_talk_date >= CURRENT_DATE and (next_talk_date = last_date or next_talk_date > CURRENT_DATE)

    По индексу id_client & next_talk_date должен бегать внятно.

    Или так:
    select /**/ from tablename t
    where id_client in (/**/) and (
        next_talk_date > CURRENT_DATE or not exists (
            select 1 from tablename n 
            where n.id_client = t.id_client and n.next_talk_date > t.next_talk_date
        )
    )
    Ответ написан
  • Как в postgresql на Ubuntu посмотреть содержимое таблицы с "_" в названии?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    С чего вы взяли, что проблема в символе _ в названии? Хотите сказать, что другие такие же синтаксически некорректные запросы работают?

    Откройте любой материал по SQL и сравните с тем, что вы написали.
    Если разницу не видите где-то в промежутке между словом select и именем таблицы - сходите погулять или поспать или ещё чего поделать постороннего.
    Ответ написан
    1 комментарий
  • Почему медленная выборка в партицированных таблицах Postgresql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Покажите explain analyze. Судя по cost в explain, само выполнение запроса корректно.

    Рабочая версия - время жрет сам планировщик. 7к партиций - это очень много. Об этом есть даже заметка в мануале (о чём там только нет заметок, но попробуй их заметь)
    All constraints on all partitions of the master table are examined during constraint exclusion, so large numbers of partitions are likely to increase query planning time considerably. Partitioning using these techniques will work well with up to perhaps a hundred partitions; don't try to use many thousands of partitions.

    https://www.postgresql.org/docs/9.4/static/ddl-par...

    У postgresql партицирование сделано довольно странно и, вообще-то говоря, не предназначенными для этого средствами. Если у вас достаточно большая таблица, чтобы почувствовать бонусы от партицирования, то лучше ограничьтесь парой десятков разделов. Вот ещё статья тематическая есть: https://habrahabr.ru/post/273933/
    Ответ написан
  • Как безопасно дописать в базу?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    update tablename set fieldname = concat('prepend', fieldname) where /**/;
    Ответ написан
    Комментировать
  • Как укоротить запрос mysql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Никогда не смешивайте OR и AND в одном предложении без выделения своих намерений скобками явно.

    WHERE 
            uid IN (1,2,3,4,5) AND reg IN (1,2,3) AND date_last < SUBDATE(CURRENT_DATE, reg)


    Ну или длинно:
    uid IN (1,2,3,4,5) AND (
            (reg=1 AND date_last < NOW() - INTERVAL 1 DAY)
            OR
            (reg=2 AND date_last < NOW() - INTERVAL 2 DAY)
            OR
            (reg=3 AND date_last < NOW() - INTERVAL 3 DAY)
    )
    Ответ написан
    Комментировать
  • Как найти конфиг mysql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    max_connections

    Где mysql ищет свои конфиги:
    mysql --verbose --help
    Вам нужен фрагмент вывода вроде такого:
    Default options are read from the following files in the given order:
    /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
    Ответ написан
  • Кол-во строк затронутых запросом при постоянном соединении MySQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    MySQL и PDO.
    Если вы только не настраивали специально что-то очень странное, то пул постоянных соединений поддерживается не в режиме statement based, а в режиме session based - соединение выдаётся запросившему его процессу монопольно и пока процесс не отпустит соединение сам (например, завершится), это соединение не будет предоставлено никакому другому процессу. Запросы других процессов через это соединение выполняться не будут, даже если соединение простаивает.

    Что делать с умирающими скриптами - а уверены, что что-то надо делать? mysql архитектурно заточен легко и быстро открывать-закрывать соединения. (в отличии от postgresql того же, в котором без стороннего пулера коннектов жизни можно сказать и нет). Зато нет граблей с случайно зависшими транзакциями.

    php.net/manual/en/features.persistent-connections.php
    Persistent connections were designed to have one-to-one mapping to regular connections. That means that you should always be able to replace persistent connections with non-persistent connections, and it won't change the way your script behaves. It may (and probably will) change the efficiency of the script, but not its behavior!
    Ответ написан
  • Как создать табличную функцию в PostgreSQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Извращенцы какие. Не используйте execute никогда, если без этого можно обойтись.

    https://www.postgresql.org/docs/9.4/static/plpgsql...
    return query select ....

    Можно описать в хранимке, что именно она возвращает:
    CREATE OR REPLACE FUNCTION public.get_full_info_about_passenger(INTEGER)
        RETURNS TABLE(
        id bigint
    )
    AS
    $BODY$
    BEGIN
        RETURN QUERY SELECT p.id FROM public.passengers p;
    END;
    $BODY$
    LANGUAGE plpgsql VOLATILE;

    И просто набор чисел:
    CREATE OR REPLACE FUNCTION public.get_full_info_about_passenger(INTEGER)
        RETURNS setof bigint
    AS
    $BODY$
    BEGIN
        RETURN QUERY SELECT id FROM public.passengers;
    END;
    $BODY$
    LANGUAGE plpgsql VOLATILE;


    Можно возвращать строки таблицы: (удобно, чтобы инкапсулировать какую-то заковыристую логику фильтрации)
    CREATE OR REPLACE FUNCTION public.get_full_info_about_passenger(INTEGER)
        RETURNS setof public.passengers
    AS
    $BODY$
    BEGIN
        RETURN QUERY SELECT * FROM public.passengers;
    END;
    $BODY$
    LANGUAGE plpgsql VOLATILE;


    PS: хинт, который может сэкономить некоторое время: return query не прерывает выполнение кода, после него жизнь есть. И можно использовать в одной хранимке несколько return query, они будут вести себя как union all
    Ответ написан
    4 комментария
  • Как определить допустимый предел размера подключаемого жесткого диска?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Хардварные ограничения: текущий стандарт адресации (2003 года) LBA-48 требует 48-битные абреса блоков, т.е. 2^48 блоков - устройства до 128 ПиБ.

    По софту:
    Старый MBR ограничен в 2,2Тб, есть такое. Размечать диск надо будет в GPT, там 64-битные адреса.
    Debian - это вам не странные windows, а нормальный Linux. Никаких бредовых ограничений на использование GPT нет. Хоть системный, хоть загрузочный, хоть с UEFI, хоть с BIOS - ему всё равно. Будет загружаться и работать как ни в чём не бывало.
    Ответ написан
    Комментировать
  • Перевести строку в читабельный вид?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Сериализованный вид, serialize, unserialize
    Ответ написан
    Комментировать
  • Почему Ошибка сегментирования (сделан дамп памяти) при выполнении функции preg_match_all?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    (.|\n|\r)*

    Классика неверного использования регулярок. На достаточном размере строки ожидаемо выжирает стэк рекурсии и падает в сегфолт.

    Нафиг вам тут вообще запоминание сдалось? Не вижу, чтобы дальше по коду вы его использовали. Чуток перепишу:
    /INSERT INTO.+?\)\;/s
    Ответ написан
    1 комментарий
  • Бесшумный персональный компьютер?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Полностью пассив. Возможен, почему нет? Дорого, реально востребован очень редко. Пару хороших вентиляторов ~500rpm расслышать надо очень постараться.

    • Подбираем не сильно греющуюся материнскую плату с определенным сокетом.

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

    • С этим сокетом нужно найти (если такой существует) процессор который не требует активного охлаждения.

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

    • Видеокарта не должна требовать активного охлаждения.

    Интересны, в плане программного обеспечения, более-менее современные требования. Это Microsoft Office. Браузеры, как ни удивляйтесь, но некоторые сайты полноценно не открываются из-за своей большой функциональности.

    Нафига вам видеокарта?

    Самое главное это блок питания

    Да, это самый сложный пункт в первом приближении. Именно пассивных блоков ATX можно пересчитать по пальцам: https://forums.overclockers.ru/viewtopic.php?t=422392
    Зато второй вопрос: зачем ограничиваться ATX? pico-PSU в 150вт хватит для питания системы без видеокарты за глаза. С процессорами со скромным TDP - и сотни ватт.
    И третий момент: если у БП есть кулер, это не значит, что тот вращается. На такой незначительной нагрузке более увесистый список блоков питания работает в пассивном режиме, несмотря на физическое наличие кулера. Список по той же ссылке.

    Не полностью пассив. Расслышать пару качественных кулеров в 500rpm - это надо быть не в городе. Далеко не в городе. Охладить пыл любого десктопного процессора 1-2 кулерами на 500rpm - не проблема.
    Заметно дороже, но в принципе любой конфиг, в том числе с заметным разгоном - собрать СВО. (именно собрать, заводские замкнутые СВО - фигня)

    Ну а дальше играться с любовным треугольником бюджет-производительность-габарит
    Ответ написан
    1 комментарий
  • Как считается key_len в команде EXPLAIN MySQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Показывается используемая длина ключа в байтах.
    INT - 4 байта и есть. И длина int'а всегда 4 байта, та циферка в скобках - ни на что не влияет в плане хранения, используется в некоторых клиентах для выравнивания отображения таблицы и только.
    Ответ написан
    1 комментарий
  • Как отсекать не привязанных по MAC клиентов в DHCP Mikrotik?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    /ip dhcp-server set № address-pool=static-only
    ?
    Ответ написан
    2 комментария
  • Как заменить preg_replace на preg_replace_callback?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    $xml_string = preg_replace_callback("/#\d{1,}\.(([\w\t\d ]){2,}\|outline)/imu", function($match) use($bookmarks) {
        return $bookmarks[ $match[1] ];
    }, $xml_string);
    Ответ написан
    4 комментария