Задать вопрос
  • 2020-08-17 15:49:02 Password for user zbx_monitor: psql: fe_sendauth: no password supplied?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    [root@db2 zabbix_agentd.d]# psql -h 127.0.0.1 --username=zbx_monitor postgres
    Пароль пользователя zbx_monitor:

    Запрос пароля видите?
    Если вы пароль не введёте - no password supplied от psql и будет.

    А раз запрос пароля есть - значит trust вы не сделали. reload не скомандовали или ошибка какая синтаксическая в файле - см. логи базы.
    Ответ написан
    2 комментария
  • Как установить идентичное время на сервере и клиенте?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Включить и настроить NTP на единый источник времени.
    Если ОС клиента вам не подконтрольна - то вы не можете рассчитывать на то, что часы на клиенте и сервере совпадают и должны придумывать как с этим жить вашему приложению.
    Ответ написан
  • Ежедневная синхронизация БД PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Раз в сутки содержимое БД - около 10 миллионов записей - полностью заменяется.

    pg_dump, pg_restore и не извращаться сверх необходимого для задачи.
    Ответ написан
    Комментировать
  • Как установить PostgreSQL 11.5 на Ubuntu Server?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Вам не нужна именно 11.5. Ставьте актуальный minor - 11.8 или в четверг это уже будет 11.9.

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

    Minor релизы postgresql содержат только исправления ошибок и безопасности. Искать давно исправленные ошибки не самое полезное что можно придумать.
    Ответ написан
    3 комментария
  • Что можно использовать в SQL-запросе?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Проще
    select _task, 
    count(*) filter(where _status = 'done') as done_cnt,
    count(*) filter(where _status = 'refused') as refused_cnt
    from test
    where _status in ('done', 'refused')
    group by _task;
    Ответ написан
    1 комментарий
  • Почему слишком большой размер данных после добавления данных в базу?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Удаляю значит старые записи в таблицах и php парсю xml файлы и вставляю в таблицы соответствующие.

    Ну и совершенно закономерно получаете двукратный рост как самой таблицы, так и всех индексов. Всё верно.
    Почему? Потому что MVCC. Удаление не удаляет данные, т.к. их может кто-то хотеть ещё прочитать из более старых транзакций, а только отмечает xmax - id транзакции, с которой записи перестают быть видимы. Место занимаемое удалёнными строками будет возможно затем переиспользовать под новые данные после прохода vacuum вручную или автовакуумом.

    Индексы, разумеется, тоже занимают место. И по той же самой причине индексы в варианте delete всей таблицы + insert будут занимать вдвое больше места.

    Когда вы хотите удалить всё из таблицы - вам нужен не delete, а truncate.
    Ответ написан
    1 комментарий
  • Как создать уникальный индекс с условием?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Прямо-таки буквально так и делается

    create unique index on tablename (contractor_id) where is_main;
    Ответ написан
    Комментировать
  • Как в imap_search($inbox, 'FROM"...."'), в FROM задать поиск нескольких отправителей?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В комментарии разобрано: https://www.php.net/manual/en/function.imap-search.php
    imap_search function is not fully compatible with IMAP4. the c-client used as of now supports only IMAP2 and some search criterion will not be available for use such as "OR"

    Никак, то есть.

    Лучше вовсе поищите какую-нибудь другую библиотеку для imap. Эта де факто дохлая. https://news-web.php.net/php.internals/107950
    Ответ написан
    Комментировать
  • Увеличение раздела Linux?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Раздел на диске непрерывен. У вас не может быть раздел 1, затем свап, затем продолжение раздела 1. Выключите и снесите свап, расширьте раздел. Собственно свап можно затем сделать файлом чтобы не извращаться.
    Ответ написан
  • Проблемы после переноса сервиса с одного сервера на другой (yii2)?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    random_bytes и openssl_random_pseudo_bytes и обязаны возвращать бинарный хлам. Они принципиально делают указанное количество байт мусора, в этом и есть их предназначение.

    Аналогично у yii2 так прямым текстом и сказано в доке:
    https://www.yiiframework.com/doc/api/2.0/yii-base-...
    generateRandomKey() public method
    Generates specified number of random bytes.
    Note that output may not be ASCII.
    See also generateRandomString() if you need a string.
    Ответ написан
    2 комментария
  • Postgresql сломалась репликаци знаю причины не знаю как поченить стэндбай?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    скопировать с мастера папку pg_wal с файлами

    Если бы нужный сегмент на primary был - его бы уже давно отдали реплике по запросу walreceiver'а. Значит его там нет.
    Если у вас на какой-то из реплик все необходимые wal всё же есть - да, их можно подложить в pg_wal. База их в своём обычном цикле опроса источников wal увидит. Или переключить primary_conninfo на эту реплику, сама заберёт.

    Которая в свою очередь лочит базу

    basebackup не блокирует базу. Это вообще весьма простая и глупая по своей сути штука.

    Чтобы реплика при отсутствии необходимых WAL догнала primary - вам нужно знание внутренностей PGDATA. Которого у вас нет, что очевидно по вопросу "не станет ли слейв после этого мастером ?". А потому единственным простым и надёжным способом будет сделать pg_basebackup заново.
    Ответ написан
    Комментировать
  • Как работает поиск по комбинированным индексам?

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

    Как решит планировщик в вашей системе - ответит explain. Сколько чего реально стоит в рантайме - ответит explain (analyze,buffers)

    Не обратил внимание на второй тег, это про postgresql было.

    mysql так же умеет, там называется Index Merge. Будет ли использоваться - опять же на усмотрение планировщика.
    Ответ написан
    2 комментария
  • Как проверить правильность запроса после рефакторинга?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    (query 1) except (query 2);
    (query 2) except (query 1);
    Ответ написан
    2 комментария
  • Запрос в MySQL. Есть идея?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Для поиска самих link_id
    select link_id from tablename
    group by link_id
    having count(*) = sum(flag  = 1)

    Либо
    select id from links
    where exists(select null from tablename where flag  = 1 and link_id = links.id) -- возможно это условие вам по задаче не нужно
    and not exists(select null from tablename where flag != 1 and link_id = links.id)


    Вычитывать сами строки можно попробовать через
    select ...
    from tablename t
    where t.flag = 1
    and not exists(select null from tablename sq where sq.link_id = t.link_id and sq.flag != 1)


    При том, какой из вариантов эффективнее - критично зависит от распределения данных. При большой числе различающихся link_id с малым числом строк на каждый link_id и малым ожидаемом числе подходящих строк под задачу может быть эффективнее именно
    select ... from tablename t where t.link_id in (
    select q.link_id from tablename q
    group by q.link_id
    having count(*) = sum(flag  = 1)
    )


    При большом числе строк на каждый link_id и малом числе разных link_id может оказаться разумнее аналогично сначала достать link_id удовлетворяющие условию и по ним уже доставать данные.

    Третий запрос по ожиданию лучше отзовётся на случай малого числа flag = 1 строк в таблице.

    Самый быстрый на чтение вариант, впрочем, всё равно не выполнять обработку этого фильтра налету, а каким-то образом его материализовать и хранить предварительно рассчитанным.
    Ответ написан
    7 комментариев
  • Как составить сложный SQL запрос?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Каждая проверка - целостный срез данных? То есть может быть такое, что для фразы 5 последняя проверка была в 2020-07-05, а для фразы 6 надо отматывать в 2020-07-03?

    В общем-то, едим слона по частям:
    извлечь суммарную информацию: сколько позиций фраз выросло, сколько позиций просело, сколько позиций осталось неизменными

    select count(*) filter(where r1.position < r2.position) as pos_down,
    count(*) filter(where r1.position = r2.position) as pos_same,
    count(*) filter(where r1.position > r2.position) as pos_up from ...


    Укус второй: надо откуда-то получить r1 и r2 соответственно строки таблицы за сравниваемые срезы. Это
    tablename r1 full join tablename r2 on r1.phrase_id = r2.phrase_id where r1.... and r2....


    Доедаем слона:
    нужно дописать условие фильтрации и достать для r1 данные одного среза, для r2 - другого. Тут у вас не вполне конкретизировано что есть "предыдущая проверка". Например, достанем из таблицы tasks предыдущий task_id:
    where r2.task_id = 123 and r1.task_id in (select id from tasks where id < 123 order by id desc limit 1)
    Ответ написан
  • Зависают запросы postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Отчётливо видно что запрос у вас for update, wait_event_type = Lock, wait_event = tuple.
    Следовательно запрос отнюдь не завис, всё так и должно быть. Какая-то другая транзакция уже взяла конфликтующую блокировку на эту строку и потому этот запрос ждёт чем та транзакция завершится.

    Какая сессия держит блокировку можно посмотреть, например, так: https://github.com/dataegret/pg-utils/blob/master/...
    Ответ написан
    Комментировать
  • RedBean - запрос update?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Как видно по наскальной живописи в комментарии (вместо нормального текста ошибки) - у вас не установлен mbstring
    Ответ написан
    1 комментарий
  • Как сделать запрос к 3 таблицам с условием where?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    По одному полю с таблицы проще подзапросом.
    select 
      (select deal_id from table_1 where item_id = 9041) as deal_id_1
      (select deal_id from table_2 where item_id = 9041) as deal_id_2
      (select deal_id from table_3 where item_id = 9041) as deal_id_3
    Ответ написан
    Комментировать
  • Совместим процессор с материнской платой?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Нет. LGA 1151 несовместим с LGA 1155
    Ответ написан
    Комментировать
  • Есть ли разница для автовакуума как были удалены строки из таблицы?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    После truncate автовакуум не запустится. Потому что зачем? Там пустой новый relfilenode для таблицы и всех индексов, что там пылесосить-то?
    Если из таблицы не нужны все данные - то truncate (или drop table) неисчислимо проще и быстрее для базы.
    Ответ написан
    Комментировать