• Фильтрация соединений в мосту на openwrt?

    Melkij
    @Melkij
    PostgreSQL DBA
    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
    PostgreSQL DBA
    Эти две команды именно про 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 там же - это как раз про композитные типы. Уже используемые менять можно.
    Ответ написан
    Комментировать
  • Как правильно сделать запрос в постгресе?

    Melkij
    @Melkij
    PostgreSQL DBA
    Вы написали
    ON inventories.id = devices.id;
    Объединять по паре serial, конечно, можно и база честно выполнит такой запрос. Но обычно из этого не получается ничего полезного для ипользования. Может быть вы хотели сказать inventories.device_id = devices.id?
    Ответ написан
    1 комментарий
  • Почему PostgreSQL ругается?

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

    Melkij
    @Melkij
    PostgreSQL DBA
    и деморализующий ответ от 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
    PostgreSQL DBA
    удаляется мало, добавляется пачками ( где то 10 миллионов в день )
    не удаляется и не обновляется ничего

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

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

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

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

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

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

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

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

    В список пакетов 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
    PostgreSQL DBA
    Используйте более подробный 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
    PostgreSQL DBA
    В postgresql такого текста ошибки нет.

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

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

    Melkij
    @Melkij
    PostgreSQL DBA
    Для полноты картины добавлю: по соображениям криптостойкости шифрование диска наверняка отключит использование TRIM (см. конкретную реализацию шифрования). Что при шифровании всей доступной ёмкости диска существенно ухудшит производительность I/O на дешёвых SSD - они не смогут использовать неиспользуемое пространство flash для ускорения записи (так называемый SLC кеш) потому что будут думать, что вся ёмкость занята полезными данными, а избыточной подменной ёмкости flash ради удешевления там конечно практически нет.
    Скорей всего SMR HDD тоже рады не будут (да они вообще ничему не рады).

    И не забудьте заранее позаботиться о бекапах.
    Ответ написан
    Комментировать
  • Почему nextcloud не может писать в папке home?

    Melkij
    @Melkij
    PostgreSQL DBA
    У www-data нет x прав на директорию /home/username/
    Ответ написан
    Комментировать
  • Показывать IP клиента NASу за NAT в Mikrotik, возможно?

    Melkij
    @Melkij
    PostgreSQL DBA
    Но по таким правилам все клиенты попадают в NAS от IP роутера (то есть типа изнутри).

    Так а зачем вы делаете маскарад на входящий трафик?
    https://help.mikrotik.com/docs/display/ROS/NAT
    Ответ написан
    Комментировать
  • Как правильно составить запрос INSERT в postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    ... DO UPDATE SET payment_date = info.payment_date + interval '23 hours';

    Данные конфликтующей строки доступны
    The SET and WHERE clauses in ON CONFLICT DO UPDATE have access to the existing row using the table's name (or an alias), and to rows proposed for insertion using the special excluded table.

    имени таблицы (или алиаса указанного в запросе) - та версия строки что есть
    псевдоним excluded - те значения что этот insert предполагал записать
    Ответ написан
    2 комментария
  • Правильно ли организовано логирование?

    Melkij
    @Melkij
    PostgreSQL DBA
    Документация отвечает однозначно
    Current date and time (start of current transaction);

    current_timestamp - это всегда время начала транзакции. Сколько бы транзакция ни заняла времени, до её окончания current_timestamp будет возвращать одно и то же значение.
    А правильно это для вашей задачи или нужно использовать другую из функций датывремени - это только к вам вопрос.
    Ответ написан
    1 комментарий
  • Как ускорить работу слота репликации на PostgreSQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    Скорей всего упираетесь в производительность IO на временных файлах, увеличение logical_decoding_work_mem с этим должно помочь.
    Затем посмотрите, не упираетесь ли в 100% cpu на этом процессе. logical decoding однопоточный, ему важна производительность в один поток. Тут ничего не поможет. Прочитать, понять и переупорядочить данные среди гигабайтов wal'ов всё равно придётся.
    Ответ написан
    Комментировать
  • С чего начинать тестирование двухюнитовых серверов с 16 планками U-DIMM и 24 хардами в Linux?

    Melkij
    @Melkij
    PostgreSQL DBA
    CPU(s):                          256
    On-line CPU(s) list:             0-255
    Thread(s) per core:              2
    Core(s) per socket:              64
    Socket(s):                       2

    Я не понял проблематику ситуации. 40 ядер, несколько сотен гигов RAM да пара десятков дисков - средняя железка, какие там у вас специфические проблемы такие? 40 ядер нынче не проблема даже одним сокетом получить.

    Что касается памяти тут отдельная история, поступила жалоба, что U-DIMMы работают только при полной сборке (все 16), либо подключенные последовательно (с1 по 4 место например), но подключая в 1,3,7,12(например) места некоторые планки не определяются, либо сервер работает не корректно (не запускается, не стартует).

    См. документацию к материнке. Там будет описано, в каком порядке необходимо заполнять слоты. Да, это стандартное требование JEDEC для DIMM'ов, что серверных, что десктопных. Технически связано с терминаторами. Затем, после требований стандарта, идёт логика как не повесить всю имеющуюся память на один и тот же канал памяти одного и того же CPU. NUMA всё-таки.
    Вы правда занимаетесь серверами?
    Ответ написан
  • Почему я могу установить NULL в колонку mark, если у меня есть CHECK(mark in (1,2,3))?

    Melkij
    @Melkij
    PostgreSQL DBA
    Нет, не должен. Значение NULL не противоречит такому check constraint. На самом деле даже в исходниках самого postgresql есть замечания, что такое поведение несколько неожиданно, но таков стандарт SQL.
    Ответ написан
    Комментировать