Задать вопрос
  • Как перевести Роутер с китайской сборкой OpenWRT в режим TFTPd?

    Melkij
    @Melkij
    Дмитрий, да. И что?
    Знаете другой способ достучаться до загрузчика - сообщите об этом проекту.
  • Как перевести Роутер с китайской сборкой OpenWRT в режим TFTPd?

    Melkij
    @Melkij
    Речь о последовательном порте с TTL напряжениями - 5В или на роутерах чаще 3.3В
    https://openwrt.org/docs/techref/hardware/port.serial
    То есть COM порт с конвертером напряжений (вроде известных MAX232 микросхем) либо чаще покупной USB-TTL адаптер распознаваемый в ОС как последовательный порт.
  • Генерировать уникальное значение?

    Melkij
    @Melkij
    Если я не промахнулся в расчётах, то 1млрд bigint - табличка размером порядка 30гб. Плюс pk где-то в половину этого размера.
    Работать предварительно созданная табличка будет, работать будет хорошо если правильно реализовать поиск следующего значения даже на хорошем уровне concurrency. Только может быть немного жаль 50гб.

    А если подходить объективно к задаче и потому рассчитывать на малое число коллизий:
    with recursive s as (select (random() * 1e9)::bigint as n, 0 nested union all select (random() * 1e9)::bigint, nested+1 from s where nested < 1e6) select n from s where not exists (select from tablename where tablename.serialNumber = s.n) limit 1;


    Уникальное ограничение по serialNumber всё равно нужно.
  • Генерировать уникальное значение?

    Melkij
    @Melkij
    Странно. История изменений говорит что вопрос не менялся. Значит это я прохлопал уточнение в постскриптум.
    serialNumber именно serial, последовательный.
  • Как задержать SELECT во время INSERT при работе с моделями в Laravel?

    Melkij
    @Melkij
    Действия в транзакции.
    Термин concurrency control. Сейчас у вас есть два потока, выполняющих операцию чтения и по результатам этого чтения осуществляющие некоторую запись. С точки зрения СУБД эти два ваших процесса совершенно никак не мешают друг другу. А вот с вашей точки зрения конфликт конкурентного доступа там есть. Значит вам необходимо каким-либо образом добавить конфликт чтобы СУБД сериализовала транзакции нужным вам образом. Тройку способов я упомянул, lock table в принципе тоже можно, но лучше бы без этого.
  • Запрос с функцией COUNT с помесячный разбивкой?

    Melkij
    @Melkij
    crosstab - из штатного extension, верно.
    filter не есть функция. Это стандартный фильтр для агрегатных функций, существует как дополнительная часть начиная с далёкого SQL:2003. https://modern-sql.com/feature/filter
  • Как дать пользователю возможность перезапустить сервис postgresql?

    Melkij
    @Melkij
    initdb в качестве имени пользователя базы берёт имя текущего пользователя системы если не переопределено параметром -U
    Так если я от пользователя melkij сделаю initdb - то будет создана учётка melkij. А вот имена дефолтных БД зафиксированы.
    Поэтому psql --port ??? postgres
  • Как сделать кнопку show more from database?

    Melkij
    @Melkij
    vasiiil, для известных мне баз это будет всегда медленнее даже чем через offset.
  • Как сделать кнопку show more from database?

    Melkij
    @Melkij
    FanatPHP, в вопросе недвусмысленно именно такая сортировка и указана.
    Ну а если сортировка по другому признаку - то суть так же самая. Делается детерминированная сортировка, запоминается последний показанный элемент и запрашиваем следующую группу после него.
  • Как не добавлять одинаковые значения в БД + проверять одно поле?

    Melkij
    @Melkij
    Не пойму, то ли вы вопрос сформулировали непонятно, то ли действительно ответ прямо в вопросе и привели.
  • Как очистить таблицу?

    Melkij
    @Melkij
    truncate в pg_stat_activity тоже найдите. Тогда уже можно будет понимать кто кого заблокировал. Ну и другие транзакции в том числе только читающие значение имеют. truncate нужен эксклюзивный лок.
  • Почему пухнет WAL каталог?

    Melkij
    @Melkij
    я так понимаю checkpoint должен вырезать все wal до pg_last_wal_replay_lsn

    нет, категоричное нет.
    Нельзя удалять любые WAL за время с прошлого чекпойнта. (и за два чекпойнта если говорить о postgresql < 10.0)
    Потому что так REDO recovery работает. Делается чекпойнт - то есть все изменённые блоки гарантированно скидываются на диск. При старте считаем что база в позиции последнего известного чекпойнта и накатываем все WAL записанные с того момента. При том, позицию для рестарта может писать только мастер.

    pg_last_wal_replay_lsn - это где replay в этот момент. Никакого отношения к чекпойнтам не имеет. Вообще.

    Если не справляется процесс восстановления startup - у вас отстаёт pg_last_xact_replay_timestamp и появляется заметная разница между pg_last_wal_receive_lsn и pg_last_wal_replay_lsn.
    В этом случае смотреть надо на утилизацию дисков. На быстрых дисках можно упереться в CPU, startup однопоточный.

    А checkpointer - это другой процесс. По большому счёту со startup не связанный.

    2019-06-26 09:46:35 MSK < > %LOG: 00000: restartpoint starting: xlog
    2019-06-26 09:51:25 MSK < > %LOG: 00000: restartpoint complete: wrote 670602 buffers (5.3%); 0 WAL file(s) added, 441 removed, 0 recycled; write=269.418 s, sync=0.421 s, total=289.467 s; sync files=199, longest=0.122 s, average=0.002 s; distance=4590361 kB, estimate=8031162 kB

    4:50 работали (289.467), 7гб wal по итогам этого restartpoint удалено. Выглядит вполне.
    Какой max_wal_size? Когда и чего сколько делают другие чекпойнты?
  • Почему пухнет WAL каталог?

    Melkij
    @Melkij
    checkpointer в списке процессов остаётся?
    log_checkpoints можно включить на живую через sighup.

    controlfile - важная штука, в которой как раз пишется когда был последний checkpoint и откуда надо стартовать базу. Его пишет только мастербаза, реплика может делать checkpoint, но не может обновлять controlfile. Поэтому даже если перед рестартом реплики сделать checkpoint на реплике (но не на мастере) - реплика будет стартовать с позиции последнего чекпойнта на мастере.
  • Почему пухнет WAL каталог?

    Melkij
    @Melkij
    реплика перестаёт проигрывать wal != реплика делает restartpoint
    Включите log_checkpoints и смотрите лог.

    Реплика не обязана делать checkpoint по указанию мастера. Может делать по своему усмотрению от max_wal_size и checkpoint_timeout, но не может обновлять controlfile. Если у вас впритык места под wal и неравномерная по записи нагрузка - не делайте так или крутите на реплике чекпойнтер в более частую работу.
  • Ошибка при вызове метода getImportedKeys?

    Melkij
    @Melkij
    psql -E
    \d table_name

    увидите все запросы, которые psql выполнил для выполнения команды.
    SELECT conname, conrelid::pg_catalog.regclass,
      pg_catalog.pg_get_constraintdef(c.oid, true) as condef
    FROM pg_catalog.pg_constraint c
    WHERE c.confrelid = '26291' AND c.contype = 'f' ORDER BY 1;

    26291 - oid таблицы, можно заменить на c.confrelid = 'table_name'::regclass AND ...

    Или можно в https://www.postgresql.org/docs/current/informatio... поискать. Оно более стандартное и реже меняется между релизами, хоть и менее подробное.
  • Почему не работает mysqli_stmt_send_long_data?

    Melkij
    @Melkij
    Не понимаю, вам что, в третий раз на #83958 сослаться? Там есть цитата с исходника сервера даже.

    Зачем передавать частями - чтобы не грузить всё в память клиента.
  • Почему не работает mysqli_stmt_send_long_data?

    Melkij
    @Melkij
    mysqli_stmt_send_long_data всего лишь обёртка над mysql_stmt_send_long_data. Далее читаем про эту функцию:
    The max_allowed_packet system variable controls the maximum size of parameter values that can be sent with mysql_stmt_send_long_data().

    плюс not a bug #83958. По-моему всё очевидно. Это not a bug с точки зрения mysql.
  • Почему у PostgreSQL и MySQL точность даты только до микросекунд?

    Melkij
    @Melkij
    Вопрос "зачем это надо" на самом деле и является ответом. Почему вы не требуете от оракла хранение пикосекунд?

    Почему вы смотрите только минимальную дискретность? Посмотрите ещё минимальные и максимальные значения, а так же требуемые для этого размеры структуры данных. Это всё имеет свою цену. Вам необходимо место для хранения (maxvalue - minvalue)/дискретность. Чем меньше дискретность - тем вам нужно больше ресурсов для хранения, чтения/записи и обработки. Это вполне очевидно.

    В оракле timestamp - 11 или 13 байт.
    В postgresql - 8 байт.
    mysql - 4 байта + до 3 байт на хранение долей секунды (вы по "timestamp 4 байта" уже догадались о проблеме 2038?)
    Итого в сырой ёмкости записанных данных один и тот же набор данных займёт в оракле в 1,5 раза больше места чем в postgresql.
    Действительно надо сделать одинаково плохо всем увеличив размер данных? А если мы работаем с астрономами и им этот крохотный диапазон с 4713 BC по 294276 AD бесполезен полностью? Увеличим и эти даты тоже? Ну и пусть каждый таймштамп будет в килобайт размером, зато его же хватит всем.
  • Почему нет подключения к созданному серверу?

    Melkij
    @Melkij
    Сергей Горностаев, на ошибку hba и сообщение об ошибке было бы про hba. И не предлагали бы проверить, запущена ли база.
    А Connection refused - отказ операционной системы открыть TCP соединение. firewall вернул reject или никто такой порт не слушает (т.е. база не запущена).