Задать вопрос
  • Как проверить обьект jsonb на ilike со строкой в Postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    exists(select from jsonb_array_elements_text(col->'elements') as el where 'first-element' ilike concat('%', el, '%'))

    если я верно понял ваше описание
    Ответ написан
    Комментировать
  • Как безопасно заменить умерший винт в зеркале raid?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Сначала выяснить, что это за комп, какой рейд и как именно собран, какой именно из дисков отказал. Затем имея эти данные предметно выяснить как именно на этом контроллере/fakeraid/softraid восстанавливать избыточность после потери диска и на что стоит обратить внимание по пути.
    Ответ написан
    5 комментариев
  • Как построить локальную сеть?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Для ethernet сети из только двух хостов вообще ничего не нужно кроме собственно самих двух хостов и кабеля.
    Ответ написан
    Комментировать
  • Почему в ubuntu ошибки Unable to fetch some archives при установке пакетов?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    impish aka Ubuntu 21.10 уже EOL и удалена из репозиториев.
    Regular releases are supported for 9 months.

    Как и задумано.

    Вероятно, вы хотели использовать LTS релиз.
    Ответ написан
    Комментировать
  • Как поменять тип данных в столбце postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    alter table tablename alter columnname type varchar;
    Ответ написан
    Комментировать
  • Как функция index scan в postgresql понимает тип индекса?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Весь раздел https://www.postgresql.org/docs/current/internals.html
    за исключением разве что System Catalogs

    Узел Index Scan в плане запроса - это далеко не одна функция, а целый отдельный src/backend/executor/nodeIndexscan.c
    Ну и кучка поддерживающих конструкций, чтобы от этого был толк. Большая кучка конструкций. Очень.

    Как функция index scan в postgresql понимает тип индекса?

    А ему и не надо.
    Если планировщик выбрал index scan - значит этот index access method предоставляет совместимый интерфейс. Далее index scan согласно контракту index access method дёргает методы этого конкретного AM, и уже сам AM решает, где у него что лежит и как доставать требуемые TID по заданным условиям.

    и как именно Postgre понимает, какую функцию следует применять

    postgresql или postgres. Базы postgre не существует.
    А муками выбора о плане запроса страдает планировщик, работающий перед executor'ом. И там настоящая чёрная магия (и костыли)
    Ответ написан
    Комментировать
  • Как решить ошибку "must be superuser or replication role to start walsender"?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Добавьте в log_line_prefix как минимум %h, затем ищите на том хосте, кто может пытаться запустить walsender. Это может быть как физическая, так и встроенная логическая репликация.
    %u в log_line_prefix покажет каким логином этот процесс авторизовался, может навести на какие-то мысли о том что именно искать.
    Ответ написан
    1 комментарий
  • Стоит ли добавлять гарантийное обслуживание в договор (IT компании)?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Договор - это, сюрприз, то о чём вы договорились.

    Другая сторона хочет оговорить какие-то дополнительные моменты? Оговаривайте какие именно это моменты и думайте, готовы ли вы под такими обязательствами подписаться.
    Ответ написан
    Комментировать
  • Фильтрация соединений в мосту на openwrt?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    https://wiki.nftables.org/wiki-nftables/index.php/...
    https://openwrt.org/docs/guide-user/firewall/misc/...

    tldr:
    openwrt для firewall пока что использует старый добрый iptables. Он управляет только L3 уровнем.
    Для фильтрации на уровне коммутации L2 нужен более общий nftables, либо старый ebtables.

    PS: включение фильтрации уровня коммутации пакетов скорей всего отключит кучу оптимизаций и существенно увеличит загрузку CPU.
    Ответ написан
    Комментировать
  • Можно ли обновлять композитные типы в Postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Эти две команды именно про enum:
    ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]
    ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value

    Вот удаления значения из enum нет.

    Команды ADD/DROP/ALTER/RENAME ATTRIBUTE там же - это как раз про композитные типы. Уже используемые менять можно.
    Ответ написан
    Комментировать
  • Почему PostgreSQL ругается?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А почему не должен ругаться?
    Ни малейших представлений что это за синтаксис такой.
    Ответ написан
    Комментировать
  • Проекты для DBA и как их презентовать?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    и деморализующий ответ от postgresql DBA

    Вливаюсь в администрирование(в postgres на данном этапе)

    То есть опыта системного администрирования нет?
    А сколько лет опыта в разработке?
    Если оба ноль - выберите себе цель более реальную.
    Я не знаю ни одного DBA, у которого за плечами не было бы заметного опыта или системного администрирования или в разработке (у меня вот до сих пор больше лет опыта собирания граблей в разработке, чем опыта DBA).
    И, что для вас куда хуже, не имею представлений для какой работы может понадобится DBA без существенного багажа знаний, который подразумевает эта работа. Открыл вот HH и почему-то не могу найти вообще ни одной вакансии junior DBA. Да что говорить - полный результат поиска вакансий postgresql DBA укладывается в одну страницу.

    Таковы реалии DBA. Обычно будущий DBA выглядит или как опытный сисадмин, вникающий в работу SQL или как разработчик, к которому приходят коллеги с вопросами про работу СУБД.

    примеры проектов, которые не оторваны от реальности.

    1. доклад на конференции
    2. тут бы я написал sql ru, но его больше нет. Попробуйте отвечать на q&a хабра или ru.so. По моим наблюдениям они бесполезны и активность тут никого не интересует, в отличии от sql ru. Но зато некоторого опыта набраться можно, попутно потренировав ключевой навык любого IT - поиск информации
    3. посты на хабре
    4. вменяемый bug report (в самом postgresql или широко известных штуках рядом), впоследствии исправленный


    Что DBA может показать на гитхабе? Не знаю, postgres/postgres коммит с упоминанием своего имени, разве что.
    Дамп какой-то базы? Если только с детальным описанием предметной области и задач. А читать это всё хоть кто-то будет?
    Ответ написан
    Комментировать
  • Как узнать почему autovacuum не запускается для некоторых таблиц?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    удаляется мало, добавляется пачками ( где то 10 миллионов в день )
    не удаляется и не обновляется ничего

    Так и что тогда vacuum'ить? Нечего, мёртвых строк нет же.

    insert'ы до pg13 не провоцируют приход автовакуума (autovacuum_vacuum_insert_scale_factor), да и это было добавлено не ради вакуума, а ради freeze, чтобы потом autovacuum to prevent wraparound было меньше работы.
    Ответ написан
  • Есть ли штатный способ разбить большой UPDATE на транзакционные части?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Как делить одну большую операцию на части - необходимо базе объяснять.

    PG14 - нагенерировать запросов
    update ... where ctid between '(N,1)' and '(N+1000,1)'

    где N от 0 до relpages из pg_class и запустить.

    Если хочется - можно обернуть в анонимку DO, каждую очередную итерацию делая commit.

    На более старых версиях - выбрать какой-нибудь индекс скоррелированный с физическим расположением данных и идти вдоль него, нагенерировав запросов
    update ... where somecolumn between ? and ?
    кусками некоторого размера. Не имеет решающего значения соблюдение размера одного обновления, лишь бы выполнялся за разумное время.

    Во время миграции поглядывайте, успевает ли autovacuum за вами, успевают ли реплики и archiver (если есть).
    Ответ написан
    Комментировать
  • Как изменить директорию для postgresql wal?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    У initdb и pg_basebackup есть ключи запуска для этого.
    А на уже существующей базе - остановить базу, скопировать wal'ы в нужное место, заменить директорию wal'ов в PGDATA симлинком на новое место, запустить базу.
    Ответ написан
    1 комментарий
  • Почему иногда практикуется отсутствие связей в БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Не связано с микросервисами никак. Может встретиться в любых приложениях, работающих с базой.

    Кто-то забывает делать ограничения в схеме БД. Кто-то может вовсе не знать, что FK и check constraints существуют. Кто-то считает что проверки на приложении достаточно. (в этом случае бывает забавно показать примеры уже лежащих в БД данных, невозможных с точки зрения логики приложения)

    Сознательный, реально обоснованный отказ от FK - штука крайне редкая
    Ответ написан
    Комментировать
  • Почему периодически пакет для openjdk-11-jre становится не доступным?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Разве дебиан удаляет старую версию из репозитория?

    В список пакетов debian как правило публикует только одну доступную версию пакетов для этого релиза. (я не знаю примеров исключений этого правила, но не могу гарантировать что так всегда)
    При обновлении пакета, список пакетов начинает указывать на другую версию, старая версия пакета более в списке пакетов не числится и поэтому apt не может поставить эту конкретную версию.

    melkij@melkij:~$ apt-cache policy openjdk-11-jre
    openjdk-11-jre:
      Установлен: (отсутствует)
      Кандидат:   11.0.16+8-1~deb10u1
      Таблица версий:
         11.0.16+8-1~deb10u1 500
            500 http://security.debian.org buster/updates/main amd64 Packages
         11.0.14+9-1~deb10u1 500
            500 http://ftp.ru.debian.org/debian buster/main amd64 Packages

    Вот так смотрится какие версии доступны в загруженных репозиториях.

    Если вы хотите жёстко зафиксировать определённые пакеты - вам вероятно нужен собственный репозиторий, запиненный более высоким приоритетом относительно штатных. Принимая попутно все сопутствующие риски и работу сопровождения обновлений, в первую очередь security.
    Либо не фиксировать конкретную версию пакета.
    Ответ написан
    Комментировать
  • Как определить источник обращение к БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Используйте более подробный log_line_prefix. В частности, нужен %h

    log_line_prefix = '%m %p %u@%d from %h [vxid:%v txid:%x] [%i] '

    Мы такой используем если нет значимых причин для иного.
    Ответ написан
    1 комментарий
  • Как решить ошибку "string indices must be integers" в postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В postgresql такого текста ошибки нет.

    Этот запрос висит вечно

    Значит другие транзакции не дают вам получить access exclusive lock. (note: пока такой alter table в очереди ожидания - проект лежит)
    Посмотрите в pg_stat_activity что у вас запущено. например вот так
    Ответ написан