Задать вопрос
  • Копировать данные между двумя базами данных?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    FDW, dblink, pg_dump, copy to/copy from, написание отдельного скрипта на любом прикладном языке - что вам проще и какая возможность доступна - так и делается.
    Лишь только не перепутать местами источник и целевую базу.

    Например, на восстановленной базе переименовать табличку, pg_dump -t имя_таблички, импортировать в боевую базу
    Или взять pg_dump -s -t проблемная табличка, \copy в локальный файл данных, \copy из файла в пустую временную табличку
    А имея под рукой рядом оригинальную и восстановленную табличку уже править данные в ней
    Ответ написан
    Комментировать
  • Что лучше использовать для нахождения количества активных соединений с базой?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Без разницы. У них один и тот же источник данных. Можно и напрямую pg_stat_get_db_numbackends(oid) вызвать.

    В production для мониторинга обычно используется pg_stat_activity чтобы сразу забрать группировку по статусам backend'ов, длительность активных транзакций. Ну и скорее всего только client backend будут интересны на этом графике (ну возможно ещё с parallel worker'ами). Для процессов autovacuum удобнее отдельный график иметь.
    Ответ написан
    Комментировать
  • Как отловить плавающий по времени запрос?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    После, с параметрами которые отрабатывали 3-6 секунд, запрос выполняется с нормальной скоростью в ms

    Симптоматика медленного чтения с дисков.
    Поставьте pg_stat_statements, включите track_io_timing и посмотрите в blk_read_time, blk_write_time этого запроса относительно числа вызовов и общего времени их выполнения.

    PS: обратите внимание, что для СУБД критична латентность дисковой системы. Есть графики латентности io на чтение и запись?
    Ответ написан
  • Почему не обновляется запись из бд через pdo?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Поставьте PDO::ATTR_ERRMODE в адекватный PDO::ERRMODE_EXCEPTION при подключении к базе.

    Хинт: синтаксическая ошибка в запросе.
    Ответ написан
  • Как указать pdo не изменять регистр имен колонок?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А вы уверены, что это PDO меняет регистр, а не сама база делает то, что предписывает SQL стандарт? unquoted identifier регистронезависим. Приводить идентификаторы к единому регистру вполне предписываемое поведение. Правда, по стандарту идентификаторы приводить надо к uppercase.

    Укажите quoted identifier
    SELECT full_name as "fullName" FROM ....
    Ответ написан
    1 комментарий
  • Как происходит разрешение коллизий в хэшах PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    При записи данных tuple id просто сохраняются как есть в индексе. Неважно, это другая версия строки или неудачно попали на коллизию хеш-функции с другими данными
    При чтении hash индекс сообщает executor'у, что возвращаемые tuple id необходимо перепроверить по реальным данным (проставляет xs_recheck для indexscan либо выбирается bitmap scan с recheck condition) - механизм lossy поиска.
    Ответ написан
    Комментировать
  • На сколько быстро происходит пересчет hash индекса?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    hash индекс строится в один поток, для них многопоточный create index не делали. Потому загрузка 100% одного ядра - ситуация нормальная.
    Нет, create index не зависает.
    Если у вас селективность поля хреновая - то hash индекс будет строиться медленно, т.к. много строк попадает в одно и то же значение хеширования. Не помню точно, как именно хранится список TID при коллизиях хеш-функции, но точно работает хреново при большом числе дублей значений.

    Если версия postgresql достаточно свежая - то смотрите pg_stat_progress_create_index системное представление. Там будут некоторый progress reporting.
    Ответ написан
    4 комментария
  • Как корректно запустить базу postgresql после полного удаления каталога wal?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Корректно - абсолютно никак. WAL критичная часть базы.

    Некорректно, без всяких гарантий, но на clean shutdown базе можно надеяться без потери данных - pg_resetwal. Перед использованием сделайте бекап всего PGDATA ( /var/lib/postgresql/10/ut/ в вашем случае судя по пути до pg_wal). После старта базы - pg_dumpall и initdb всего кластера заново, как прямым текстом указано в документации к pg_resetwal.

    как нужно было сделать по уму если валы от слота не удаляются при удалении слота.

    Дождаться или сделать руками чекпойнт.
    Ответ написан
    Комментировать
  • Как правильно составить запрос в базу?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В принципе не надо так делать фильтр по месяцу через date_trunc.
    Напишите обычный
    and date >= '2021-04-01' and date < '2021-05-01'
    Индекс по btree( user_id, date ) вам наверняка ещё не раз пригодится. А вот городить отдельный btree(user_id, date_trunc('month', date)) под конкретный запрос - зачем, если можно сразу нормально написать сам запрос?

    Если лениво считать в коде первый день следующего месяца - попросите это сделать саму базу date '2021-04-01' + interval '1 month'
    Ответ написан
    Комментировать
  • Как восстановить базу POSTRGESQL в данном случае?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Забыть.
    В pg_dump нет информации о физическом расположении данных. В WAL нет информации о логическом расположении данных - даже на wal_level=logical потребуется обращение к системным каталогам. В WAL грубо говоря записано "записать такие байты по такому смещению в файл"
    Ответ написан
    1 комментарий
  • Почему Barman не находит pg_receivexlog?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    https://www.pgbarman.org/barman-2-3-released/
    5 September 2017: 2ndQuadrant is proud to announce the release of Barman version 2.3, a Backup and Recovery Manager for PostgreSQL.

    This minor release introduces support for PostgreSQL 10.
    Ответ написан
  • Как уведомлять в телеграмм от mdadm?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    PROGRAM в mdadm.conf можно задать
    PROGRAM
    The program line gives the name of a program to be run when
    mdadm --monitor detects potentially interesting events on any of
    the arrays that it is monitoring. This program gets run with
    two or three arguments, they being the Event, the md device, and
    possibly the related component device.

    There should only be one program line and it should be give only
    one program.
    Ответ написан
    6 комментариев
  • Как вернуть строки, полученные из SELECT в процедуре?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Может, вы всё-таки будете читать документацию к postgresql, а не к mssql? Или тогда уж оставайтесь с mssql.

    https://www.postgresql.org/docs/current/xproc.html
    A procedure is a database object similar to a function. The difference is that a procedure does not return a value, so there is no return type declaration.


    Если вам не нужен transaction control изнутри процедуры - то вам вообще не нужны процедуры, а нужны обычные функции.
    Ответ написан
    4 комментария
  • Почему не работает ограничение?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Написали, что last_name должно начинаться со строки [А-я] - так и проверяется.
    melkij=> select '[A]ds' like '[A]%';
    ?column?
    ----------
    t
    (1 строка)


    Куда вам query rewrite system, если вы регулярки от like не отличаете?
    Зачем not valid лучше даже не буду спрашивать.
    Ответ написан
    4 комментария
  • Почему не создается правило с IF?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Почему вы решили, что такой синтаксис существует?
    Почему вы решили, что вам нужны rule?

    Вам нужен check constraint.
    Для локализованного сообщения пользователю - проверка на backend'е вашего приложения. Ну или, если оочень хочется, запретить прямые изменения таблиц и общаться с пользователем базы только через хранимки.
    Ответ написан
  • Какой индекс сделать на запрос с offsetОМ в Postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Не делать большие offset.

    Если очень уж хочется, а профиль нагрузки и запросы позволяют - то увести в index-only scan получение уникального идентификатора строк с последующей вычиткой остальных полей.
    Например, https://pgday.ru/ru/2017/papers/232 с 14 слайда
    Ответ написан
    Комментировать
  • Checkpoints are occurring too frequently?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Предупреждение выводит настройка checkpoint_warning. Говорит о том, что вы создаёте так много wal, что срабатывают чекпойнты чаще величины этого варнинга. Это именно совет базы посмотреть внимательнее на конфигурацию и workload.

    Выяснить, чем именно вы генерируете wal и, возможно, переосмыслить этот процесс. Смотрите, что у вас обычно работает в то время, когда срабатывают эти предупреждения. Какие-то массовые импорты данных, ещё что, пишущее много данных.
    Возможно, вам нужно увеличить свой max_wal_size ещё дальше. Но учитывайте, что чем больше wal между чекпойнтами - тем дольше будет стартовать база после аварийного выключения, т.к. должна накатить все wal от последнего чекпойнта.
    Это tradeoff между временем старта база при аварии и количеством IO при нормальной работе. Чекпойнт - это довольно много IO.

    PS: спросите у базы "show max_wal_size;" точно ли настройка применена.
    Ответ написан
    3 комментария
  • Почему в генерируемой колонке нельзя задать свойство STORED?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f14773...
    it works

    Смотрите внимательно на текст ошибки и, особенно, на место на которое та указывает.
    Ответ написан
    9 комментариев
  • Сколько записей загружает View?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Выполните explain и узнаете. Будет видно и как глубоко ушли условия, и замену left join на inner join, и, вероятно, обратный порядок объединения таблиц.
    view для планировщика прозрачен и планируется заново всё дерево запроса.
    Ответ написан
    Комментировать
  • Чем автоматизировать бэкап 1000 БД на нескольких серверах?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    и инкрементный каждый час.

    Такого нет.

    Полновесный PitR (возможно с diff копиями для ускорения recovery, но только если уверены в этом стороннем механизме - нативно postgresql не поддерживает такую операцию) - снимается целиком с кластера, со всеми базами сразу. Соответственно пересматривайте требование к "На каждую БД нужен отдельный, независимый бэкап".

    Под требование "На каждую БД нужен отдельный, независимый бэкап" - только pg_dump, что, соответственно, даст возможность восстанавливаться только на эту самую точку времени старта транзакции дампа.
    Ответ написан
    Комментировать