Задать вопрос
  • Как проверить существование записи по Foreign key?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    and exists (select 0 from ...)

    В зависимости от объёма и explain'а, может оказаться эффективнее:
    SELECT * FROM `users` join (
    select distinct user_id from items
    ) hasitem on users.id=user_id WHERE `ballance` <= 10 AND `activated` = 1
    Ответ написан
    Комментировать
  • MySql - left join больших таблиц

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Подзапрос зачем?
    SELECT * FROM `Table1` s LEFT JOIN `Table2` t ON s.`id`=t.`id_obj` and `id_user`=7


    И без вывода explain'а такие вопросы не задаются.
    Ответ написан
    1 комментарий
  • Как проверить состояние жёстких дисков?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Классика жанра - MHDD или Victoria.
    Если поверхность чистая - то жить будут столько же, сколько и новые. Т.е. до первого спонтанного сбоя.

    SSD - SATA есть SATA. Биос понятий не имеет, HDD там или SSD. Подключили и работайте. Были бы эти самые SATA-порты в нужном количестве.

    Asus Commando - смысла нет гнаться за SATA3. И у неё SATA2 порты. В наиболее важной нагрузке - рандомный доступ на малой очереди - даже топовые SSD в SATA2 не упираются.
    А если зачем-то хотите красивых цифр линейного чтения, то ищите SATA-контроллер в исполнении как минимум PCI-E x2, иначе в шину PCI-E и упрётесь.
    Ответ написан
    2 комментария
  • RegExp в php. Проверка строки на наличие нужных последовательностей?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    У вас в третьем позитивном тесте c - русская, а я-то думаю, чего тест валится =)

    function checkStr( $sInput ) {
    	$sRegexp = '~^(:?%u00[0-9][0-9a-zA-Z])++$~';
    	return preg_match($sRegexp, $sInput);
    	}
    assert('checkStr("%u003c%u0073%u0063%u0072%u0069%u0070%u0074%u003e")');
    assert('checkStr("%u003c")');
    assert('checkStr("%u0046%u005c")');
    assert('checkStr("asd")==false');
    assert('checkStr("%a003da")==false');
    assert('checkStr("%k41ad")==false');
    assert('checkStr("Бла бла бла")==false');
    assert('checkStr("%u003c%u0073%u0063%")==false');
    assert('checkStr("%u003c%u0073ASFQ%u0063")==false');
    Ответ написан
    Комментировать
  • Mikrotik, выбор предпочтительного шлюза на основе Address Lists

    Melkij
    @Melkij Автор вопроса
    DBA для вашего PostgreSQL?
    Вот с таким mangle, кажется, работает как хотелось.
    /ip firewall mangle
    add action=mark-connection chain=input comment="mark input gw0" in-interface=\
        bridge-gw0 new-connection-mark=to_astral0 passthrough=no
    add action=mark-connection chain=input comment="mark input gw1" in-interface=\
        bridge-gw1 new-connection-mark=to_astral1 passthrough=no
    add action=mark-routing chain=output connection-mark=to_astral0 \
        new-routing-mark=to_astral0 passthrough=no
    add action=mark-routing chain=output connection-mark=to_astral1 \
        new-routing-mark=to_astral1 passthrough=no
    add action=mark-connection chain=forward connection-mark=no-mark \
        in-interface=bridge-gw0 new-connection-mark=to_astral0 passthrough=no
    add action=mark-connection chain=forward connection-mark=no-mark \
        in-interface=bridge-gw1 new-connection-mark=to_astral1 passthrough=no
    add action=jump chain=prerouting comment="process home connmark" \
        connection-mark=no-mark dst-address-type=!local in-interface=bridge-home \
        jump-target=prerouting_wan
    add action=jump chain=prerouting comment="process dmz connmark" \
        connection-mark=no-mark dst-address-type=!local in-interface=bridge-dmz \
        jump-target=prerouting_wan
    add action=jump chain=prerouting comment="set routing marks from home" \
        connection-mark=!no-mark in-interface=bridge-home jump-target=\
        prerouting_markroute
    add action=jump chain=prerouting comment="set routing marks from dmz" \
        connection-mark=!no-mark in-interface=bridge-dmz jump-target=\
        prerouting_markroute
    add action=mark-connection chain=prerouting_wan comment="use only gw0 list" \
        connection-mark=no-mark new-connection-mark=to_astral0 src-address-list=\
        wan_only_gw0
    add action=mark-connection chain=prerouting_wan comment="use only gw1 list" \
        connection-mark=no-mark new-connection-mark=to_astral1 src-address-list=\
        wan_only_gw1
    add action=mark-connection chain=prerouting_wan comment="use prefer gw0 list" \
        connection-mark=no-mark new-connection-mark=to_astral0 src-address-list=\
        wan_failover_prefer_gw0
    add action=mark-connection chain=prerouting_wan comment="use prefer gw1 list" \
        connection-mark=no-mark new-connection-mark=to_astral1 src-address-list=\
        wan_failover_prefer_gw1
    add action=mark-connection chain=prerouting_wan comment=PCC connection-mark=\
        no-mark new-connection-mark=to_astral0 per-connection-classifier=\
        both-addresses:2/0
    add action=mark-connection chain=prerouting_wan comment=PCC connection-mark=\
        no-mark new-connection-mark=to_astral1 per-connection-classifier=\
        both-addresses:2/1
    add action=mark-routing chain=prerouting_markroute comment=\
        "mark packet to_astral0" connection-mark=to_astral0 new-routing-mark=\
        to_astral0
    add action=mark-routing chain=prerouting_markroute comment=\
        "mark packet to_astral1" connection-mark=to_astral1 new-routing-mark=\
        to_astral1
    Ответ написан
    Комментировать
  • Как реализовать базу данных с 100 000 000 (100 млн.) записей?

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

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Скрипт каким образом запускается?
    Удостоверьтесь в том, что знаете, сколько именно раз он запускается.
    Это можно сделать, например, так:
    file_put_contents('dbupd.txt', date('Y-m-d H:i:s').' run'.PHP_EOL, FILE_APPEND);
    Ответ написан
    Комментировать
  • Быстрый разворот копий веб-серверов — это реально?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Chef и компания.
    Ответ написан
    Комментировать
  • Парсер API Яндекс-погоды не отдает image-v3 (xml, php). Почему?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Уж если вы пишете что-то, то включите хотя бы вывод ошибок.
    PHP вам говорит, что нет такого элемента image, и что константа v3 ему неизвестна. Но вы его не слышите. А это бы ясно сказало вам, в каком направлении рыть. И пришли бы с конкретным вопросом "как обратиться к элементу image-v3?", вместо этого.
    Ответ написан
    Комментировать
  • Получить временные интервалы

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Смысл извращаться с таймштампами, если давно есть штатный datetime?
    php.net/manual/en/class.datetime.php
    $rFrom = new datetime('first day of -6 month midnight');
    $rTo = new datetime('last day of -6 month midnight');
    var_dump($rFrom, $rTo);

    Класс DatePeriod тоже есть.
    Ответ написан
    1 комментарий
  • Как восстановить данные с отоформатированного диска?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Во-первых, не трогайте никак больше оригинал диска на запись.
    Во-вторых, сделайте поблочную копию всего диска и отложите оригинал в сторонку, работайте только с копией.
    Теперь в гугл (да и тут поищите, вопросы точно возникали такие) за разным софтом по восстановлению данных, пробуете на копии данных.

    Если желаемого эффекта нет, а данные всё равно нужны - относите оригинал диска в лабораторию восстановления данных, приготовив донора и достаточно заметную сумму денег.
    Ответ написан
    Комментировать
  • Почему просачиваются локальные IP адреса на внешний интерфейс через NAT в Linux с KVM?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    На правах тычка пальцем в небо, пробовали натить весь трафик?
    /sbin/iptables -t nat -a POSTROUTING –o eth0 -j MASQUERADE
    Ответ написан
    Комментировать
  • Из-за чего большое время выполнения скрипта при поиске в MySql с использованием LIKE и ORDER?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    или укажите на явные ошибки

    Вот здесь:
    catalogProduct.list like '%|1|%'

    Толпа идентификаторов, разделённых | ?
    Это явная ошибка. Full scan быстрым бывает в одном случае - таблица очень мелкая, буквально пара записей.

    Вынесите эти идентификаторы в отдельную нормальную таблицу-связку.

    Мелкая ошибка - зачем left join, если требуете join? catalogProduct.list по вашему where не может быть null'ом.
    Ответ написан
    Комментировать
  • Как при каскадном подключении роутеров настроить маршрутизацию?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Я не сетевик и затруднюсь сказать, как это сделать верно, но что тут происходит:
    Для конкретики, 172.17.2.5 хочет послать пакет на 192.168.0.8. Это не его сеть, поэтому запрос уходит на микротик. Микротик по таблице маршрутизации посылает пакет на 172.17.2.117.
    Далее:
    Или tp-link дропает пакет нафиг из соображений безопасности - и надо разбираться с этим.
    Или tp-link спокойно пропускает пакет, где на него отвечает 192.168.0.8. Поскольку отправитель 172.17.2.5 не в его сети - ответ уходит вновь на tp-link. Там NATится по штатному правилу натить всё для WAN'а и уходит на 172.17.2.5. А 172.17.2.5 в итоге очень удивляется, что это за пакет от 172.17.2.117, он таких не ждёт - и выкидывает его. (в этом случае, видимо, надо поставить исключение для правила NAT'а)
    tcpdump на узлах скажет точно, кто куда доходит.
    Ответ написан
  • Почему долго отрабатывает функция session_start() в PHP при третьем и последующем одновременном запросе?

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

    Как иначе вы сможете обеспечить простоту и непротиворечивость данных?
    Ответ написан
    Комментировать
  • Какова эффективность сортировки и фильтрафии по JOIN полям в MySQL / MariaDB?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Предельный случай - второй запрос и индекс по pubslished & user_id & time - будет быстрее из-за отсутствия необходимости как фильтрации, так и сортировки данных.

    Если что-то сложнее и, например, range ограничения - то первый запрос будет в конечном итоге быстрее. Ведь вам всё равно тянуть эти записи придётся, но уже отдельным запросом, потом джойнить на приложении.
    И поскольку вопрос о типах джойнов выдаёт ваш невысокий уровень в SQL - не заморачивайтесь, вам эта спичечная разница ни к чему.
    Ответ написан
    Комментировать
  • Почему появляется ошибка при использовании функции preg_replace_callback()?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    0) private метод допустим при вызове callback'а из метода этого же класса.
    1) Допустимый синтаксис описания callback'ов: http://us2.php.net/manual/en/language.types.callable.php Таким образом начиная с PHP5.2.3 ваш пример верен.
    Попробуйте этот пример в своём окружении:
    class foo {
    	private static function minifyJS($fooo) {
    		echo 'called '.__METHOD__;
    		return '';
    		}
    
    	public static function test() {
    		$start_buffer = "<script>foooo</script>";
    		$start_buffer = preg_replace_callback(
    			'/<\s*script(?![^>]*\.js)[^>]*>(.*?)<\/script>/s',
    			"self::minifyJS",
    			$start_buffer
    		);
    
    		}
    	}
    foo::test();

    Ожидаемый вывод: called foo::minifyJS
    Ответ написан
    1 комментарий
  • Почему Хабр несколько раз в день спрашивает капчу?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Чип и дейл что-то мутят…
    Вот ещё вчерашнее: habrahabr.ru/qa/49530/
    Ответ написан
    Комментировать
  • Как правильно делать Hot Backups?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Что по этому поводу думает мануал:
    www.postgresql.org/docs/current/static/continuous-...
    Some file system backup tools emit warnings or errors if the files they are trying to copy change while the copy proceeds. When taking a base backup of an active database, this situation is normal and not an error. However, you need to ensure that you can distinguish complaints of this sort from real errors. For example, some versions of rsync return a separate exit code for «vanished source files», and you can write a driver script to accept this exit code as a non-error case. Also, some versions of GNU tar return an error code indistinguishable from a fatal error if a file was truncated while tar was copying it. Fortunately, GNU tar versions 1.16 and later exit with 1 if a file was changed during the backup, and 2 for other errors. With GNU tar version 1.23 and later, you can use the warning options --warning=no-file-changed --warning=no-file-removed to hide the related warning messages.



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

    Update:
    За прошедшие года с момента этого ответа я успешно переквалифицировался в postgresql DBA. И могу сказать, что корректен ответ vyegorov. Используйте штатный pg_basebackup с указанием --xlog (для 9.1 + внимание на предупреждение в мануале) или --xlog-method=stream для более новых.

    А вот что-либо "чинить" через pg_resetxlog настоятельно не рекомендую. В итоге вы получите непонятно что вместо согласованного состояния базы. Так как именно по xlog база приходит в согласованное транзакциионное состояние при старте.
    Ответ написан
    1 комментарий
  • PHP_INT_MAX в windows_x64 php_x64 5.5

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Я вот такое нарыл: stackoverflow.com/questions/864058/how-to-have-64-bit-integer-on-php
    Т.е. фича винды, long int — 4 байта и на 32 и на 64-битных архитектурах, а под Linux — 4 и 8, соответственно.
    Ответ написан
    1 комментарий