Задать вопрос
  • Как сделать кнопку 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 или никто такой порт не слушает (т.е. база не запущена).
  • Как создать индекс в postgresql для view?

    Melkij
    @Melkij
    Ещё раз: в view данных нет. View не хранит ни байта пользовательских данных.
    Когда вы обращаетесь к view - синтаксическое дерево запроса в view подставляется вместо имени view, затем этот большой запрос оптимизируется как будто вы view вообще не использовали, а написали этот большой запрос сами. Поэтому в view всегда актуальный снимок MVCC видимости, но индексы навесить невозможно.

    Данные хранит CREATE MATERIALIZED VIEW. Данные ранит, поэтому добавить поддержку индексов было возможно. Но данные в нём на момент создания либо последнего refresh.
  • Как быстрее записать в базу PosgresQl?

    Melkij
    @Melkij
    insert into ... values (...),... on conflict ... do update set field1 = excluded.field1
    https://www.postgresql.org/docs/current/sql-insert.html
    Если вы на 9.4 или вовсе на EOL чём-то - обновляйтесь до поддерживаемых версий. Последняя версия postgresql не умеющая on conflict (т.е. 9.4) снимается с поддержки чуть больше чем через полгода.
  • Что это значит: $obj->{$b='dd'}?

    Melkij
    @Melkij
    Ну почему же странный?

    Потому что не общепринятый, очевидно вызывает дополнительные вопросы у читающего - иначе этого вопроса бы не было.

    но он переменную $b в данном случае, никак не использует

    Однако она объявляется либо изменяет своё значение.
    Поэтому отдельно взятый $obj->dd не эквивалент.

    $b = 'dd';
    $obj->dd;

    или
    $b = 'dd';
    $obj->$b;

    Здесь эквивалентны. К первой записи вопросов меньше.

    Ну а если желаете придраться - давайте спросим напрямую у PHP.
    melkij@melkij:~$ php -d opcache.enable_cli=on -d opcache.opt_debug_level=0x10000 /tmp/op.php 
    
    $_main: ; (lines=8, args=0, vars=2, tmps=6)
        ; (before optimizer)
        ; /tmp/op.php:1-7
    L0 (2):     NOP
    L1 (5):     V3 = NEW 0 string("a")
    L2 (5):     DO_FCALL
    L3 (5):     ASSIGN CV0($obj) V3
    L4 (6):     V6 = ASSIGN CV1($b) string("dd")
    L5 (6):     T7 = FETCH_OBJ_R CV0($obj) V6
    L6 (6):     FREE T7
    L7 (7):     RETURN int(1)
    PHP Notice:  Undefined property: a::$dd in /tmp/op.php on line 6
    melkij@melkij:~$ php -d opcache.enable_cli=on -d opcache.opt_debug_level=0x20000 /tmp/op.php 
    
    $_main: ; (lines=7, args=0, vars=2, tmps=2)
        ; (after optimizer)
        ; /tmp/op.php:1-7
    L0 (5):     V2 = NEW 0 string("a")
    L1 (5):     DO_FCALL
    L2 (5):     ASSIGN CV0($obj) V2
    L3 (6):     V3 = ASSIGN CV1($b) string("dd")
    L4 (6):     T2 = FETCH_OBJ_R CV0($obj) string("dd")
    L5 (6):     FREE T2
    L6 (7):     RETURN int(1)
    PHP Notice:  Undefined property: a::$dd in /tmp/op.php on line 6

    PHP 7.3.4. До оптимизации ядром Zend видно обращение через переменную $obj->$b; После, и то что PHP передаёт на исполнение - константная строка $obj->dd;
    Оба варианта верны.
  • Как посмотреть соотношение каталогов и баз в PgSQL?

    Melkij
    @Melkij
    Так последняя фраза отвечает на этот вопрос.
    Ну а если подробнее, то: www.interdb.jp/pg/pgsql01.html
  • Почему не работает scout:import?

    Melkij
    @Melkij
    Значит нет такой таблицы. Проверьте где она. Обратите внимание, что запись "okved_h_section" - регистрозависимая.
  • RAID10: Как ремапить софтварный RAID10, если "вылетел" один из дисков? Как расчитать скорость ремапа RAID10?

    Melkij
    @Melkij
    да, делаете разметку на диске какую надо и добавляете в массив. Для raid1 часто это системный массив, так что плюс не забыть поставить загрузчик.

    Поскольку вы сначала испортили данные на диске (не сам диск) и только потом его удалили с массива - возможно есть варианты. Код реализации в ядре не смотрел. Возможно это ошибка пилотирования и ядро верит что рут знает что делает.
    Если сначала испортить диск - то подсистема позаботится о сохранности данных.
  • Какой максимальный объем хранимых файлов или одновременно выгружающих файл пользователей должно быть чтобы повалить БД PostgreSQL?

    Melkij
    @Melkij
    когда вы уже допишете этот дипломный проект? Или что там это ещё такое не соответствующее вашей квалификации.
  • Почему не используется GIN индекс в Postgresql с установкой веса?

    Melkij
    @Melkij
    просто для себя

    https://github.com/postgres/postgres/blob/REL_11_S...
    For backwards-compatibility reasons, we allow an expression that's just a function call to be written without parens.

    То есть для gin(func(column)) намеренно сделано исключение чтобы не ломать более старый код. Если бы это была новая фича - то тоже требовали бы явные скобки.